/ Hex Artifact Content
Login

Artifact 47f291495f5fca52bd933dc1e3c70b513160e2b06b738db76fe4392a056054f3:


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 48 41 56 45 5f 53 54 44 49 4e 54 5f 48  ed(HAVE_STDINT_H
1f20: 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  )   /* Use this 
1f30: 63 61 73 65 20 69 66 20 77 65 20 68 61 76 65 20  case if we have 
1f40: 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f 0a  ANSI headers */.
1f50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1f60: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
1f70: 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f 74  (void*)(intptr_t
1f80: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
1f90: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
1fa0: 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74 70  (X)  ((int)(intp
1fb0: 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 69 66 20  tr_t)(X)).#elif 
1fc0: 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49 46  defined(__PTRDIF
1fd0: 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68  F_TYPE__)  /* Th
1fe0: 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20 77  is case should w
1ff0: 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23  ork for GCC */.#
2000: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
2010: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
2020: 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46 46  void*)(__PTRDIFF
2030: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20 64  _TYPE__)(X)).# d
2040: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
2050: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
2060: 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  t)(__PTRDIFF_TYP
2070: 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20 21  E__)(X)).#elif !
2080: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
2090: 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73  )       /* Works
20a0: 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f   for compilers o
20b0: 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a  ther than LLVM *
20c0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
20d0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
20e0: 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72   ((void*)&((char
20f0: 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e  *)0)[X]).# defin
2100: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
2110: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 28  INT(X)  ((int)((
2120: 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72 2a  (char*)X)-(char*
2130: 29 30 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  )0)).#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 20 7c 7c 20  d(i386)      || 
6dd0: 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f  defined(__i386__
6de0: 29 20 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  )      || define
6df0: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
6e00: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6e10: 5f 5f 78 38 36 5f 36 34 29 20 20 7c 7c 20 64 65  __x86_64)  || de
6e20: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
6e30: 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  )    || defined(
6e40: 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c  _M_X64)  ||    \
6e50: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d  .     defined(_M
6e60: 5f 41 4d 44 36 34 29 20 20 7c 7c 20 64 65 66 69  _AMD64)  || defi
6e70: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20  ned(_M_ARM)     
6e80: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
6e90: 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20  x86)   ||    \. 
6ea0: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6eb0: 4d 45 4c 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEL__) || define
6ec0: 64 28 5f 5f 41 41 52 43 48 36 34 45 4c 5f 5f 29  d(__AARCH64EL__)
6ed0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41   || defined(_M_A
6ee0: 52 4d 36 34 29 0a 23 20 20 20 64 65 66 69 6e 65  RM64).#   define
6ef0: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
6f00: 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69 66  R    1234.# elif
6f10: 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20   defined(sparc) 
6f20: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6f30: 5f 70 70 63 5f 5f 29 20 7c 7c 20 5c 0a 20 20 20  _ppc__) || \.   
6f40: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6f50: 4d 45 42 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEB__) || define
6f60: 64 28 5f 5f 41 41 52 43 48 36 34 45 42 5f 5f 29  d(__AARCH64EB__)
6f70: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
6f80: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
6f90: 34 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20  4321.# else.#   
6fa0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
6fb0: 54 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69  TEORDER 0.# endi
6fc0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  f.#endif.#if SQL
6fd0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34  ITE_BYTEORDER==4
6fe0: 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  321.# define SQL
6ff0: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
7000: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
7010: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
7020: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
7030: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
7040: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65  QLITE_UTF16BE.#e
7050: 6c 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  lif SQLITE_BYTEO
7060: 52 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66  RDER==1234.# def
7070: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
7080: 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69  DIAN    0.# defi
7090: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
70a0: 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e  ENDIAN 1.# defin
70b0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
70c0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
70d0: 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64  16LE.#else.# ifd
70e0: 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
70f0: 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69  MATION.  const i
7100: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
7110: 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65  1;.# else.  exte
7120: 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  rn const int sql
7130: 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66  ite3one;.# endif
7140: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7150: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a  _BIGENDIAN    (*
7160: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
7170: 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69  3one)==0).# defi
7180: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
7190: 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a  ENDIAN (*(char *
71a0: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
71b0: 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1).# define SQLI
71c0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
71d0: 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41  (SQLITE_BIGENDIA
71e0: 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  N?SQLITE_UTF16BE
71f0: 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29  :SQLITE_UTF16LE)
7200: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
7210: 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65  onstants for the
7220: 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61   largest and sma
7230: 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36  llest possible 6
7240: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
7250: 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20  egers..** These 
7260: 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67  macros are desig
7270: 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72  ned to work corr
7280: 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32  ectly on both 32
7290: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a  -bit and 64-bit.
72a0: 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f  ** compilers..*/
72b0: 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54  .#define LARGEST
72c0: 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66  _INT64  (0xfffff
72d0: 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66  fff|(((i64)0x7ff
72e0: 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65  fffff)<<32)).#de
72f0: 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e  fine SMALLEST_IN
7300: 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d  T64 (((i64)-1) -
7310: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a   LARGEST_INT64).
7320: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20  ./*.** Round up 
7330: 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20  a number to the 
7340: 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74  next larger mult
7350: 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73  iple of 8.  This
7360: 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66   is used.** to f
7370: 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67  orce 8-byte alig
7380: 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20  nment on 64-bit 
7390: 61 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a  architectures..*
73a0: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38  /.#define ROUND8
73b0: 28 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29  (x)     (((x)+7)
73c0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e  &~7)../*.** Roun
73d0: 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65  d down to the ne
73e0: 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f  arest multiple o
73f0: 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  f 8.*/.#define R
7400: 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78  OUNDDOWN8(x) ((x
7410: 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  )&~7)../*.** Ass
7420: 65 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69  ert that the poi
7430: 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65  nter X is aligne
7440: 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62  d to an 8-byte b
7450: 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a  oundary.  This.*
7460: 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  * macro is used 
7470: 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65  only within asse
7480: 72 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74  rt() to verify t
7490: 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74  hat the code get
74a0: 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65  s.** all alignme
74b0: 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  nt restrictions 
74c0: 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45  correct..**.** E
74d0: 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45  xcept, if SQLITE
74e0: 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f  _4_BYTE_ALIGNED_
74f0: 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65  MALLOC is define
7500: 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75  d, then the.** u
7510: 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63  nderlying malloc
7520: 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  () implementatio
7530: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
7540: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
7550: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
7560: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
7570: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
7580: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
7590: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
75a0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
75b0: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
75c0: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
75d0: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
75e0: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
75f0: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
7600: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
7610: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
7620: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
7630: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
7640: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69  #endif../*.** Di
7650: 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c  sable MMAP on pl
7660: 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74  atforms where it
7670: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74   is known to not
7680: 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66   work.*/.#if def
7690: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
76a0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51  ) || defined(__Q
76b0: 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66  NXNTO__).# undef
76c0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
76d0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
76e0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
76f0: 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IZE 0.#endif../*
7700: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69  .** Default maxi
7710: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f  mum size of memo
7720: 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72  ry used by memor
7730: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20  y-mapped I/O in 
7740: 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65  the VFS.*/.#ifde
7750: 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e  f __APPLE__.# in
7760: 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e  clude <TargetCon
7770: 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e  ditionals.h>.#en
7780: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
7790: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
77a0: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
77b0: 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20  linux__) \.  || 
77c0: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
77d0: 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28  \.  || (defined(
77e0: 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65  __APPLE__) && de
77f0: 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29  fined(__MACH__))
7800: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
7810: 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65  __sun) \.  || de
7820: 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f  fined(__FreeBSD_
7830: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
7840: 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29  d(__DragonFly__)
7850: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
7860: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7870: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
7880: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
7890: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
78a0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
78b0: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
78c0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
78d0: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
78e0: 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c  ZE is zero on al
78f0: 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72  l platforms.  Or
7900: 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67  , even if a larg
7910: 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d  er.** default MM
7920: 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69  AP_SIZE is speci
7930: 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  fied at compile-
7940: 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
7950: 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20  that it does.** 
7960: 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d  not exceed the m
7970: 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65  aximum mmap size
7980: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
7990: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
79a0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
79b0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
79c0: 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66  AP_SIZE 0.#endif
79d0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
79e0: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51  ULT_MMAP_SIZE>SQ
79f0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7a00: 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  ZE.# undef SQLIT
7a10: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
7a20: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
7a30: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
7a40: 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58  _SIZE SQLITE_MAX
7a50: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69  _MMAP_SIZE.#endi
7a60: 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54  f../*.** SELECTT
7a70: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c  RACE_ENABLED wil
7a80: 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72  l be either 1 or
7a90: 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20   0 depending on 
7aa0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a  whether or not.*
7ab0: 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65  * the Select que
7ac0: 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61  ry generator tra
7ad0: 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75  cing logic is tu
7ae0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
7af0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
7b00: 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
7b10: 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45  E).# define SELE
7b20: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
7b30: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
7b40: 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
7b50: 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  BLED 0.#endif../
7b60: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
7b70: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
7b80: 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  g structure is u
7b90: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
7ba0: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
7bb0: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20   callback for a 
7bc0: 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e  given sqlite han
7bd0: 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  dle..**.** The s
7be0: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
7bf0: 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  r member of the 
7c00: 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f  sqlite struct co
7c10: 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a  ntains the busy.
7c20: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  ** callback for 
7c30: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
7c40: 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20  dle. Each pager 
7c50: 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73  opened via the s
7c60: 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20  qlite.** handle 
7c70: 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e  is passed a poin
7c80: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75  ter to sqlite.bu
7c90: 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62  syHandler. The b
7ca0: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
7cb0: 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65  allback is curre
7cc0: 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c  ntly invoked onl
7cd0: 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61  y from within pa
7ce0: 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65  ger.c..*/.typede
7cf0: 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  f struct BusyHan
7d00: 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72  dler BusyHandler
7d10: 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  ;.struct BusyHan
7d20: 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78  dler {.  int (*x
7d30: 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f 69  BusyHandler)(voi
7d40: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
7d50: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
7d60: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73 79  */.  void *pBusy
7d70: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
7d80: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
7d90: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
7da0: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
7db0: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
7dc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
7dd0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
7de0: 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a  each busy call *
7df0: 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69 6c  /.  u8 bExtraFil
7e00: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
7e10: 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64 65        /* Include
7e20: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61 73   sqlite3_file as
7e30: 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a 2f   callback arg */
7e40: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20  .};../*.** Name 
7e50: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
7e60: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54  tabase table.  T
7e70: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
7e80: 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61  se table.** is a
7e90: 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74   special table t
7ea0: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
7eb0: 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74  mes and attribut
7ec0: 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65  es of all.** use
7ed0: 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  r tables and ind
7ee0: 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ices..*/.#define
7ef0: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20   MASTER_NAME    
7f00: 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65     "sqlite_maste
7f10: 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f  r".#define TEMP_
7f20: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71  MASTER_NAME  "sq
7f30: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
7f40: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  "../*.** The roo
7f50: 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61  t-page of the ma
7f60: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
7f70: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
7f80: 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20  MASTER_ROOT     
7f90: 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e    1../*.** The n
7fa0: 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ame of the schem
7fb0: 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  a table..*/.#def
7fc0: 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  ine SCHEMA_TABLE
7fd0: 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d  (x)  ((!OMIT_TEM
7fe0: 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d  PDB)&&(x==1)?TEM
7ff0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41  P_MASTER_NAME:MA
8000: 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a  STER_NAME)../*.*
8010: 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20  * A convenience 
8020: 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72  macro that retur
8030: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
8040: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20   elements in.** 
8050: 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65  an array..*/.#de
8060: 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58  fine ArraySize(X
8070: 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65  )    ((int)(size
8080: 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30  of(X)/sizeof(X[0
8090: 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ])))../*.** Dete
80a0: 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67  rmine if the arg
80b0: 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72  ument is a power
80c0: 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69   of two.*/.#defi
80d0: 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28  ne IsPowerOfTwo(
80e0: 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29  X) (((X)&((X)-1)
80f0: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )==0)../*.** The
8100: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65   following value
8110: 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72   as a destructor
8120: 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71   means to use sq
8130: 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a  lite3DbFree()..*
8140: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46  * The sqlite3DbF
8150: 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ree() routine re
8160: 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d  quires two param
8170: 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66  eters instead of
8180: 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61   the.** one para
8190: 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74 72  meter that destr
81a0: 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20  uctors normally 
81b0: 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76  want.  So we hav
81c0: 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a  e to introduce.*
81d0: 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c  * this magic val
81e0: 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  ue that the code
81f0: 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65   knows to handle
8200: 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41   differently.  A
8210: 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69  ny.** pointer wi
8220: 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20  ll work here as 
8230: 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69  long as it is di
8240: 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49  stinct from SQLI
8250: 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64  TE_STATIC.** and
8260: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
8270: 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  T..*/.#define SQ
8280: 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28  LITE_DYNAMIC   (
8290: 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63  (sqlite3_destruc
82a0: 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33  tor_type)sqlite3
82b0: 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a  MallocSize)../*.
82c0: 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f  ** When SQLITE_O
82d0: 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e  MIT_WSD is defin
82e0: 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  ed, it means tha
82f0: 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61  t the target pla
8300: 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f  tform does.** no
8310: 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62  t support Writab
8320: 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28  le Static Data (
8330: 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f  WSD) such as glo
8340: 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76  bal and static v
8350: 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c  ariables..** All
8360: 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20   variables must 
8370: 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65  either be on the
8380: 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69   stack or dynami
8390: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
83a0: 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70  from.** the heap
83b0: 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75  .  When WSD is u
83c0: 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20  nsupported, the 
83d0: 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61  variable declara
83e0: 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a  tions scattered.
83f0: 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68  ** throughout th
8400: 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75  e SQLite code mu
8410: 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61  st become consta
8420: 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68  nts instead.  Th
8430: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20  e SQLITE_WSD.** 
8440: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
8450: 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20  r this purpose. 
8460: 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20   And instead of 
8470: 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20  referencing the 
8480: 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65  variable.** dire
8490: 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73  ctly, we use its
84a0: 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b   constant as a k
84b0: 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65  ey to lookup the
84c0: 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61   run-time alloca
84d0: 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68  ted.** buffer th
84e0: 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61  at holds real va
84f0: 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e  riable.  The con
8500: 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68  stant is also th
8510: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a  e initializer.**
8520: 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d   for the run-tim
8530: 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  e allocated buff
8540: 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  er..**.** In the
8550: 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72   usual case wher
8560: 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74  e WSD is support
8570: 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57  ed, the SQLITE_W
8580: 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a  SD and GLOBAL.**
8590: 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e   macros become n
85a0: 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a  o-ops and have z
85b0: 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ero performance 
85c0: 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65  impact..*/.#ifde
85d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
85e0: 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  D.  #define SQLI
85f0: 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23  TE_WSD const.  #
8600: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
8610: 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33  v) (*(t*)sqlite3
8620: 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a  _wsd_find((void*
8630: 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29  )&(v), sizeof(v)
8640: 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  )).  #define sql
8650: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
8660: 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53   GLOBAL(struct S
8670: 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71  qlite3Config, sq
8680: 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69  lite3Config).  i
8690: 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69  nt sqlite3_wsd_i
86a0: 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a  nit(int N, int J
86b0: 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  );.  void *sqlit
86c0: 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64  e3_wsd_find(void
86d0: 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c   *K, int L);.#el
86e0: 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  se.  #define SQL
86f0: 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  ITE_WSD.  #defin
8700: 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a  e GLOBAL(t,v) v.
8710: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
8720: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71  3GlobalConfig sq
8730: 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64  lite3Config.#end
8740: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
8750: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
8760: 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  re used to suppr
8770: 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  ess compiler war
8780: 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20  nings and to.** 
8790: 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f  make it clear to
87a0: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77   human readers w
87b0: 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  hen a function p
87c0: 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69  arameter is deli
87d0: 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74  berately.** left
87e0: 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74   unused within t
87f0: 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e  he body of a fun
8800: 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61  ction. This usua
8810: 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e  lly happens when
8820: 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69  .** a function i
8830: 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66  s called via a f
8840: 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e  unction pointer.
8850: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65   For example the
8860: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
8870: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
8880: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
8890: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
88a0: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
88b0: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
88c0: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
88d0: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
88e0: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
88f0: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
8900: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
8910: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
8920: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
8930: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
8940: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
8950: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
8960: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
8970: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
8980: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
8990: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
89a0: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
89b0: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
89c0: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
89d0: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
89e0: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
89f0: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
8a00: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
8a10: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
8a20: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
8a30: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
8a40: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
8a50: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
8a60: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
8a70: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
8a80: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
8a90: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
8aa0: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
8ab0: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
8ac0: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
8ad0: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
8ae0: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
8af0: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
8b00: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
8b10: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8b20: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
8b30: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
8b40: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
8b50: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
8b60: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
8b70: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
8b80: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
8b90: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
8ba0: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
8bb0: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
8bc0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8bd0: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
8be0: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
8bf0: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
8c00: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
8c10: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
8c20: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
8c30: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
8c40: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
8c50: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
8c60: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
8c70: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
8c80: 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61 50  f struct SchemaP
8c90: 6f 6f 6c 20 53 63 68 65 6d 61 50 6f 6f 6c 3b 0a  ool SchemaPool;.
8ca0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
8cb0: 78 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65  xpr Expr;.typede
8cc0: 66 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  f struct ExprLis
8cd0: 74 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65  t ExprList;.type
8ce0: 64 65 66 20 73 74 72 75 63 74 20 46 4b 65 79 20  def struct FKey 
8cf0: 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73 74  FKey;.typedef st
8d00: 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63  ruct FuncDestruc
8d10: 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63 74  tor FuncDestruct
8d20: 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  or;.typedef stru
8d30: 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63 44  ct FuncDef FuncD
8d40: 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ef;.typedef stru
8d50: 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 46  ct FuncDefHash F
8d60: 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70 65  uncDefHash;.type
8d70: 64 65 66 20 73 74 72 75 63 74 20 49 64 4c 69 73  def struct IdLis
8d80: 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64 65  t IdList;.typede
8d90: 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 20 49  f struct Index I
8da0: 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73 74  ndex;.typedef st
8db0: 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65  ruct IndexSample
8dc0: 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79   IndexSample;.ty
8dd0: 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79  pedef struct Key
8de0: 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a  Class KeyClass;.
8df0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b  typedef struct K
8e00: 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a  eyInfo KeyInfo;.
8e10: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
8e20: 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69  ookaside Lookasi
8e30: 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  de;.typedef stru
8e40: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ct LookasideSlot
8e50: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a   LookasideSlot;.
8e60: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4d  typedef struct M
8e70: 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79  odule Module;.ty
8e80: 70 65 64 65 66 20 73 74 72 75 63 74 20 4e 61 6d  pedef struct Nam
8e90: 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e  eContext NameCon
8ea0: 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74  text;.typedef st
8eb0: 72 75 63 74 20 50 61 72 73 65 20 50 61 72 73 65  ruct Parse Parse
8ec0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8ed0: 20 50 72 65 55 70 64 61 74 65 20 50 72 65 55 70   PreUpdate PreUp
8ee0: 64 61 74 65 3b 0a 74 79 70 65 64 65 66 20 73 74  date;.typedef st
8ef0: 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d  ruct PrintfArgum
8f00: 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75 6d  ents PrintfArgum
8f10: 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73 74  ents;.typedef st
8f20: 72 75 63 74 20 52 65 6e 61 6d 65 54 6f 6b 65 6e  ruct RenameToken
8f30: 20 52 65 6e 61 6d 65 54 6f 6b 65 6e 3b 0a 74 79   RenameToken;.ty
8f40: 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77  pedef struct Row
8f50: 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65  Set RowSet;.type
8f60: 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70  def struct Savep
8f70: 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a  oint Savepoint;.
8f80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
8f90: 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79  elect Select;.ty
8fa0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51 4c  pedef struct SQL
8fb0: 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74 65  iteThread SQLite
8fc0: 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20  Thread;.typedef 
8fd0: 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
8fe0: 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79  t SelectDest;.ty
8ff0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63  pedef struct Src
9000: 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79  List SrcList;.ty
9010: 70 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c  pedef struct sql
9020: 69 74 65 33 5f 73 74 72 20 53 74 72 41 63 63 75  ite3_str StrAccu
9030: 6d 3b 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 20 61  m; /* Internal a
9040: 6c 69 61 73 20 66 6f 72 20 73 71 6c 69 74 65 33  lias for sqlite3
9050: 5f 73 74 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  _str */.typedef 
9060: 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61 62  struct Table Tab
9070: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
9080: 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62  ct TableLock Tab
9090: 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20  leLock;.typedef 
90a0: 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b  struct Token Tok
90b0: 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  en;.typedef stru
90c0: 63 74 20 54 72 65 65 56 69 65 77 20 54 72 65 65  ct TreeView Tree
90d0: 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20 73 74  View;.typedef st
90e0: 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69  ruct Trigger Tri
90f0: 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  gger;.typedef st
9100: 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20  ruct TriggerPrg 
9110: 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65  TriggerPrg;.type
9120: 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67  def struct Trigg
9130: 65 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74  erStep TriggerSt
9140: 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ep;.typedef stru
9150: 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  ct UnpackedRecor
9160: 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  d UnpackedRecord
9170: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
9180: 20 55 70 73 65 72 74 20 55 70 73 65 72 74 3b 0a   Upsert Upsert;.
9190: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56  typedef struct V
91a0: 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79  Table VTable;.ty
91b0: 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74 61  pedef struct Vta
91c0: 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79  bCtx VtabCtx;.ty
91d0: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61 6c  pedef struct Wal
91e0: 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65  ker Walker;.type
91f0: 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72 65  def struct Where
9200: 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a  Info WhereInfo;.
9210: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
9220: 69 6e 64 6f 77 20 57 69 6e 64 6f 77 3b 0a 74 79  indow Window;.ty
9230: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 69 74  pedef struct Wit
9240: 68 20 57 69 74 68 3b 0a 0a 0a 2f 2a 0a 2a 2a 20  h With;.../*.** 
9250: 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61  The bitmask data
9260: 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c  type defined bel
9270: 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 76  ow is used for v
9280: 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74  arious optimizat
9290: 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e  ions..**.** Chan
92a0: 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61  ging this from a
92b0: 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d   64-bit to a 32-
92c0: 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20  bit type limits 
92d0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a  the number of.**
92e0: 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69   tables in a joi
92f0: 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20  n to 32 instead 
9300: 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20 61  of 64.  But it a
9310: 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65 20  lso reduces the 
9320: 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c  size.** of the l
9330: 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62 79  ibrary by 738 by
9340: 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a  tes on ix86..*/.
9350: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 42 49  #ifdef SQLITE_BI
9360: 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20 74 79 70  TMASK_TYPE.  typ
9370: 65 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d  edef SQLITE_BITM
9380: 41 53 4b 5f 54 59 50 45 20 42 69 74 6d 61 73 6b  ASK_TYPE Bitmask
9390: 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65  ;.#else.  typede
93a0: 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 23  f u64 Bitmask;.#
93b0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
93c0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
93d0: 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22  in a Bitmask.  "
93e0: 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d  BMS" means "BitM
93f0: 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64  ask Size"..*/.#d
9400: 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74  efine BMS  ((int
9410: 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b  )(sizeof(Bitmask
9420: 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62  )*8))../*.** A b
9430: 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a  it in a Bitmask.
9440: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  */.#define MASKB
9450: 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61  IT(n)   (((Bitma
9460: 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66  sk)1)<<(n)).#def
9470: 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29  ine MASKBIT32(n)
9480: 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74   (((unsigned int
9490: 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e  )1)<<(n)).#defin
94a0: 65 20 41 4c 4c 42 49 54 53 20 20 20 20 20 20 28  e ALLBITS      (
94b0: 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a  (Bitmask)-1)../*
94c0: 20 41 20 56 4c 69 73 74 20 6f 62 6a 65 63 74 20   A VList object 
94d0: 72 65 63 6f 72 64 73 20 61 20 6d 61 70 70 69 6e  records a mappin
94e0: 67 20 62 65 74 77 65 65 6e 20 70 61 72 61 6d 65  g between parame
94f0: 74 65 72 73 2f 76 61 72 69 61 62 6c 65 73 2f 77  ters/variables/w
9500: 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69 6e 20 74  ildcards.** in t
9510: 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
9520: 20 28 73 75 63 68 20 61 73 20 24 61 62 63 2c 20   (such as $abc, 
9530: 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a 29 20 61  @pqr, or :xyz) a
9540: 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 0a 2a  nd the integer.*
9550: 2a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65  * variable numbe
9560: 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
9570: 68 20 74 68 61 74 20 70 61 72 61 6d 65 74 65 72  h that parameter
9580: 2e 20 20 53 65 65 20 74 68 65 20 66 6f 72 6d 61  .  See the forma
9590: 74 20 64 65 73 63 72 69 70 74 69 6f 6e 0a 2a 2a  t description.**
95a0: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 56   on the sqlite3V
95b0: 4c 69 73 74 41 64 64 28 29 20 72 6f 75 74 69 6e  ListAdd() routin
95c0: 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72  e for more infor
95d0: 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c 69 73 74  mation.  A VList
95e0: 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a 20 6a 75   is really.** ju
95f0: 73 74 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69  st an array of i
9600: 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74 79 70 65  ntegers..*/.type
9610: 64 65 66 20 69 6e 74 20 56 4c 69 73 74 3b 0a 0a  def int VList;..
9620: 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72  /*.** Defer sour
9630: 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20  cing vdbe.h and 
9640: 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66  btree.h until af
9650: 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e 64  ter the "u8" and
9660: 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72  .** "BusyHandler
9670: 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62 65  " typedefs. vdbe
9680: 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73  .h also requires
9690: 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70   a few of the op
96a0: 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  aque.** pointer 
96b0: 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63  types (i.e. Func
96c0: 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f  Def) defined abo
96d0: 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  ve..*/.#include 
96e0: 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75  "btree.h".#inclu
96f0: 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63  de "vdbe.h".#inc
9700: 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23  lude "pager.h".#
9710: 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e  include "pcache.
9720: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e  h".#include "os.
9730: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74  h".#include "mut
9740: 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65 20 53 51  ex.h"../* The SQ
9750: 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42  LITE_EXTRA_DURAB
9760: 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  LE compile-time 
9770: 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 73  option used to s
9780: 65 74 20 74 68 65 20 64 65 66 61 75 6c 74 0a 2a  et the default.*
9790: 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65  * synchronous se
97a0: 74 74 69 6e 67 20 74 6f 20 45 58 54 52 41 2e 20  tting to EXTRA. 
97b0: 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72   It is no longer
97c0: 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23   supported..*/.#
97d0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 58 54  ifdef SQLITE_EXT
97e0: 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 77 61 72  RA_DURABLE.# war
97f0: 6e 69 6e 67 20 55 73 65 20 53 51 4c 49 54 45 5f  ning Use SQLITE_
9800: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9810: 4f 55 53 3d 33 20 69 6e 73 74 65 61 64 20 6f 66  OUS=3 instead of
9820: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9830: 52 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 53  RABLE.# define S
9840: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9850: 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23 65 6e 64  NCHRONOUS 3.#end
9860: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c  if../*.** Defaul
9870: 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c 65  t synchronous le
9880: 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  vels..**.** Note
9890: 20 74 68 61 74 20 28 66 6f 72 20 68 69 73 74 6f   that (for histo
98a0: 72 63 61 6c 20 72 65 61 73 6f 6e 73 29 20 74 68  rcal reasons) th
98b0: 65 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e  e PAGER_SYNCHRON
98c0: 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20 64 69 66  OUS_* macros dif
98d0: 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  fer.** from the 
98e0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
98f0: 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61 6c 75 65  YNCHRONOUS value
9900: 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20   by 1..**.**    
9910: 20 20 20 20 20 20 20 50 41 47 45 52 5f 53 59 4e         PAGER_SYN
9920: 43 48 52 4f 4e 4f 55 53 20 20 20 20 20 20 20 44  CHRONOUS       D
9930: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
9940: 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20 20 20 20  US.**   OFF     
9950: 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20        1         
9960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9970: 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20 20 20  0.**   NORMAL   
9980: 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20       2          
9990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
99a0: 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20 20 20 20  .**   FULL      
99b0: 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20 20      3           
99c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 0a                2.
99d0: 2a 2a 20 20 20 45 58 54 52 41 20 20 20 20 20 20  **   EXTRA      
99e0: 20 20 20 34 20 20 20 20 20 20 20 20 20 20 20 20     4            
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 33 0a 2a               3.*
9a00: 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41 47 4d 41  *.** The "PRAGMA
9a10: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73 74   synchronous" st
9a20: 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 75 73 65  atement also use
9a30: 73 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  s the zero-based
9a40: 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e 20   numbers..** In 
9a50: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
9a60: 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62   zero-based numb
9a70: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
9a80: 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c 20 69 6e   all external in
9a90: 74 65 72 66 61 63 65 73 0a 2a 2a 20 61 6e 64 20  terfaces.** and 
9aa0: 74 68 65 20 6f 6e 65 2d 62 61 73 65 64 20 76 61  the one-based va
9ab0: 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 69 6e  lues are used in
9ac0: 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66  ternally..*/.#if
9ad0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
9ae0: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a  ULT_SYNCHRONOUS.
9af0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
9b00: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9b10: 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a 23 69 66  OUS 2.#endif.#if
9b20: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
9b30: 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e  ULT_WAL_SYNCHRON
9b40: 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  OUS.# define SQL
9b50: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f  ITE_DEFAULT_WAL_
9b60: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c 49  SYNCHRONOUS SQLI
9b70: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9b80: 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a 2f  RONOUS.#endif../
9b90: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
9ba0: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63  se file to be ac
9bb0: 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79  cessed by the sy
9bc0: 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61  stem is an insta
9bd0: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f  nce.** of the fo
9be0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
9bf0: 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  e.  There are no
9c00: 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68  rmally two of th
9c10: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a  ese structures.*
9c20: 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e  * in the sqlite.
9c30: 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44  aDb[] array.  aD
9c40: 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e  b[0] is the main
9c50: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
9c60: 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20  nd.** aDb[1] is 
9c70: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
9c80: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  e used to hold t
9c90: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
9ca0: 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20    Additional.** 
9cb0: 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65  databases may be
9cc0: 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74   attached..*/.st
9cd0: 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72  ruct Db {.  char
9ce0: 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20 20 20 20   *zDbSName;     
9cf0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
9d00: 20 64 61 74 61 62 61 73 65 2e 20 28 73 63 68 65   database. (sche
9d10: 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20 66 69 6c  ma name, not fil
9d20: 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42 74 72 65  ename) */.  Btre
9d30: 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20  e *pBt;         
9d40: 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65 20 73   /* The B*Tree s
9d50: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 69  tructure for thi
9d60: 73 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  s database file 
9d70: 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f 6c  */.  u8 safety_l
9d80: 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77  evel;     /* How
9d90: 20 61 67 67 72 65 73 73 69 76 65 20 61 74 20 73   aggressive at s
9da0: 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f 20 64  yncing data to d
9db0: 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79 6e  isk */.  u8 bSyn
9dc0: 63 53 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  cSet;         /*
9dd0: 20 54 72 75 65 20 69 66 20 22 50 52 41 47 4d 41   True if "PRAGMA
9de0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22 20   synchronous=N" 
9df0: 68 61 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f 0a  has been run */.
9e00: 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
9e10: 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  a;     /* Pointe
9e20: 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73 63  r to database sc
9e30: 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73  hema (possibly s
9e40: 68 61 72 65 64 29 20 2a 2f 0a 23 69 66 64 65 66  hared) */.#ifdef
9e50: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
9e60: 48 41 52 45 44 5f 53 43 48 45 4d 41 0a 20 20 53  HARED_SCHEMA.  S
9e70: 63 68 65 6d 61 50 6f 6f 6c 20 2a 70 53 50 6f 6f  chemaPool *pSPoo
9e80: 6c 3b 20 20 2f 2a 20 46 6f 72 20 52 45 55 53 45  l;  /* For REUSE
9e90: 5f 53 43 48 45 4d 41 20 6d 6f 64 65 20 2a 2f 0a  _SCHEMA mode */.
9ea0: 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c    VTable *pVTabl
9eb0: 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f  e;     /* List o
9ec0: 66 20 61 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a  f all VTable obj
9ed0: 65 63 74 73 20 28 52 45 55 53 45 5f 53 43 48 45  ects (REUSE_SCHE
9ee0: 4d 41 20 6d 6f 64 65 20 6f 6e 6c 79 29 20 2a 2f  MA mode only) */
9ef0: 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
9f00: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
9f10: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
9f20: 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20  tructure stores 
9f30: 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  a database schem
9f40: 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63  a..**.** Most Sc
9f50: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
9f60: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
9f70: 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65   a Btree.  The e
9f80: 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74  xception is.** t
9f90: 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68  he Schema for th
9fa0: 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20  e TEMP databaes 
9fb0: 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29  (sqlite3.aDb[1])
9fc0: 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73   which is free-s
9fd0: 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73  tanding..** In s
9fe0: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
9ff0: 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d  , a single Schem
a000: 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20  a object can be 
a010: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
a020: 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61  le.** Btrees tha
a030: 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73  t refer to the s
a040: 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42  ame underlying B
a050: 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a  tShared object..
a060: 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  **.** Schema obj
a070: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
a080: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
a090: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
a0a0: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
a0b0: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
a0c0: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
a0d0: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
a0e0: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
a0f0: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
a100: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
a110: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
a120: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
a130: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
a140: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
a150: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
a160: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
a170: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
a180: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
a190: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
a1a0: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
a1b0: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
a1c0: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
a1d0: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
a1e0: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
a1f0: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
a200: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
a210: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
a220: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
a230: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
a240: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
a250: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
a260: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
a270: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
a280: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
a290: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
a2a0: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
a2b0: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
a2c0: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
a2d0: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
a2e0: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
a2f0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
a300: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
a310: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
a320: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
a330: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
a340: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
a350: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
a360: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
a370: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
a380: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
a390: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
a3a0: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
a3b0: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
a3c0: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
a3d0: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
a3e0: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
a3f0: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
a400: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
a410: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
a420: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
a430: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
a440: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
a450: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
a460: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
a470: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
a480: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
a490: 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65  se */.  u16 sche
a4a0: 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  maFlags;     /* 
a4b0: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
a4c0: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
a4d0: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
a4e0: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
a4f0: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
a500: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
a510: 68 65 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  he */.#ifdef SQL
a520: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 48 41 52 45  ITE_ENABLE_SHARE
a530: 44 5f 53 43 48 45 4d 41 0a 20 20 53 63 68 65 6d  D_SCHEMA.  Schem
a540: 61 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  a *pNext;       
a550: 2f 2a 20 4e 65 78 74 20 53 63 68 65 6d 61 20 6f  /* Next Schema o
a560: 62 6a 65 63 74 20 53 63 68 65 6d 61 50 6f 6f 6c  bject SchemaPool
a570: 20 28 52 45 55 53 45 5f 53 43 48 45 4d 41 29 20   (REUSE_SCHEMA) 
a580: 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
a590: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
a5a0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
a5b0: 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
a5c0: 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a  ear bits in the.
a5d0: 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66  ** Db.pSchema->f
a5e0: 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
a5f0: 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70  define DbHasProp
a600: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20  erty(D,I,P)     
a610: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
a620: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
a630: 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64  gs&(P))==(P)).#d
a640: 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72  efine DbHasAnyPr
a650: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28  operty(D,I,P)  (
a660: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
a670: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
a680: 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
a690: 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79  ne DbSetProperty
a6a0: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d  (D,I,P)     (D)-
a6b0: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
a6c0: 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50  >schemaFlags|=(P
a6d0: 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61  ).#define DbClea
a6e0: 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  rProperty(D,I,P)
a6f0: 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70     (D)->aDb[I].p
a700: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
a710: 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a  ags&=~(P)../*.**
a720: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
a730: 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68 65  for the DB.pSche
a740: 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e  ma->flags field.
a750: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63  .**.** The DB_Sc
a760: 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20  hemaLoaded flag 
a770: 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68 65  is set after the
a780: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
a790: 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61   has been.** rea
a7a0: 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20  d into internal 
a7b0: 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  hash tables..**.
a7c0: 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ** DB_UnresetVie
a7d0: 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e  ws means that on
a7e0: 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20  e or more views 
a7f0: 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  have column name
a800: 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62  s that.** have b
a810: 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20  een filled out. 
a820: 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63   If the schema c
a830: 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f  hanges, these co
a840: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74  lumn names might
a850: 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20  .** changes and 
a860: 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c  so the view will
a870: 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 65   need to be rese
a880: 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  t..*/.#define DB
a890: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20  _SchemaLoaded   
a8a0: 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20   0x0001  /* The 
a8b0: 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20  schema has been 
a8c0: 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e  loaded */.#defin
a8d0: 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77  e DB_UnresetView
a8e0: 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20  s    0x0002  /* 
a8f0: 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65 20  Some views have 
a900: 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e  defined column n
a910: 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ames */.#define 
a920: 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20  DB_Empty        
a930: 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68     0x0004  /* Th
a940: 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20  e file is empty 
a950: 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73 29  (length 0 bytes)
a960: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 52   */.#define DB_R
a970: 65 73 65 74 57 61 6e 74 65 64 20 20 20 20 20 30  esetWanted     0
a980: 78 30 30 30 38 20 20 2f 2a 20 52 65 73 65 74 20  x0008  /* Reset 
a990: 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20  the schema when 
a9a0: 6e 53 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30 20 2a  nSchemaLock==0 *
a9b0: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d  /../*.** The num
a9c0: 62 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74  ber of different
a9d0: 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73   kinds of things
a9e0: 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d   that can be lim
a9f0: 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68  ited.** using th
aa00: 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28  e sqlite3_limit(
aa10: 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a  ) interface..*/.
aa20: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
aa30: 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c  _LIMIT (SQLITE_L
aa40: 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  IMIT_WORKER_THRE
aa50: 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f  ADS+1)../*.** Lo
aa60: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69  okaside malloc i
aa70: 73 20 61 20 73 65 74 20 6f 66 20 66 69 78 65 64  s a set of fixed
aa80: 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20 74 68  -size buffers th
aa90: 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a  at can be used.*
aaa0: 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61  * to satisfy sma
aab0: 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d  ll transient mem
aac0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72  ory allocation r
aad0: 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65  equests for obje
aae0: 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65  cts.** associate
aaf0: 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75  d with a particu
ab00: 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e  lar database con
ab10: 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73  nection.  The us
ab20: 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64  e of.** lookasid
ab30: 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65  e malloc provide
ab40: 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20  s a significant 
ab50: 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61  performance enha
ab60: 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72  ncement.** (appr
ab70: 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f 69 64  ox 10%) by avoid
ab80: 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c  ing numerous mal
ab90: 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73 74  loc/free request
aba0: 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a  s while parsing.
abb0: 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ** SQL statement
abc0: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f  s..**.** The Loo
abd0: 6b 61 73 69 64 65 20 73 74 72 75 63 74 75 72 65  kaside structure
abe0: 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61   holds configura
abf0: 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tion information
ac00: 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f   about the.** lo
ac10: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73  okaside malloc s
ac20: 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20  ubsystem.  Each 
ac30: 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79  available memory
ac40: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a   allocation in.*
ac50: 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20  * the lookaside 
ac60: 73 75 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f  subsystem is sto
ac70: 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20  red on a linked 
ac80: 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64  list of Lookasid
ac90: 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73  eSlot.** objects
aca0: 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64  ..**.** Lookasid
acb0: 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  e allocations ar
acc0: 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66  e only allowed f
acd0: 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20  or objects that 
ace0: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a  are associated.*
acf0: 2a 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75  * with a particu
ad00: 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e  lar database con
ad10: 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c  nection.  Hence,
ad20: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
ad30: 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65  ion cannot.** be
ad40: 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61   stored in looka
ad50: 73 69 64 65 20 62 65 63 61 75 73 65 20 69 6e 20  side because in 
ad60: 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64  shared cache mod
ad70: 65 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66  e the schema inf
ad80: 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73  ormation.** is s
ad90: 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c  hared by multipl
ada0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
adb0: 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f  ctions.  Therefo
adc0: 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e  re, while parsin
add0: 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f  g.** schema info
ade0: 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f  rmation, the Loo
adf0: 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20  kaside.bEnabled 
ae00: 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64 20  flag is cleared 
ae10: 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61  so that.** looka
ae20: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
ae30: 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f   are not used to
ae40: 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73   construct the s
ae50: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a  chema objects..*
ae60: 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  /.struct Lookasi
ae70: 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69 73 61  de {.  u32 bDisa
ae80: 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ble;           /
ae90: 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20 74  * Only operate t
aea0: 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68 65  he lookaside whe
aeb0: 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36 20  n zero */.  u16 
aec0: 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sz;             
aed0: 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
aee0: 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62 79  ach buffer in by
aef0: 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c  tes */.  u8 bMal
af00: 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20 20  loced;          
af10: 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74 61   /* True if pSta
af20: 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  rt obtained from
af30: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
af40: 29 20 2a 2f 0a 20 20 75 33 32 20 6e 53 6c 6f 74  ) */.  u32 nSlot
af50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
af60: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 6f 6b  * Number of look
af70: 61 73 69 64 65 20 73 6c 6f 74 73 20 61 6c 6c 6f  aside slots allo
af80: 63 61 74 65 64 20 2a 2f 0a 20 20 75 33 32 20 61  cated */.  u32 a
af90: 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20  nStat[3];       
afa0: 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20     /* 0: hits.  
afb0: 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20  1: size misses. 
afc0: 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20   2: full misses 
afd0: 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  */.  LookasideSl
afe0: 6f 74 20 2a 70 49 6e 69 74 3b 20 20 20 2f 2a 20  ot *pInit;   /* 
aff0: 4c 69 73 74 20 6f 66 20 62 75 66 66 65 72 73 20  List of buffers 
b000: 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75  not previously u
b010: 73 65 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69  sed */.  Lookasi
b020: 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20  deSlot *pFree;  
b030: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69   /* List of avai
b040: 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f  lable buffers */
b050: 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b  .  void *pStart;
b060: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
b070: 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61 69  rst byte of avai
b080: 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61  lable memory spa
b090: 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45  ce */.  void *pE
b0a0: 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
b0b0: 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70 61  /* First byte pa
b0c0: 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61  st end of availa
b0d0: 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a  ble space */.};.
b0e0: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
b0f0: 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69  Slot {.  Lookasi
b100: 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20  deSlot *pNext;  
b110: 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72    /* Next buffer
b120: 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20   in the list of 
b130: 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a  free buffers */.
b140: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68  };../*.** A hash
b150: 20 74 61 62 6c 65 20 66 6f 72 20 62 75 69 6c 74   table for built
b160: 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  -in function def
b170: 69 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c  initions.  (Appl
b180: 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a  ication-defined.
b190: 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65  ** functions use
b1a0: 20 61 20 72 65 67 75 6c 61 72 20 74 61 62 6c 65   a regular table
b1b0: 20 74 61 62 6c 65 20 66 72 6f 6d 20 68 61 73 68   table from hash
b1c0: 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20  .h.).**.** Hash 
b1d0: 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72  each FuncDef str
b1e0: 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20  ucture into one 
b1f0: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61  of the FuncDefHa
b200: 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a  sh.a[] slots..**
b210: 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20   Collisions are 
b220: 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 75  on the FuncDef.u
b230: 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 20 20 55  .pHash chain.  U
b240: 73 65 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  se the SQLITE_FU
b250: 4e 43 5f 48 41 53 48 28 29 0a 2a 2a 20 6d 61 63  NC_HASH().** mac
b260: 72 6f 20 74 6f 20 63 6f 6d 70 75 74 65 20 61 20  ro to compute a 
b270: 68 61 73 68 20 6f 6e 20 74 68 65 20 66 75 6e 63  hash on the func
b280: 74 69 6f 6e 20 6e 61 6d 65 2e 0a 2a 2f 0a 23 64  tion name..*/.#d
b290: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
b2a0: 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73 74 72  C_HASH_SZ 23.str
b2b0: 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20  uct FuncDefHash 
b2c0: 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 53  {.  FuncDef *a[S
b2d0: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
b2e0: 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61  SZ];       /* Ha
b2f0: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e  sh table for fun
b300: 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 23 64 65  ctions */.};.#de
b310: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
b320: 5f 48 41 53 48 28 43 2c 4c 29 20 28 28 28 43 29  _HASH(C,L) (((C)
b330: 2b 28 4c 29 29 25 53 51 4c 49 54 45 5f 46 55 4e  +(L))%SQLITE_FUN
b340: 43 5f 48 41 53 48 5f 53 5a 29 0a 0a 23 69 66 64  C_HASH_SZ)..#ifd
b350: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
b360: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a  UTHENTICATION./*
b370: 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** Information 
b380: 68 65 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c  held in the "sql
b390: 69 74 65 33 22 20 64 61 74 61 62 61 73 65 20 63  ite3" database c
b3a0: 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74  onnection object
b3b0: 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20   and used.** to 
b3c0: 6d 61 6e 61 67 65 20 75 73 65 72 20 61 75 74 68  manage user auth
b3d0: 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74  entication..*/.t
b3e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 73 71  ypedef struct sq
b3f0: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 73  lite3_userauth s
b400: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b  qlite3_userauth;
b410: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f  .struct sqlite3_
b420: 75 73 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20  userauth {.  u8 
b430: 61 75 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20  authLevel;      
b440: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
b450: 72 72 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61  rrent authentica
b460: 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  tion level */.  
b470: 69 6e 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20  int nAuthPW;    
b480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b490: 20 53 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75   Size of the zAu
b4a0: 74 68 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f  thPW in bytes */
b4b0: 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57  .  char *zAuthPW
b4c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b4d0: 20 2f 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65   /* Password use
b4e0: 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74  d to authenticat
b4f0: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75  e */.  char *zAu
b500: 74 68 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  thUser;         
b510: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d       /* User nam
b520: 65 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e  e used to authen
b530: 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ticate */.};../*
b540: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
b550: 66 6f 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72  for sqlite3_user
b560: 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a  auth.authLevel *
b570: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
b580: 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20  Unknown     0   
b590: 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74    /* Authenticat
b5a0: 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63  ion not yet chec
b5b0: 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ked */.#define U
b5c0: 41 55 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20  AUTH_Fail       
b5d0: 20 31 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61   1     /* User a
b5e0: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61  uthentication fa
b5f0: 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  iled */.#define 
b600: 55 41 55 54 48 5f 55 73 65 72 20 20 20 20 20 20  UAUTH_User      
b610: 20 20 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65    2     /* Authe
b620: 6e 74 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f  nticated as a no
b630: 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65  rmal user */.#de
b640: 66 69 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e  fine UAUTH_Admin
b650: 20 20 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20         3     /* 
b660: 41 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73  Authenticated as
b670: 20 61 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f   an administrato
b680: 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f  r */../* Functio
b690: 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20  ns used only by 
b6a0: 75 73 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69  user authorizati
b6b0: 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20  on logic */.int 
b6c0: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 54  sqlite3UserAuthT
b6d0: 61 62 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  able(const char*
b6e0: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73  );.int sqlite3Us
b6f0: 65 72 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e  erAuthCheckLogin
b700: 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
b710: 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64  char*,u8*);.void
b720: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
b730: 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  Init(sqlite3*);.
b740: 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 79 70  void sqlite3Cryp
b750: 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f  tFunc(sqlite3_co
b760: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
b770: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65  e3_value**);..#e
b780: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55  ndif /* SQLITE_U
b790: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
b7a0: 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70  ON */../*.** typ
b7b0: 65 64 65 66 20 66 6f 72 20 74 68 65 20 61 75 74  edef for the aut
b7c0: 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62  horization callb
b7d0: 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f  ack function..*/
b7e0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
b7f0: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
b800: 4f 4e 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74  ON.  typedef int
b810: 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68   (*sqlite3_xauth
b820: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
b830: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
b840: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
b850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b870: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
b880: 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65  st char*);.#else
b890: 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28  .  typedef int (
b8a0: 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28  *sqlite3_xauth)(
b8b0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
b8c0: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
b8d0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20  *,const char*,. 
b8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
b900: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
b910: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
b920: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
b930: 45 44 0a 2f 2a 20 54 68 69 73 20 69 73 20 61 6e  ED./* This is an
b940: 20 65 78 74 72 61 20 53 51 4c 49 54 45 5f 54 52   extra SQLITE_TR
b950: 41 43 45 20 6d 61 63 72 6f 20 74 68 61 74 20 69  ACE macro that i
b960: 6e 64 69 63 61 74 65 73 20 22 6c 65 67 61 63 79  ndicates "legacy
b970: 22 20 74 72 61 63 69 6e 67 0a 2a 2a 20 69 6e 20  " tracing.** in 
b980: 74 68 65 20 73 74 79 6c 65 20 6f 66 20 73 71 6c  the style of sql
b990: 69 74 65 33 5f 74 72 61 63 65 28 29 0a 2a 2f 0a  ite3_trace().*/.
b9a0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
b9b0: 52 41 43 45 5f 4c 45 47 41 43 59 20 20 20 20 20  RACE_LEGACY     
b9c0: 20 20 20 20 20 30 78 34 30 20 20 20 20 20 2f 2a       0x40     /*
b9d0: 20 55 73 65 20 74 68 65 20 6c 65 67 61 63 79 20   Use the legacy 
b9e0: 78 54 72 61 63 65 20 2a 2f 0a 23 64 65 66 69 6e  xTrace */.#defin
b9f0: 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 58  e SQLITE_TRACE_X
ba00: 50 52 4f 46 49 4c 45 20 20 20 20 20 20 20 20 30  PROFILE        0
ba10: 78 38 30 20 20 20 20 20 2f 2a 20 55 73 65 20 74  x80     /* Use t
ba20: 68 65 20 6c 65 67 61 63 79 20 78 50 72 6f 66 69  he legacy xProfi
ba30: 6c 65 20 2a 2f 0a 23 65 6c 73 65 0a 23 64 65 66  le */.#else.#def
ba40: 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ine SQLITE_TRACE
ba50: 5f 4c 45 47 41 43 59 20 20 20 20 20 20 20 20 20  _LEGACY         
ba60: 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54   0.#define SQLIT
ba70: 45 5f 54 52 41 43 45 5f 58 50 52 4f 46 49 4c 45  E_TRACE_XPROFILE
ba80: 20 20 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66          0.#endif
ba90: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
baa0: 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 23 64  DEPRECATED */.#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 4e 4f 4e 4c 45 47 41 43 59 5f 4d 41 53  CE_NONLEGACY_MAS
bad0: 4b 20 20 30 78 30 66 20 20 20 20 20 2f 2a 20 4e  K  0x0f     /* N
bae0: 6f 72 6d 61 6c 20 66 6c 61 67 73 20 2a 2f 0a 0a  ormal flags */..
baf0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
bb00: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
bb10: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
bb20: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
bb30: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
bb40: 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20  ruct sqlite3 {. 
bb50: 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56   sqlite3_vfs *pV
bb60: 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  fs;            /
bb70: 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a  * OS Interface *
bb80: 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20  /.  struct Vdbe 
bb90: 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
bba0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
bbb0: 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  ive virtual mach
bbc0: 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  ines */.  CollSe
bbd0: 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20  q *pDfltColl;   
bbe0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
bbf0: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67  efault collating
bc00: 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52   sequence (BINAR
bc10: 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  Y) */.  sqlite3_
bc20: 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20  mutex *mutex;   
bc30: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
bc40: 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44  ion mutex */.  D
bc50: 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20  b *aDb;         
bc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bc70: 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  All backends */.
bc80: 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20    int nDb;      
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bca0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63  /* Number of bac
bcb0: 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20  kends currently 
bcc0: 69 6e 20 75 73 65 20 2a 2f 0a 20 20 75 33 32 20  in use */.  u32 
bcd0: 6d 44 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20  mDbFlags;       
bce0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61            /* fla
bcf0: 67 73 20 72 65 63 6f 72 64 69 6e 67 20 69 6e 74  gs recording int
bd00: 65 72 6e 61 6c 20 73 74 61 74 65 20 2a 2f 0a 20  ernal state */. 
bd10: 20 75 36 34 20 66 6c 61 67 73 3b 20 20 20 20 20   u64 flags;     
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bd30: 2a 20 66 6c 61 67 73 20 73 65 74 74 61 62 6c 65  * flags settable
bd40: 20 62 79 20 70 72 61 67 6d 61 73 2e 20 53 65 65   by pragmas. See
bd50: 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20   below */.  i64 
bd60: 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20  lastRowid;      
bd70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57            /* ROW
bd80: 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e  ID of most recen
bd90: 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62  t insert (see ab
bda0: 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a  ove) */.  i64 sz
bdb0: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
bdc0: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
bdd0: 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74  lt mmap_size set
bde0: 74 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20 6e 53  ting */.  u32 nS
bdf0: 63 68 65 6d 61 4c 6f 63 6b 3b 20 20 20 20 20 20  chemaLock;      
be00: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f          /* Do no
be10: 74 20 72 65 73 65 74 20 74 68 65 20 73 63 68 65  t reset the sche
be20: 6d 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a 65 72 6f  ma when non-zero
be30: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
be40: 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20  nt openFlags;   
be50: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73      /* Flags pas
be60: 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76  sed to sqlite3_v
be70: 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20  fs.xOpen() */.  
be80: 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20  int errCode;    
be90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bea0: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
beb0: 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f  or code (SQLITE_
bec0: 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d  *) */.  int errM
bed0: 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ask;            
bee0: 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c        /* & resul
bef0: 74 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69  t codes with thi
bf00: 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  s before returni
bf10: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53 79 73  ng */.  int iSys
bf20: 45 72 72 6e 6f 3b 20 20 20 20 20 20 20 20 20 20  Errno;          
bf30: 20 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f 20 76        /* Errno v
bf40: 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74 20 73  alue from last s
bf50: 79 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f 0a 20  ystem error */. 
bf60: 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b   u16 dbOptFlags;
bf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bf80: 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c  * Flags to enabl
bf90: 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69  e/disable optimi
bfa0: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  zations */.  u8 
bfb0: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
bfc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
bfd0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  xt encoding */. 
bfe0: 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20   u8 autoCommit; 
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c000: 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  * The auto-commi
c010: 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20  t flag. */.  u8 
c020: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
c030: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
c040: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
c050: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
c060: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
c070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c080: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
c090: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
c0a0: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ailure */.  u8 b
c0b0: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20  BenignMalloc;   
c0c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
c0d0: 6e 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d 73  not require OOMs
c0e0: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
c0f0: 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20   dfltLockMode;  
c100: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
c110: 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d  efault locking-m
c120: 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64  ode for attached
c130: 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64   dbs */.  signed
c140: 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61   char nextAutova
c150: 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76  c;      /* Autov
c160: 61 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72  ac setting after
c170: 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a   VACUUM if >=0 *
c180: 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45  /.  u8 suppressE
c190: 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rr;             
c1a0: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75    /* Do not issu
c1b0: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  e error messages
c1c0: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
c1d0: 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b   vtabOnConflict;
c1e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
c1f0: 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66  alue to return f
c200: 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f  or s3_vtab_on_co
c210: 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38  nflict() */.  u8
c220: 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61   isTransactionSa
c230: 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54  vepoint;    /* T
c240: 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72  rue if the outer
c250: 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69  most savepoint i
c260: 73 20 61 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d  s a TS */.  u8 m
c270: 54 72 61 63 65 3b 20 20 20 20 20 20 20 20 20 20  Trace;          
c280: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 7a 65 72            /* zer
c290: 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54 45  o or more SQLITE
c2a0: 5f 54 52 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a  _TRACE flags */.
c2b0: 20 20 75 38 20 6e 6f 53 68 61 72 65 64 43 61 63    u8 noSharedCac
c2c0: 68 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  he;             
c2d0: 2f 2a 20 54 72 75 65 20 69 66 20 6e 6f 20 73 68  /* True if no sh
c2e0: 61 72 65 64 2d 63 61 63 68 65 20 62 61 63 6b 65  ared-cache backe
c2f0: 6e 64 73 20 2a 2f 0a 20 20 75 38 20 6e 53 71 6c  nds */.  u8 nSql
c300: 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  Exec;           
c310: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c320: 20 6f 66 20 70 65 6e 64 69 6e 67 20 4f 50 5f 53   of pending OP_S
c330: 71 6c 45 78 65 63 20 6f 70 63 6f 64 65 73 20 2a  qlExec opcodes *
c340: 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65  /.  int nextPage
c350: 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20  size;           
c360: 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66    /* Pagesize af
c370: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30  ter VACUUM if >0
c380: 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b   */.  u32 magic;
c390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3a0: 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d      /* Magic num
c3b0: 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c  ber for detect l
c3c0: 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f  ibrary misuse */
c3d0: 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20  .  int nChange; 
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3f0: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
c400: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68  ed by sqlite3_ch
c410: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
c420: 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20   nTotalChange;  
c430: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
c440: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
c450: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
c460: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
c470: 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e   aLimit[SQLITE_N
c480: 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69  _LIMIT];   /* Li
c490: 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  mits */.  int nM
c4a0: 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20  axSorterMmap;   
c4b0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
c4c0: 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f  um size of regio
c4d0: 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72  ns mapped by sor
c4e0: 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ter */.  struct 
c4f0: 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20  sqlite3InitInfo 
c500: 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  {      /* Inform
c510: 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e  ation used durin
c520: 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
c530: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54   */.    int newT
c540: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
c550: 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20      /* Rootpage 
c560: 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  of table being i
c570: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
c580: 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20    u8 iDb;       
c590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c5a0: 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69   Which db file i
c5b0: 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  s being initiali
c5c0: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75  zed */.    u8 bu
c5d0: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
c5e0: 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69         /* TRUE i
c5f0: 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74  f currently init
c600: 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20  ializing */.    
c610: 75 6e 73 69 67 6e 65 64 20 6f 72 70 68 61 6e 54  unsigned orphanT
c620: 72 69 67 67 65 72 20 3a 20 31 3b 20 2f 2a 20 4c  rigger : 1; /* L
c630: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ast statement is
c640: 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74   orphaned TEMP t
c650: 72 69 67 67 65 72 20 2a 2f 0a 20 20 20 20 75 6e  rigger */.    un
c660: 73 69 67 6e 65 64 20 69 6d 70 6f 73 74 65 72 54  signed imposterT
c670: 61 62 6c 65 20 3a 20 31 3b 20 2f 2a 20 42 75 69  able : 1; /* Bui
c680: 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65  lding an imposte
c690: 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75  r table */.    u
c6a0: 6e 73 69 67 6e 65 64 20 72 65 6f 70 65 6e 4d 65  nsigned reopenMe
c6b0: 6d 64 62 20 3a 20 31 3b 20 20 20 2f 2a 20 41 54  mdb : 1;   /* AT
c6c0: 54 41 43 48 20 69 73 20 72 65 61 6c 6c 79 20 61  TACH is really a
c6d0: 20 72 65 6f 70 65 6e 20 75 73 69 6e 67 20 4d 65   reopen using Me
c6e0: 6d 44 42 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  mDB */.    char 
c6f0: 2a 2a 61 7a 49 6e 69 74 3b 20 20 20 20 20 20 20  **azInit;       
c700: 20 20 20 20 20 20 20 2f 2a 20 22 74 79 70 65 22         /* "type"
c710: 2c 20 22 6e 61 6d 65 22 2c 20 61 6e 64 20 22 74  , "name", and "t
c720: 62 6c 5f 6e 61 6d 65 22 20 63 6f 6c 75 6d 6e 73  bl_name" columns
c730: 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20   */.  } init;.  
c740: 69 6e 74 20 6e 56 64 62 65 41 63 74 69 76 65 3b  int nVdbeActive;
c750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c760: 20 4e 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73   Number of VDBEs
c770: 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69   currently runni
c780: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  ng */.  int nVdb
c790: 65 52 65 61 64 3b 20 20 20 20 20 20 20 20 20 20  eRead;          
c7a0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c7b0: 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20  of active VDBEs 
c7c0: 74 68 61 74 20 72 65 61 64 20 6f 72 20 77 72 69  that read or wri
c7d0: 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  te */.  int nVdb
c7e0: 65 57 72 69 74 65 3b 20 20 20 20 20 20 20 20 20  eWrite;         
c7f0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c800: 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20  of active VDBEs 
c810: 74 68 61 74 20 72 65 61 64 20 61 6e 64 20 77 72  that read and wr
c820: 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64  ite */.  int nVd
c830: 62 65 45 78 65 63 3b 20 20 20 20 20 20 20 20 20  beExec;         
c840: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c850: 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73   of nested calls
c860: 20 74 6f 20 56 64 62 65 45 78 65 63 28 29 20 2a   to VdbeExec() *
c870: 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73 74 72 6f  /.  int nVDestro
c880: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y;              
c890: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
c8a0: 63 74 69 76 65 20 4f 50 5f 56 44 65 73 74 72 6f  ctive OP_VDestro
c8b0: 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a  y operations */.
c8c0: 20 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e    int nExtension
c8d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c8e0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61  /* Number of loa
c8f0: 64 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a  ded extensions *
c900: 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65  /.  void **aExte
c910: 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  nsion;          
c920: 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68    /* Array of sh
c930: 61 72 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e  ared library han
c940: 64 6c 65 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  dles */.  int (*
c950: 78 54 72 61 63 65 29 28 75 33 32 2c 76 6f 69 64  xTrace)(u32,void
c960: 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 29 3b 20  *,void*,void*); 
c970: 20 20 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e      /* Trace fun
c980: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
c990: 2a 70 54 72 61 63 65 41 72 67 3b 20 20 20 20 20  *pTraceArg;     
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9b0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
c9c0: 20 74 6f 20 74 68 65 20 74 72 61 63 65 20 66 75   to the trace fu
c9d0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65  nction */.#ifnde
c9e0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  f SQLITE_OMIT_DE
c9f0: 50 52 45 43 41 54 45 44 0a 20 20 76 6f 69 64 20  PRECATED.  void 
ca00: 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64  (*xProfile)(void
ca10: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36  *,const char*,u6
ca20: 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e  4);  /* Profilin
ca30: 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  g function */.  
ca40: 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72  void *pProfileAr
ca50: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
ca60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
ca70: 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65  ument to profile
ca80: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e   function */.#en
ca90: 64 69 66 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d  dif.  void *pCom
caa0: 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20  mitArg;         
cab0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
cac0: 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61  ent to xCommitCa
cad0: 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e  llback() */.  in
cae0: 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62  t (*xCommitCallb
caf0: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20  ack)(void*);    
cb00: 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76  /* Invoked at ev
cb10: 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20  ery commit. */. 
cb20: 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b   void *pRollback
cb30: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
cb40: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
cb50: 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  o xRollbackCallb
cb60: 61 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ack() */.  void 
cb70: 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  (*xRollbackCallb
cb80: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20  ack)(void*); /* 
cb90: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
cba0: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
cbb0: 69 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a  id *pUpdateArg;.
cbc0: 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65    void (*xUpdate
cbd0: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c  Callback)(void*,
cbe0: 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
cbf0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c  ,const char*,sql
cc00: 69 74 65 5f 69 6e 74 36 34 29 3b 0a 20 20 50 61  ite_int64);.  Pa
cc10: 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
cc20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
cc30: 75 72 72 65 6e 74 20 70 61 72 73 65 20 2a 2f 0a  urrent parse */.
cc40: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
cc50: 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48  ABLE_PREUPDATE_H
cc60: 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a 70 50 72 65  OOK.  void *pPre
cc70: 55 70 64 61 74 65 41 72 67 3b 20 20 20 20 20 20  UpdateArg;      
cc80: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
cc90: 75 6d 65 6e 74 20 74 6f 20 78 50 72 65 55 70 64  ument to xPreUpd
cca0: 61 74 65 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ateCallback */. 
ccb0: 20 76 6f 69 64 20 28 2a 78 50 72 65 55 70 64 61   void (*xPreUpda
ccc0: 74 65 43 61 6c 6c 62 61 63 6b 29 28 20 20 20 2f  teCallback)(   /
ccd0: 2a 20 52 65 67 69 73 74 65 72 65 64 20 75 73 69  * Registered usi
cce0: 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65 75 70  ng sqlite3_preup
ccf0: 64 61 74 65 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20  date_hook() */. 
cd00: 20 20 20 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33     void*,sqlite3
cd10: 2a 2c 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74  *,int,char const
cd20: 2a 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 73 71  *,char const*,sq
cd30: 6c 69 74 65 33 5f 69 6e 74 36 34 2c 73 71 6c 69  lite3_int64,sqli
cd40: 74 65 33 5f 69 6e 74 36 34 0a 20 20 29 3b 0a 20  te3_int64.  );. 
cd50: 20 50 72 65 55 70 64 61 74 65 20 2a 70 50 72 65   PreUpdate *pPre
cd60: 55 70 64 61 74 65 3b 20 20 20 20 20 20 20 20 2f  Update;        /
cd70: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
cd80: 74 69 76 65 20 70 72 65 2d 75 70 64 61 74 65 20  tive pre-update 
cd90: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
cda0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41  if /* SQLITE_ENA
cdb0: 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
cdc0: 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  OK */.#ifndef SQ
cdd0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
cde0: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
cdf0: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
ce00: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
ce10: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
ce20: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
ce30: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
ce40: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
ce50: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
ce60: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
ce70: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
ce80: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
ce90: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
cea0: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
ceb0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
cec0: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
ced0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
cee0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
cef0: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
cf00: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69  message */.  uni
cf10: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
cf20: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
cf30: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
cf40: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
cf50: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
cf60: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
cf70: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
cf80: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
cf90: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
cfa0: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
cfb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
cfc0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
cfd0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
cfe0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
cff0: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
d000: 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68  .  sqlite3_xauth
d010: 20 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20   xAuth;         
d020: 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f   /* Access autho
d030: 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f  rization functio
d040: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  n */.  void *pAu
d050: 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  thArg;          
d060: 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
d070: 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65  ment to the acce
d080: 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e  ss auth function
d090: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
d0a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
d0b0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
d0c0: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
d0d0: 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  ss)(void *);    
d0e0: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73   /* The progress
d0f0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
d100: 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72  oid *pProgressAr
d110: 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
d120: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
d130: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
d140: 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  k */.  unsigned 
d150: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20  nProgressOps;   
d160: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
d170: 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72  f opcodes for pr
d180: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
d190: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
d1a0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
d1b0: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
d1c0: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
d1d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
d1e0: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
d1f0: 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73  aVTrans */.  Has
d200: 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  h aModule;      
d210: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f             /* po
d220: 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74  pulated by sqlit
d230: 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
d240: 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20  () */.  VtabCtx 
d250: 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20  *pVtabCtx;      
d260: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
d270: 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62   for active vtab
d280: 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20   connect/create 
d290: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56  */.  VTable **aV
d2a0: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
d2b0: 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61     /* Virtual ta
d2c0: 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74  bles with open t
d2d0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  ransactions */. 
d2e0: 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e   VTable *pDiscon
d2f0: 6e 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 2f  nect;          /
d300: 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65  * Disconnect the
d310: 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74  se in next sqlit
d320: 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a  e3_prepare() */.
d330: 23 65 6e 64 69 66 0a 20 20 48 61 73 68 20 61 46  #endif.  Hash aF
d340: 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
d350: 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74         /* Hash t
d360: 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69  able of connecti
d370: 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  on functions */.
d380: 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b    Hash aCollSeq;
d390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3a0: 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67  /* All collating
d3b0: 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20   sequences */.  
d3c0: 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79  BusyHandler busy
d3d0: 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a  Handler;      /*
d3e0: 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a   Busy callback *
d3f0: 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74 69 63  /.  Db aDbStatic
d400: 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [2];            
d410: 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63    /* Static spac
d420: 65 20 66 6f 72 20 74 68 65 20 32 20 64 65 66 61  e for the 2 defa
d430: 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  ult backends */.
d440: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61    Savepoint *pSa
d450: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
d460: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
d470: 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a  e savepoints */.
d480: 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75    int busyTimeou
d490: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
d4a0: 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20  /* Busy handler 
d4b0: 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63  timeout, in msec
d4c0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70   */.  int nSavep
d4d0: 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  oint;           
d4e0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
d4f0: 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e   non-transaction
d500: 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20   savepoints */. 
d510: 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b   int nStatement;
d520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d530: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
d540: 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  ed statement-tra
d550: 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20  nsactions  */.  
d560: 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e  i64 nDeferredCon
d570: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
d580: 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 63 6f   Net deferred co
d590: 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73 20 74  nstraints this t
d5a0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20  ransaction. */. 
d5b0: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d   i64 nDeferredIm
d5c0: 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f  mCons;         /
d5d0: 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 69  * Net deferred i
d5e0: 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61  mmediate constra
d5f0: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70  ints */.  int *p
d600: 6e 42 79 74 65 73 46 72 65 65 64 3b 20 20 20 20  nBytesFreed;    
d610: 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
d620: 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e  t NULL, incremen
d630: 74 20 74 68 69 73 20 69 6e 20 44 62 46 72 65 65  t this in DbFree
d640: 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  () */.#ifdef SQL
d650: 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43  ITE_ENABLE_UNLOC
d660: 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68  K_NOTIFY.  /* Th
d670: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69  e following vari
d680: 61 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72  ables are all pr
d690: 6f 74 65 63 74 65 64 20 62 79 20 74 68 65 20 53  otected by the S
d6a0: 54 41 54 49 43 5f 4d 41 53 54 45 52 0a 20 20 2a  TATIC_MASTER.  *
d6b0: 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20  * mutex, not by 
d6c0: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54  sqlite3.mutex. T
d6d0: 68 65 79 20 61 72 65 20 75 73 65 64 20 62 79 20  hey are used by 
d6e0: 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63  code in notify.c
d6f0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e  ..  **.  ** When
d700: 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63   X.pUnlockConnec
d710: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
d720: 61 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61  ans that X is wa
d730: 69 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20  iting for Y to. 
d740: 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68   ** unlock so th
d750: 61 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65  at it can procee
d760: 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65  d..  **.  ** Whe
d770: 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e  n X.pBlockingCon
d780: 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74  nection==Y, that
d790: 20 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65   means that some
d7a0: 74 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69  thing that X tri
d7b0: 65 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f  ed.  ** tried to
d7c0: 20 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69   do recently fai
d7d0: 6c 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49  led with an SQLI
d7e0: 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20  TE_LOCKED error 
d7f0: 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a  due to locks.  *
d800: 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a  * held by Y..  *
d810: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c  /.  sqlite3 *pBl
d820: 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e  ockingConnection
d830: 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20  ; /* Connection 
d840: 74 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49  that caused SQLI
d850: 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73  TE_LOCKED */.  s
d860: 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43  qlite3 *pUnlockC
d870: 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20  onnection;      
d880: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
d890: 6f 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20  on to watch for 
d8a0: 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  unlock */.  void
d8b0: 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20   *pUnlockArg;   
d8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8d0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
d8e0: 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a   xUnlockNotify *
d8f0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f  /.  void (*xUnlo
d900: 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a  ckNotify)(void *
d910: 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c  *, int);  /* Unl
d920: 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62  ock notify callb
d930: 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ack */.  sqlite3
d940: 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20   *pNextBlocked; 
d950: 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
d960: 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c  n list of all bl
d970: 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ocked connection
d980: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64  s */.#endif.#ifd
d990: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
d9a0: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
d9b0: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
d9c0: 20 61 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a   auth;        /*
d9d0: 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   User authentica
d9e0: 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tion information
d9f0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23   */.#endif.};..#
da00: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
da10: 42 4c 45 5f 53 48 41 52 45 44 5f 53 43 48 45 4d  BLE_SHARED_SCHEM
da20: 41 0a 23 20 64 65 66 69 6e 65 20 49 73 53 68 61  A.# define IsSha
da30: 72 65 64 53 63 68 65 6d 61 28 64 62 29 20 28 28  redSchema(db) ((
da40: 28 64 62 29 2d 3e 6f 70 65 6e 46 6c 61 67 73 20  (db)->openFlags 
da50: 26 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 53 48  & SQLITE_OPEN_SH
da60: 41 52 45 44 5f 53 43 48 45 4d 41 29 21 3d 30 29  ARED_SCHEMA)!=0)
da70: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
da80: 49 73 53 68 61 72 65 64 53 63 68 65 6d 61 28 64  IsSharedSchema(d
da90: 62 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  b) 0.#endif../*.
daa0: 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69  ** A macro to di
dab0: 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64  scover the encod
dac0: 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73  ing of a databas
dad0: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
dae0: 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64  HEMA_ENC(db) ((d
daf0: 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65  b)->aDb[0].pSche
db00: 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65  ma->enc).#define
db10: 20 45 4e 43 28 64 62 29 20 20 20 20 20 20 20 20   ENC(db)        
db20: 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a  ((db)->enc)../*.
db30: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
db40: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
db50: 65 33 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20  e3.flags..**.** 
db60: 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
db70: 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
db80: 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
db90: 20 20 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53     SQLITE_FullFS
dba0: 79 6e 63 20 20 20 20 20 3d 3d 20 50 41 47 45 52  ync     == PAGER
dbb0: 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20  _FULLFSYNC.**   
dbc0: 20 20 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75     SQLITE_CkptFu
dbd0: 6c 6c 46 53 79 6e 63 20 3d 3d 20 50 41 47 45 52  llFSync == PAGER
dbe0: 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 0a  _CKPT_FULLFSYNC.
dbf0: 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43  **      SQLITE_C
dc00: 61 63 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d 20  acheSpill    == 
dc10: 50 41 47 45 52 5f 43 41 43 48 45 5f 53 50 49 4c  PAGER_CACHE_SPIL
dc20: 4c 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L.*/.#define SQL
dc30: 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20  ITE_WriteSchema 
dc40: 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f     0x00000001  /
dc50: 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53  * OK to update S
dc60: 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a  QLITE_MASTER */.
dc70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
dc80: 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78  egacyFileFmt  0x
dc90: 30 30 30 30 30 30 30 32 20 20 2f 2a 20 43 72 65  00000002  /* Cre
dca0: 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65  ate new database
dcb0: 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f  s in format 1 */
dcc0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dcd0: 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30  FullColNames   0
dce0: 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68  x00000004  /* Sh
dcf0: 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e  ow full column n
dd00: 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a  ames on SELECT *
dd10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dd20: 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20  _FullFSync      
dd30: 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55  0x00000008  /* U
dd40: 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e  se full fsync on
dd50: 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a   the backend */.
dd60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
dd70: 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78  kptFullFSync  0x
dd80: 30 30 30 30 30 30 31 30 20 20 2f 2a 20 55 73 65  00000010  /* Use
dd90: 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20   full fsync for 
dda0: 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64  checkpoint */.#d
ddb0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63  efine SQLITE_Cac
ddc0: 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30  heSpill     0x00
ddd0: 30 30 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f  000020  /* OK to
dde0: 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63   spill pager cac
ddf0: 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  he */.#define SQ
de00: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
de10: 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20  es  0x00000040  
de20: 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f  /* Show short co
de30: 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23  lumns names */.#
de40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
de50: 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30  untRows      0x0
de60: 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e  0000080  /* Coun
de70: 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62  t rows changed b
de80: 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20  y INSERT, */.   
de90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
deb0: 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45         /*   DELE
dec0: 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e  TE, or UPDATE an
ded0: 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20  d return */.    
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df00: 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63        /*   the c
df10: 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c  ount using a cal
df20: 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e  lback. */.#defin
df30: 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c  e SQLITE_NullCal
df40: 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31  lback   0x000001
df50: 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  00  /* Invoke th
df60: 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20  e callback once 
df70: 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20  if the */.      
df80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfa0: 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20      /*   result 
dfb0: 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  set is empty */.
dfc0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
dfd0: 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78  gnoreChecks   0x
dfe0: 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 6f 20  00000200  /* Do 
dff0: 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63  not enforce chec
e000: 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
e010: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e020: 52 65 61 64 55 6e 63 6f 6d 6d 69 74 20 20 20 30  ReadUncommit   0
e030: 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 52 45  x00000400  /* RE
e040: 41 44 20 55 4e 43 4f 4d 4d 49 54 54 45 44 20 69  AD UNCOMMITTED i
e050: 6e 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 2a  n shared-cache *
e060: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e070: 5f 4e 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20  _NoCkptOnClose  
e080: 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4e  0x00000800  /* N
e090: 6f 20 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20  o checkpoint on 
e0a0: 63 6c 6f 73 65 28 29 2f 44 45 54 41 43 48 20 2a  close()/DETACH *
e0b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e0c0: 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20  _ReverseOrder   
e0d0: 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 52  0x00001000  /* R
e0e0: 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64  everse unordered
e0f0: 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66   SELECTs */.#def
e100: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72  ine SQLITE_RecTr
e110: 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30 30  iggers    0x0000
e120: 32 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  2000  /* Enable 
e130: 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65  recursive trigge
e140: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
e150: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
e160: 20 20 20 20 30 78 30 30 30 30 34 30 30 30 20 20      0x00004000  
e170: 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69  /* Enforce forei
e180: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
e190: 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ts  */.#define S
e1a0: 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20  QLITE_AutoIndex 
e1b0: 20 20 20 20 20 30 78 30 30 30 30 38 30 30 30 20       0x00008000 
e1c0: 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d   /* Enable autom
e1d0: 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a  atic indexes */.
e1e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
e1f0: 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78  oadExtension  0x
e200: 30 30 30 31 30 30 30 30 20 20 2f 2a 20 45 6e 61  00010000  /* Ena
e210: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
e220: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
e230: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63  LITE_LoadExtFunc
e240: 20 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20      0x00020000  
e250: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
e260: 78 74 65 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66  xtension() SQL f
e270: 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  unc */.#define S
e280: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67  QLITE_EnableTrig
e290: 67 65 72 20 20 30 78 30 30 30 34 30 30 30 30 20  ger  0x00040000 
e2a0: 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
e2b0: 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  le triggers */.#
e2c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65  define SQLITE_De
e2d0: 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30  ferFKs       0x0
e2e0: 30 30 38 30 30 30 30 20 20 2f 2a 20 44 65 66 65  0080000  /* Defe
e2f0: 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61  r all FK constra
e300: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
e310: 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
e320: 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30 30        0x00100000
e330: 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74    /* Disable dat
e340: 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f  abase changes */
e350: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e360: 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30  CellSizeCk     0
e370: 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 43 68  x00200000  /* Ch
e380: 65 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73  eck btree cell s
e390: 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a  izes on load */.
e3a0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
e3b0: 74 73 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78  ts3Tokenizer  0x
e3c0: 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  00400000  /* Ena
e3d0: 62 6c 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a  ble fts3_tokeniz
e3e0: 65 72 28 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65  er(2) */.#define
e3f0: 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 51 50   SQLITE_EnableQP
e400: 53 47 20 20 20 20 20 30 78 30 30 38 30 30 30 30  SG     0x0080000
e410: 30 20 20 2f 2a 20 51 75 65 72 79 20 50 6c 61 6e  0  /* Query Plan
e420: 6e 65 72 20 53 74 61 62 69 6c 69 74 79 20 47 75  ner Stability Gu
e430: 61 72 61 6e 74 65 65 2a 2f 0a 23 64 65 66 69 6e  arantee*/.#defin
e440: 65 20 53 51 4c 49 54 45 5f 54 72 69 67 67 65 72  e SQLITE_Trigger
e450: 45 51 50 20 20 20 20 20 30 78 30 31 30 30 30 30  EQP     0x010000
e460: 30 30 20 20 2f 2a 20 53 68 6f 77 20 74 72 69 67  00  /* Show trig
e470: 67 65 72 20 45 58 50 4c 41 49 4e 20 51 55 45 52  ger EXPLAIN QUER
e480: 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e  Y PLAN */.#defin
e490: 65 20 53 51 4c 49 54 45 5f 52 65 73 65 74 44 61  e SQLITE_ResetDa
e4a0: 74 61 62 61 73 65 20 20 30 78 30 32 30 30 30 30  tabase  0x020000
e4b0: 30 30 20 20 2f 2a 20 52 65 73 65 74 20 74 68 65  00  /* Reset the
e4c0: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 23 64 65   database */.#de
e4d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61  fine SQLITE_Lega
e4e0: 63 79 41 6c 74 65 72 20 20 20 20 30 78 30 34 30  cyAlter    0x040
e4f0: 30 30 30 30 30 20 20 2f 2a 20 4c 65 67 61 63 79  00000  /* Legacy
e500: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 62 65 68   ALTER TABLE beh
e510: 61 76 69 6f 75 72 20 2a 2f 0a 23 64 65 66 69 6e  aviour */.#defin
e520: 65 20 53 51 4c 49 54 45 5f 4e 6f 53 63 68 65 6d  e SQLITE_NoSchem
e530: 61 45 72 72 6f 72 20 20 30 78 30 38 30 30 30 30  aError  0x080000
e540: 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65  00  /* Do not re
e550: 70 6f 72 74 20 73 63 68 65 6d 61 20 70 61 72 73  port schema pars
e560: 65 20 65 72 72 6f 72 73 2a 2f 0a 23 64 65 66 69  e errors*/.#defi
e570: 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 6e 73  ne SQLITE_Defens
e580: 69 76 65 20 20 20 20 20 20 30 78 31 30 30 30 30  ive      0x10000
e590: 30 30 30 20 20 2f 2a 20 49 6e 70 75 74 20 53 51  000  /* Input SQ
e5a0: 4c 20 69 73 20 6c 69 6b 65 6c 79 20 68 6f 73 74  L is likely host
e5b0: 69 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ile */.#define S
e5c0: 51 4c 49 54 45 5f 44 71 73 44 44 4c 20 20 20 20  QLITE_DqsDDL    
e5d0: 20 20 20 20 20 30 78 32 30 30 30 30 30 30 30 20       0x20000000 
e5e0: 20 2f 2a 20 64 62 6c 2d 71 75 6f 74 65 64 20 73   /* dbl-quoted s
e5f0: 74 72 69 6e 67 73 20 61 6c 6c 6f 77 65 64 20 69  trings allowed i
e600: 6e 20 44 44 4c 2a 2f 0a 23 64 65 66 69 6e 65 20  n DDL*/.#define 
e610: 53 51 4c 49 54 45 5f 44 71 73 44 4d 4c 20 20 20  SQLITE_DqsDML   
e620: 20 20 20 20 20 20 30 78 34 30 30 30 30 30 30 30        0x40000000
e630: 20 20 2f 2a 20 64 62 6c 2d 71 75 6f 74 65 64 20    /* dbl-quoted 
e640: 73 74 72 69 6e 67 73 20 61 6c 6c 6f 77 65 64 20  strings allowed 
e650: 69 6e 20 44 4d 4c 2a 2f 0a 0a 2f 2a 20 46 6c 61  in DML*/../* Fla
e660: 67 73 20 75 73 65 64 20 6f 6e 6c 79 20 69 66 20  gs used only if 
e670: 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 64 65  debugging */.#de
e680: 66 69 6e 65 20 48 49 28 58 29 20 20 28 28 75 36  fine HI(X)  ((u6
e690: 34 29 28 58 29 3c 3c 33 32 29 0a 23 69 66 64 65  4)(X)<<32).#ifde
e6a0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
e6b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71  define SQLITE_Sq
e6c0: 6c 54 72 61 63 65 20 20 20 20 20 20 20 48 49 28  lTrace       HI(
e6d0: 30 78 30 30 30 31 29 20 20 2f 2a 20 44 65 62 75  0x0001)  /* Debu
e6e0: 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69  g print SQL as i
e6f0: 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64  t executes */.#d
e700: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
e710: 65 4c 69 73 74 69 6e 67 20 20 20 20 48 49 28 30  eListing    HI(0
e720: 78 30 30 30 32 29 20 20 2f 2a 20 44 65 62 75 67  x0002)  /* Debug
e730: 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42   listings of VDB
e740: 45 20 70 72 6f 67 73 20 2a 2f 0a 23 64 65 66 69  E progs */.#defi
e750: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72  ne SQLITE_VdbeTr
e760: 61 63 65 20 20 20 20 20 20 48 49 28 30 78 30 30  ace      HI(0x00
e770: 30 34 29 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  04)  /* True to 
e780: 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75  trace VDBE execu
e790: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
e7a0: 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70  SQLITE_VdbeAddop
e7b0: 54 72 61 63 65 20 48 49 28 30 78 30 30 30 38 29  Trace HI(0x0008)
e7c0: 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74    /* Trace sqlit
e7d0: 65 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61  e3VdbeAddOp() ca
e7e0: 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  lls */.#define S
e7f0: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20  QLITE_VdbeEQP   
e800: 20 20 20 20 20 48 49 28 30 78 30 30 31 30 29 20       HI(0x0010) 
e810: 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49   /* Debug EXPLAI
e820: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a  N QUERY PLAN */.
e830: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
e840: 61 72 73 65 72 54 72 61 63 65 20 20 20 20 48 49  arserTrace    HI
e850: 28 30 78 30 30 32 30 29 20 20 2f 2a 20 50 52 41  (0x0020)  /* PRA
e860: 47 4d 41 20 70 61 72 73 65 72 5f 74 72 61 63 65  GMA parser_trace
e870: 3d 4f 4e 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  =ON */.#endif../
e880: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
e890: 75 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 2e  ues for sqlite3.
e8a0: 6d 44 62 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66  mDbFlags.*/.#def
e8b0: 69 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d  ine DBFLAG_Schem
e8c0: 61 43 68 61 6e 67 65 20 20 20 30 78 30 30 30 31  aChange   0x0001
e8d0: 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64    /* Uncommitted
e8e0: 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e   Hash table chan
e8f0: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ges */.#define D
e900: 42 46 4c 41 47 5f 50 72 65 66 65 72 42 75 69 6c  BFLAG_PreferBuil
e910: 74 69 6e 20 20 30 78 30 30 30 32 20 20 2f 2a 20  tin  0x0002  /* 
e920: 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75  Preference to bu
e930: 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a  ilt-in funcs */.
e940: 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56  #define DBFLAG_V
e950: 61 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78  acuum         0x
e960: 30 30 30 34 20 20 2f 2a 20 43 75 72 72 65 6e 74  0004  /* Current
e970: 6c 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a  ly in a VACUUM *
e980: 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47  /.#define DBFLAG
e990: 5f 56 61 63 75 75 6d 49 6e 74 6f 20 20 20 20 20  _VacuumInto     
e9a0: 30 78 30 30 30 38 20 20 2f 2a 20 43 75 72 72 65  0x0008  /* Curre
e9b0: 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 56 41 43  ntly running VAC
e9c0: 55 55 4d 20 49 4e 54 4f 20 2a 2f 0a 23 64 65 66  UUM INTO */.#def
e9d0: 69 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d  ine DBFLAG_Schem
e9e0: 61 4b 6e 6f 77 6e 4f 6b 20 20 30 78 30 30 31 30  aKnownOk  0x0010
e9f0: 20 20 2f 2a 20 53 63 68 65 6d 61 20 69 73 20 6b    /* Schema is k
ea00: 6e 6f 77 6e 20 74 6f 20 62 65 20 76 61 6c 69 64  nown to be valid
ea10: 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 44 42 46   */..#define DBF
ea20: 4c 41 47 5f 53 63 68 65 6d 61 49 6e 75 73 65 20  LAG_SchemaInuse 
ea30: 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 44 6f     0x0020  /* Do
ea40: 20 6e 6f 74 20 72 65 6c 65 61 73 65 20 73 68 61   not release sha
ea50: 72 61 62 6c 65 20 73 63 68 65 6d 61 73 20 2a 2f  rable schemas */
ea60: 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f  .#define DBFLAG_
ea70: 46 72 65 65 53 63 68 65 6d 61 20 20 20 20 20 30  FreeSchema     0
ea80: 78 30 30 34 30 20 20 2f 2a 20 46 72 65 65 20 65  x0040  /* Free e
ea90: 78 74 72 61 20 73 68 61 72 65 64 20 73 63 68 65  xtra shared sche
eaa0: 6d 61 73 20 6f 6e 20 72 65 6c 65 61 73 65 20 2a  mas on release *
eab0: 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66  /../*.** Bits of
eac0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f   the sqlite3.dbO
ead0: 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68  ptFlags field th
eae0: 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74  at are used by t
eaf0: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65  he.** sqlite3_te
eb00: 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54  st_control(SQLIT
eb10: 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d  E_TESTCTRL_OPTIM
eb20: 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e  IZATIONS,...) in
eb30: 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65  terface to.** se
eb40: 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c  lectively disabl
eb50: 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  e various optimi
eb60: 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  zations..*/.#def
eb70: 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79  ine SQLITE_Query
eb80: 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31  Flattener 0x0001
eb90: 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74     /* Query flat
eba0: 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  tening */.#defin
ebb0: 65 20 53 51 4c 49 54 45 5f 57 69 6e 64 6f 77 46  e SQLITE_WindowF
ebc0: 75 6e 63 20 20 20 20 20 30 78 30 30 30 32 20 20  unc     0x0002  
ebd0: 20 2f 2a 20 55 73 65 20 78 49 6e 76 65 72 73 65   /* Use xInverse
ebe0: 20 66 6f 72 20 77 69 6e 64 6f 77 20 66 75 6e 63   for window func
ebf0: 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
ec00: 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f   SQLITE_GroupByO
ec10: 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20  rder   0x0004   
ec20: 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72  /* GROUPBY cover
ec30: 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23   of ORDERBY */.#
ec40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61  define SQLITE_Fa
ec50: 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30  ctorOutConst 0x0
ec60: 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  008   /* Constan
ec70: 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 23  t factoring */.#
ec80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69  define SQLITE_Di
ec90: 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30  stinctOpt    0x0
eca0: 30 31 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43  010   /* DISTINC
ecb0: 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20  T using indexes 
ecc0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ecd0: 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20  E_CoverIdxScan  
ece0: 20 30 78 30 30 32 30 20 20 20 2f 2a 20 43 6f 76   0x0020   /* Cov
ecf0: 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e  ering index scan
ed00: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
ed10: 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f  ITE_OrderByIdxJo
ed20: 69 6e 20 30 78 30 30 34 30 20 20 20 2f 2a 20 4f  in 0x0040   /* O
ed30: 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73  RDER BY of joins
ed40: 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64   via index */.#d
ed50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61  efine SQLITE_Tra
ed60: 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30 30  nsitive     0x00
ed70: 38 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69  80   /* Transiti
ed80: 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ve constraints *
ed90: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
eda0: 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20  _OmitNoopJoin   
edb0: 30 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d 69 74  0x0100   /* Omit
edc0: 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69   unused tables i
edd0: 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69  n joins */.#defi
ede0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 4f  ne SQLITE_CountO
edf0: 66 56 69 65 77 20 20 20 20 30 78 30 32 30 30 20  fView    0x0200 
ee00: 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d 6f    /* The count-o
ee10: 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a 61 74  f-view optimizat
ee20: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
ee30: 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e 74  QLITE_CursorHint
ee40: 73 20 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a  s    0x0400   /*
ee50: 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48 69   Add OP_CursorHi
ee60: 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64  nt opcodes */.#d
ee70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61  efine SQLITE_Sta
ee80: 74 34 20 20 20 20 20 20 20 20 20 20 30 78 30 38  t4          0x08
ee90: 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54  00   /* Use STAT
eea0: 34 20 64 61 74 61 20 2a 2f 0a 20 20 20 2f 2a 20  4 data */.   /* 
eeb0: 54 48 33 20 65 78 70 65 63 74 73 20 74 68 65 20  TH3 expects the 
eec0: 53 74 61 74 34 20 20 20 5e 5e 5e 5e 5e 5e 20 76  Stat4   ^^^^^^ v
eed0: 61 6c 75 65 20 74 6f 20 62 65 20 30 78 30 38 30  alue to be 0x080
eee0: 30 2e 20 20 44 6f 6e 27 74 20 63 68 61 6e 67 65  0.  Don't change
eef0: 20 69 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53   it */.#define S
ef00: 51 4c 49 54 45 5f 50 75 73 68 44 6f 77 6e 20 20  QLITE_PushDown  
ef10: 20 20 20 20 20 30 78 31 30 30 30 20 20 20 2f 2a       0x1000   /*
ef20: 20 54 68 65 20 70 75 73 68 2d 64 6f 77 6e 20 6f   The push-down o
ef30: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  ptimization */.#
ef40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 69  define SQLITE_Si
ef50: 6d 70 6c 69 66 79 4a 6f 69 6e 20 20 20 30 78 32  mplifyJoin   0x2
ef60: 30 30 30 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74  000   /* Convert
ef70: 20 4c 45 46 54 20 4a 4f 49 4e 20 74 6f 20 4a 4f   LEFT JOIN to JO
ef80: 49 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  IN */.#define SQ
ef90: 4c 49 54 45 5f 53 6b 69 70 53 63 61 6e 20 20 20  LITE_SkipScan   
efa0: 20 20 20 20 30 78 34 30 30 30 20 20 20 2f 2a 20      0x4000   /* 
efb0: 53 6b 69 70 2d 73 63 61 6e 73 20 2a 2f 0a 23 64  Skip-scans */.#d
efc0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 6f  efine SQLITE_Pro
efd0: 70 61 67 61 74 65 43 6f 6e 73 74 20 30 78 38 30  pagateConst 0x80
efe0: 30 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 6e 73  00   /* The cons
eff0: 74 61 6e 74 20 70 72 6f 70 61 67 61 74 69 6f 6e  tant propagation
f000: 20 6f 70 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20   opt */.#define 
f010: 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20  SQLITE_AllOpts  
f020: 20 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f        0xffff   /
f030: 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69  * All optimizati
f040: 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61  ons */../*.** Ma
f050: 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67  cros for testing
f060: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
f070: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72  optimizations ar
f080: 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73  e enabled or dis
f090: 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  abled..*/.#defin
f0a0: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
f0b0: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
f0c0: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
f0d0: 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29  lags&(mask))!=0)
f0e0: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
f0f0: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
f100: 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d   mask)   (((db)-
f110: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
f120: 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52  k))==0)../*.** R
f130: 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74  eturn true if it
f140: 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f   OK to factor co
f150: 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
f160: 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74  ns into the init
f170: 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f  ialization.** co
f180: 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74  de. The argument
f190: 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65   is a Parse obje
f1a0: 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20  ct for the code 
f1b0: 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64  generator..*/.#d
f1c0: 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f  efine ConstFacto
f1d0: 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43  rOk(P) ((P)->okC
f1e0: 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a  onstFactor)../*.
f1f0: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
f200: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
f210: 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a  e.magic field..*
f220: 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72  * The numbers ar
f230: 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61  e obtained at ra
f240: 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f  ndom and have no
f250: 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
f260: 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20  , other.** than 
f270: 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66  being distinct f
f280: 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e  rom one another.
f290: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
f2a0: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20  TE_MAGIC_OPEN   
f2b0: 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a    0xa029a697  /*
f2c0: 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   Database is ope
f2d0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
f2e0: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
f2f0: 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f     0x9f3c2d33  /
f300: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c  * Database is cl
f310: 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  osed */.#define 
f320: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43  SQLITE_MAGIC_SIC
f330: 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30  K     0x4b771290
f340: 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61    /* Error and a
f350: 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f  waiting close */
f360: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f370: 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30  MAGIC_BUSY     0
f380: 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61  xf03b7906  /* Da
f390: 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79  tabase currently
f3a0: 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69   in use */.#defi
f3b0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
f3c0: 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37  ERROR    0xb5357
f3d0: 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54  930  /* An SQLIT
f3e0: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f  E_MISUSE error o
f3f0: 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69  ccurred */.#defi
f400: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
f410: 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66  ZOMBIE   0x64cff
f420: 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69  c7f  /* Close wi
f430: 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e  th last statemen
f440: 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a  t close */../*.*
f450: 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74  * Each SQL funct
f460: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62  ion is defined b
f470: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
f480: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
f490: 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  * structure.  Fo
f4a0: 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69  r global built-i
f4b0: 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a  n functions (ex:
f4c0: 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28 29   substr(), max()
f4d0: 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20  , count()).** a 
f4e0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
f4f0: 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c  structure is hel
f500: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
f510: 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
f520: 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20   object..** For 
f530: 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  per-connection a
f540: 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e  pplication-defin
f550: 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20  ed functions, a 
f560: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 0a  pointer to this.
f570: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ** structure is 
f580: 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d 3e  held in the db->
f590: 61 48 61 73 68 20 68 61 73 68 20 74 61 62 6c 65  aHash hash table
f5a0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48  ..**.** The u.pH
f5b0: 61 73 68 20 66 69 65 6c 64 20 69 73 20 75 73 65  ash field is use
f5c0: 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c 20  d by the global 
f5d0: 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20  built-ins.  The 
f5e0: 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a  u.pDestructor.**
f5f0: 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62   field is used b
f600: 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e  y per-connection
f610: 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69 6f   app-def functio
f620: 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  ns..*/.struct Fu
f630: 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41 72  ncDef {.  i8 nAr
f640: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
f650: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
f660: 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73  ments.  -1 means
f670: 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20   unlimited */.  
f680: 75 33 32 20 66 75 6e 63 46 6c 61 67 73 3b 20 20  u32 funcFlags;  
f690: 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d       /* Some com
f6a0: 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49  bination of SQLI
f6b0: 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76  TE_FUNC_* */.  v
f6c0: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20  oid *pUserData; 
f6d0: 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61      /* User data
f6e0: 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20   parameter */.  
f6f0: 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20  FuncDef *pNext; 
f700: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e       /* Next fun
f710: 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20  ction with same 
f720: 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  name */.  void (
f730: 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33  *xSFunc)(sqlite3
f740: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
f750: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20  lite3_value**); 
f760: 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d 73  /* func or agg-s
f770: 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tep */.  void (*
f780: 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74  xFinalize)(sqlit
f790: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
f7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f7b0: 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72 20  * Agg finalizer 
f7c0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 61 6c  */.  void (*xVal
f7d0: 75 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ue)(sqlite3_cont
f7e0: 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20  ext*);          
f7f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
f800: 72 72 65 6e 74 20 61 67 67 20 76 61 6c 75 65 20  rrent agg value 
f810: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 49 6e 76  */.  void (*xInv
f820: 65 72 73 65 29 28 73 71 6c 69 74 65 33 5f 63 6f  erse)(sqlite3_co
f830: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
f840: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
f850: 69 6e 76 65 72 73 65 20 61 67 67 2d 73 74 65 70  inverse agg-step
f860: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
f870: 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51   *zName;   /* SQ
f880: 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  L name of the fu
f890: 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69  nction. */.  uni
f8a0: 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65 66  on {.    FuncDef
f8b0: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
f8c0: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
f8d0: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
f8e0: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
f8f0: 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72 75 63  .    FuncDestruc
f900: 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
f910: 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65  ;   /* Reference
f920: 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63   counted destruc
f930: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
f940: 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a    } u;.};../*.**
f950: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
f960: 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75  encapsulates a u
f970: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73  ser-function des
f980: 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b  tructor callback
f990: 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72   (as.** configur
f9a0: 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f  ed using create_
f9b0: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61  function_v2()) a
f9c0: 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63  nd a reference c
f9d0: 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20  ounter. When.** 
f9e0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
f9f0: 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74  v2() is called t
fa00: 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74  o create a funct
fa10: 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72  ion with a destr
fa20: 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67  uctor,.** a sing
fa30: 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  le object of thi
fa40: 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61  s type is alloca
fa50: 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63  ted. FuncDestruc
fa60: 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20  tor.nRef is set 
fa70: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
fa80: 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65   of FuncDef obje
fa90: 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74  cts created (eit
faa0: 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65  her 1 or 3, depe
fab0: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
fac0: 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73  .** or not the s
fad0: 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e  pecified encodin
fae0: 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29  g is SQLITE_ANY)
faf0: 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44  . The FuncDef.pD
fb00: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d  estructor.** mem
fb10: 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74  ber of each of t
fb20: 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f  he new FuncDef o
fb30: 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f  bjects is set to
fb40: 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c   point to the al
fb50: 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44  located.** FuncD
fb60: 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a  estructor..**.**
fb70: 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65   Thereafter, whe
fb80: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  n one of the Fun
fb90: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
fba0: 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66  deleted, the ref
fbb0: 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20  erence.** count 
fbc0: 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  on this object i
fbd0: 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57  s decremented. W
fbe0: 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30  hen it reaches 0
fbf0: 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  , the destructor
fc00: 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  .** is invoked a
fc10: 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72  nd the FuncDestr
fc20: 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20  uctor structure 
fc30: 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  freed..*/.struct
fc40: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
fc50: 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20  {.  int nRef;.  
fc60: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
fc70: 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64  (void *);.  void
fc80: 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a   *pUserData;.};.
fc90: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
fca0: 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44  values for FuncD
fcb0: 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20  ef.flags.  Note 
fcc0: 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48  that the _LENGTH
fcd0: 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20   and _TYPEOF.** 
fce0: 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72  values must corr
fcf0: 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47  espond to OPFLAG
fd00: 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f  _LENGTHARG and O
fd10: 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e  PFLAG_TYPEOFARG.
fd20: 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f    And.** SQLITE_
fd30: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75  FUNC_CONSTANT mu
fd40: 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
fd50: 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49  s SQLITE_DETERMI
fd60: 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a  NISTIC.  There.*
fd70: 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73  * are assert() s
fd80: 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65  tatements in the
fd90: 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20   code to verify 
fda0: 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  this..**.** Valu
fdb0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65  e constraints (e
fdc0: 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65  nforced via asse
fdd0: 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53 51  rt()):.**     SQ
fde0: 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
fdf0: 20 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61      ==  NC_MinMa
fe00: 78 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46 5f  xAgg      == SF_
fe10: 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20 20  MinMaxAgg.**    
fe20: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
fe30: 47 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41  GTH    ==  OPFLA
fe40: 47 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20 20  G_LENGTHARG.**  
fe50: 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54     SQLITE_FUNC_T
fe60: 59 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50 46  YPEOF    ==  OPF
fe70: 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a 2a  LAG_TYPEOFARG.**
fe80: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
fe90: 5f 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20 53  _CONSTANT  ==  S
fea0: 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53  QLITE_DETERMINIS
feb0: 54 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50 49  TIC from the API
fec0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
fed0: 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64 65  UNC_ENCMASK   de
fee0: 70 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45 5f  pends on SQLITE_
fef0: 55 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20 74  UTF* macros in t
ff00: 68 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69 6e  he API.*/.#defin
ff10: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e  e SQLITE_FUNC_EN
ff20: 43 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a  CMASK  0x0003 /*
ff30: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
ff40: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20  LITE_UTF16BE or 
ff50: 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69  UTF16LE */.#defi
ff60: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
ff70: 49 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f  IKE     0x0004 /
ff80: 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20  * Candidate for 
ff90: 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a  the LIKE optimiz
ffa0: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
ffb0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53   SQLITE_FUNC_CAS
ffc0: 45 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20  E     0x0008 /* 
ffd0: 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c  Case-sensitive L
ffe0: 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f  IKE-type functio
fff0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
10000 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20  ITE_FUNC_EPHEM  
10010 20 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65    0x0010 /* Ephe
10020 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77  meral.  Delete w
10030 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66  ith VDBE */.#def
10040 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
10050 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20  NEEDCOLL 0x0020 
10060 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  /* sqlite3GetFun
10070 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74  cCollSeq() might
10080 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65   be called*/.#de
10090 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
100a0 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30  _LENGTH   0x0040
100b0 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e   /* Built-in len
100c0 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  gth() function *
100d0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
100e0 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30  _FUNC_TYPEOF   0
100f0 78 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0080 /* Built-i
10100 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  n typeof() funct
10110 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
10120 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54  QLITE_FUNC_COUNT
10130 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75      0x0100 /* Bu
10140 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20  ilt-in count(*) 
10150 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65  aggregate */.#de
10160 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
10170 5f 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30  _COALESCE 0x0200
10180 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61   /* Built-in coa
10190 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c  lesce() or ifnul
101a0 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  l() */.#define S
101b0 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b  QLITE_FUNC_UNLIK
101c0 45 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75  ELY 0x0400 /* Bu
101d0 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28  ilt-in unlikely(
101e0 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
101f0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
10200 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30  C_CONSTANT 0x080
10210 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e  0 /* Constant in
10220 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73  puts give a cons
10230 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23  tant output */.#
10240 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
10250 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30  NC_MINMAX   0x10
10260 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d  00 /* True for m
10270 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61  in() and max() a
10280 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65  ggregates */.#de
10290 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
102a0 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30  _SLOCHNG  0x2000
102b0 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65   /* "Slow Change
102c0 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e  ". Value constan
102d0 74 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20  t during a.     
102e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
10300 2a 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d  * single query -
10310 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76   might change ov
10320 65 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65 66 69  er time */.#defi
10330 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 41  ne SQLITE_FUNC_A
10340 46 46 49 4e 49 54 59 20 30 78 34 30 30 30 20 2f  FFINITY 0x4000 /
10350 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66 66 69 6e  * Built-in affin
10360 69 74 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ity() function *
10370 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10380 5f 46 55 4e 43 5f 4f 46 46 53 45 54 20 20 20 30  _FUNC_OFFSET   0
10390 78 38 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x8000 /* Built-i
103a0 6e 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28  n sqlite_offset(
103b0 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
103c0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
103d0 43 5f 57 49 4e 44 4f 57 20 20 20 30 78 30 30 30  C_WINDOW   0x000
103e0 31 30 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  10000 /* Built-i
103f0 6e 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79 20 66 75  n window-only fu
10400 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
10410 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 49 4e  e SQLITE_FUNC_IN
10420 54 45 52 4e 41 4c 20 30 78 30 30 30 34 30 30 30  TERNAL 0x0004000
10430 30 20 2f 2a 20 46 6f 72 20 75 73 65 20 62 79 20  0 /* For use by 
10440 4e 65 73 74 65 64 50 61 72 73 65 28 29 20 6f 6e  NestedParse() on
10450 6c 79 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ly */../*.** The
10460 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65   following three
10470 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f   macros, FUNCTIO
10480 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20  N(), LIKEFUNC() 
10490 61 6e 64 20 41 47 47 52 45 47 41 54 45 28 29 20  and AGGREGATE() 
104a0 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63  are.** used to c
104b0 72 65 61 74 65 20 74 68 65 20 69 6e 69 74 69 61  reate the initia
104c0 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46  lizers for the F
104d0 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
104e0 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54  s..**.**   FUNCT
104f0 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
10500 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
10510 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  c).**     Used t
10520 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
10530 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
10540 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
10550 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20  ion zName.**    
10560 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
10570 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63  C function xFunc
10580 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
10590 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68  rg arguments. Th
105a0 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70  e.**     value p
105b0 61 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73  assed as iArg is
105c0 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
105d0 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69  *) and made avai
105e0 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20  lable.**     as 
105f0 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73  the user-data (s
10600 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
10610 28 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63  ()) for the func
10620 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20  tion. If.**     
10630 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20  argument bNC is 
10640 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53  true, then the S
10650 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
10660 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e  OLL flag is set.
10670 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49  .**.**   VFUNCTI
10680 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
10690 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
106a0 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55  ).**     Like FU
106b0 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74  NCTION except it
106c0 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54   omits the SQLIT
106d0 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
106e0 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46  flag..**.**   DF
106f0 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
10700 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10710 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
10720 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
10730 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
10740 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
10750 54 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a  TANT flag and.**
10760 20 20 20 20 20 61 64 64 73 20 74 68 65 20 53 51       adds the SQ
10770 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
10780 47 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f  G flag.  Used fo
10790 72 20 64 61 74 65 20 26 20 74 69 6d 65 20 66 75  r date & time fu
107a0 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61  nctions.**     a
107b0 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b  nd functions lik
107c0 65 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e  e sqlite_version
107d0 28 29 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e  () that can chan
107e0 67 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69  ge, but not duri
107f0 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67  ng.**     a sing
10800 6c 65 20 71 75 65 72 79 2e 20 20 54 68 65 20 69  le query.  The i
10810 41 72 67 20 69 73 20 69 67 6e 6f 72 65 64 2e 20  Arg is ignored. 
10820 20 54 68 65 20 75 73 65 72 2d 64 61 74 61 20 69   The user-data i
10830 73 20 61 6c 77 61 79 73 20 73 65 74 0a 2a 2a 20  s always set.** 
10840 20 20 20 20 74 6f 20 61 20 4e 55 4c 4c 20 70 6f      to a NULL po
10850 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20  inter.  The bNC 
10860 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
10870 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50   used..**.**   P
10880 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20  URE_DATE(zName, 
10890 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
108a0 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55   xFunc).**     U
108b0 73 65 64 20 66 6f 72 20 22 70 75 72 65 22 20 64  sed for "pure" d
108c0 61 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f  ate/time functio
108d0 6e 73 2c 20 74 68 69 73 20 6d 61 63 72 6f 20 69  ns, this macro i
108e0 73 20 6c 69 6b 65 20 44 46 55 4e 43 54 49 4f 4e  s like DFUNCTION
108f0 0a 2a 2a 20 20 20 20 20 65 78 63 65 70 74 20 74  .**     except t
10900 68 61 74 20 69 74 20 64 6f 65 73 20 73 65 74 20  hat it does set 
10910 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
10920 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 73 2e 20  CONSTANT flags. 
10930 20 69 41 72 67 20 69 73 0a 2a 2a 20 20 20 20 20   iArg is.**     
10940 69 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20  ignored and the 
10950 75 73 65 72 2d 64 61 74 61 20 66 6f 72 20 74 68  user-data for th
10960 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 69 73  ese functions is
10970 20 73 65 74 20 74 6f 20 61 6e 20 0a 2a 2a 20 20   set to an .**  
10980 20 20 20 61 72 62 69 74 72 61 72 79 20 6e 6f 6e     arbitrary non
10990 2d 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20  -NULL pointer.  
109a0 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65  The bNC paramete
109b0 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  r is not used..*
109c0 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45  *.**   AGGREGATE
109d0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
109e0 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20  rg, bNC, xStep, 
109f0 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55  xFinal).**     U
10a00 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e  sed to create an
10a10 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
10a20 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ion definition i
10a30 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a  mplemented by.**
10a40 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74       the C funct
10a50 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78  ions xStep and x
10a60 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74  Final. The first
10a70 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73   four parameters
10a80 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65  .**     are inte
10a90 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73  rpreted in the s
10aa0 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66  ame way as the f
10ab0 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72  irst 4 parameter
10ac0 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43  s to.**     FUNC
10ad0 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20  TION()..**.**   
10ae0 57 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  WFUNCTION(zName,
10af0 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 78 53 74   nArg, iArg, xSt
10b00 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c  ep, xFinal, xVal
10b10 75 65 2c 20 78 49 6e 76 65 72 73 65 29 0a 2a 2a  ue, xInverse).**
10b20 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
10b30 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65  ate an aggregate
10b40 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
10b50 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
10b60 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43   by.**     the C
10b70 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70   functions xStep
10b80 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65   and xFinal. The
10b90 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61   first four para
10ba0 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72  meters.**     ar
10bb0 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e  e interpreted in
10bc0 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73   the same way as
10bd0 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72   the first 4 par
10be0 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20  ameters to.**   
10bf0 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a    FUNCTION()..**
10c00 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a  .**   LIKEFUNC(z
10c10 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67  Name, nArg, pArg
10c20 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20  , flags).**     
10c30 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
10c40 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e   scalar function
10c50 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61   definition of a
10c60 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a   function zName.
10c70 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65  **     that acce
10c80 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
10c90 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d  ts and is implem
10ca0 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20  ented by a call 
10cb0 74 6f 20 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63  to C.**     func
10cc0 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41  tion likeFunc. A
10cd0 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20  rgument pArg is 
10ce0 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20  cast to a (void 
10cf0 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20  *) and made.**  
10d00 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20     available as 
10d10 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65  the function use
10d20 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f  r-data (sqlite3_
10d30 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68  user_data()). Th
10d40 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66  e.**     FuncDef
10d50 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20  .flags variable 
10d60 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61  is set to the va
10d70 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 74 68  lue passed as th
10d80 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70  e flags.**     p
10d90 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65  arameter..*/.#de
10da0 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e  fine FUNCTION(zN
10db0 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
10dc0 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
10dd0 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
10de0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
10df0 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
10e00 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
10e10 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
10e20 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
10e30 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
10e40 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  0, 0, #zName, {0
10e50 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e  } }.#define VFUN
10e60 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
10e70 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10e80 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
10e90 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
10ea0 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
10eb0 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
10ec0 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
10ed0 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
10ee0 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
10ef0 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44   {0} }.#define D
10f00 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
10f10 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
10f20 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
10f30 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  g, SQLITE_FUNC_S
10f40 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54  LOCHNG|SQLITE_UT
10f50 46 38 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78  F8, \.   0, 0, x
10f60 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23  Func, 0, 0, 0, #
10f70 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
10f80 66 69 6e 65 20 50 55 52 45 5f 44 41 54 45 28 7a  fine PURE_DATE(z
10f90 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
10fa0 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
10fb0 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10fc0 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c  FUNC_SLOCHNG|SQL
10fd0 49 54 45 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f  ITE_UTF8|SQLITE_
10fe0 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c  FUNC_CONSTANT, \
10ff0 0a 20 20 20 28 76 6f 69 64 2a 29 26 73 71 6c 69  .   (void*)&sqli
11000 74 65 33 43 6f 6e 66 69 67 2c 20 30 2c 20 78 46  te3Config, 0, xF
11010 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
11020 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
11030 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e  ine FUNCTION2(zN
11040 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
11050 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74   bNC, xFunc, ext
11060 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  raFlags) \.  {nA
11070 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  rg,SQLITE_FUNC_C
11080 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
11090 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
110a0 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65  FUNC_NEEDCOLL)|e
110b0 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53  xtraFlags,\.   S
110c0 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
110d0 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63  (iArg), 0, xFunc
110e0 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  , 0, 0, 0, #zNam
110f0 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
11100 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e   STR_FUNCTION(zN
11110 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
11120 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
11130 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
11140 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49  UNC_SLOCHNG|SQLI
11150 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
11160 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
11170 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30  L), \.   pArg, 0
11180 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
11190 2c 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66  , #zName, }.#def
111a0 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61  ine LIKEFUNC(zNa
111b0 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66  me, nArg, arg, f
111c0 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
111d0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
111e0 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
111f0 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76  8|flags, \.   (v
11200 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69  oid *)arg, 0, li
11210 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c  keFunc, 0, 0, 0,
11220 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
11230 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
11240 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
11250 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
11260 69 6e 61 6c 2c 20 78 56 61 6c 75 65 29 20 5c 0a  inal, xValue) \.
11270 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
11280 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
11290 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
112a0 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
112b0 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
112c0 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61  xStep,xFinal,xVa
112d0 6c 75 65 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30  lue,0,#zName, {0
112e0 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45  }}.#define AGGRE
112f0 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  GATE2(zName, nAr
11300 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65  g, arg, nc, xSte
11310 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61  p, xFinal, extra
11320 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
11330 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
11340 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
11350 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
11360 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  gs, \.   SQLITE_
11370 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c  INT_TO_PTR(arg),
11380 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
11390 2c 78 46 69 6e 61 6c 2c 30 2c 23 7a 4e 61 6d 65  ,xFinal,0,#zName
113a0 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 57  , {0}}.#define W
113b0 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
113c0 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
113d0 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78  xStep, xFinal, x
113e0 56 61 6c 75 65 2c 20 78 49 6e 76 65 72 73 65 2c  Value, xInverse,
113f0 20 66 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53   f) \.  {nArg, S
11400 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53  QLITE_UTF8|(nc*S
11410 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
11420 4f 4c 4c 29 7c 66 2c 20 5c 0a 20 20 20 53 51 4c  OLL)|f, \.   SQL
11430 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
11440 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  rg), 0, xStep,xF
11450 69 6e 61 6c 2c 78 56 61 6c 75 65 2c 78 49 6e 76  inal,xValue,xInv
11460 65 72 73 65 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d  erse,#zName, {0}
11470 7d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4e  }.#define INTERN
11480 41 4c 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  AL_FUNCTION(zNam
11490 65 2c 20 6e 41 72 67 2c 20 78 46 75 6e 63 29 20  e, nArg, xFunc) 
114a0 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
114b0 45 5f 46 55 4e 43 5f 49 4e 54 45 52 4e 41 4c 7c  E_FUNC_INTERNAL|
114c0 53 51 4c 49 54 45 5f 55 54 46 38 7c 53 51 4c 49  SQLITE_UTF8|SQLI
114d0 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
114e0 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75  , \.   0, 0, xFu
114f0 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
11500 61 6d 65 2c 20 7b 30 7d 20 7d 0a 0a 0a 2f 2a 0a  ame, {0} }.../*.
11510 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73  ** All current s
11520 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74  avepoints are st
11530 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
11540 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61   list starting a
11550 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61  t.** sqlite3.pSa
11560 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72  vepoint. The fir
11570 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68  st element in th
11580 65 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f  e list is the mo
11590 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f  st recently.** o
115a0 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  pened savepoint.
115b0 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   Savepoints are 
115c0 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73  added to the lis
115d0 74 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a  t by the vdbe.**
115e0 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
115f0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  struction..*/.st
11600 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b  ruct Savepoint {
11610 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
11620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11630 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f         /* Savepo
11640 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65  int name (nul-te
11650 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69  rminated) */.  i
11660 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  64 nDeferredCons
11670 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11680 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11690 64 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c  deferred fk viol
116a0 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20  ations */.  i64 
116b0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
116c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
116d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
116e0 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f  erred imm fk. */
116f0 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e  .  Savepoint *pN
11700 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
11710 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74         /* Parent
11720 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61   savepoint (if a
11730 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ny) */.};../*.**
11740 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
11750 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73  re used as the s
11760 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20  econd parameter 
11770 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  to sqlite3Savepo
11780 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73  int(),.** and as
11790 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
117a0 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70   to the OP_Savep
117b0 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
117c0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56  ..*/.#define SAV
117d0 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20  EPOINT_BEGIN    
117e0 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45    0.#define SAVE
117f0 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20  POINT_RELEASE   
11800 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   1.#define SAVEP
11810 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20  OINT_ROLLBACK   
11820 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  2.../*.** Each S
11830 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69  QLite module (vi
11840 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69  rtual table defi
11850 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e  nition) is defin
11860 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74  ed by an.** inst
11870 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
11880 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c  owing structure,
11890 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
118a0 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a  qlite3.aModule.*
118b0 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f  * hash table..*/
118c0 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b  .struct Module {
118d0 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
118e0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
118f0 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62  ;       /* Callb
11900 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a  ack pointers */.
11910 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
11920 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
11930 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70         /* Name p
11940 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f  assed to create_
11950 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f  module() */.  vo
11960 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20  id *pAux;       
11970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11980 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65     /* pAux passe
11990 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75  d to create_modu
119a0 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  le() */.  void (
119b0 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20  *xDestroy)(void 
119c0 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  *);            /
119d0 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63  * Module destruc
119e0 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
119f0 20 20 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62    Table *pEpoTab
11a00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11a10 20 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d         /* Eponym
11a20 6f 75 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68  ous table for th
11a30 69 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a  is module */.};.
11a40 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ./*.** informati
11a50 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f  on about each co
11a60 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74  lumn of an SQL t
11a70 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20  able is held in 
11a80 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
11a90 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
11aa0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75  ..*/.struct Colu
11ab0 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  mn {.  char *zNa
11ac0 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  me;     /* Name 
11ad0 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20  of this column, 
11ae0 5c 30 30 30 2c 20 74 68 65 6e 20 74 68 65 20 74  \000, then the t
11af0 79 70 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ype */.  Expr *p
11b00 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66  Dflt;     /* Def
11b10 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
11b20 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
11b30 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20  har *zColl;     
11b40 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
11b50 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c  uence.  If NULL,
11b60 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   use the default
11b70 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c   */.  u8 notNull
11b80 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f  ;      /* An OE_
11b90 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69   code for handli
11ba0 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  ng a NOT NULL co
11bb0 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68  nstraint */.  ch
11bc0 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f  ar affinity;   /
11bd0 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  * One of the SQL
11be0 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75  ITE_AFF_... valu
11bf0 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74  es */.  u8 szEst
11c00 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69  ;        /* Esti
11c10 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 76 61  mated size of va
11c20 6c 75 65 20 69 6e 20 74 68 69 73 20 63 6f 6c 75  lue in this colu
11c30 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d  mn. sizeof(INT)=
11c40 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c  =1 */.  u8 colFl
11c50 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c  ags;     /* Bool
11c60 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20  ean properties. 
11c70 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65   See COLFLAG_ de
11c80 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d  fines below */.}
11c90 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61  ;../* Allowed va
11ca0 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e  lues for Column.
11cb0 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65  colFlags:.*/.#de
11cc0 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49  fine COLFLAG_PRI
11cd0 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20  MKEY  0x0001    
11ce0 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72  /* Column is par
11cf0 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79  t of the primary
11d00 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
11d10 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20  COLFLAG_HIDDEN  
11d20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20   0x0002    /* A 
11d30 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e  hidden column in
11d40 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
11d50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46   */.#define COLF
11d60 4c 41 47 5f 48 41 53 54 59 50 45 20 20 30 78 30  LAG_HASTYPE  0x0
11d70 30 30 34 20 20 20 20 2f 2a 20 54 79 70 65 20 6e  004    /* Type n
11d80 61 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75  ame follows colu
11d90 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 23 64 65 66 69  mn name */.#defi
11da0 6e 65 20 43 4f 4c 46 4c 41 47 5f 55 4e 49 51 55  ne COLFLAG_UNIQU
11db0 45 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a  E   0x0008    /*
11dc0 20 43 6f 6c 75 6d 6e 20 64 65 66 20 63 6f 6e 74   Column def cont
11dd0 61 69 6e 73 20 22 55 4e 49 51 55 45 22 20 6f 72  ains "UNIQUE" or
11de0 20 22 50 4b 22 20 2a 2f 0a 23 64 65 66 69 6e 65   "PK" */.#define
11df0 20 43 4f 4c 46 4c 41 47 5f 53 4f 52 54 45 52 52   COLFLAG_SORTERR
11e00 45 46 20 30 78 30 30 31 30 20 20 20 2f 2a 20 55  EF 0x0010   /* U
11e10 73 65 20 73 6f 72 74 65 72 2d 72 65 66 73 20 77  se sorter-refs w
11e20 69 74 68 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20  ith this column 
11e30 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c  */../*.** A "Col
11e40 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22  lating Sequence"
11e50 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
11e60 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
11e70 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
11e80 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70  tructure. Concep
11e90 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74  tually, a collat
11ea0 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e  ing sequence con
11eb0 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20  sists of a name 
11ec0 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69  and.** a compari
11ed0 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74  son routine that
11ee0 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64   defines the ord
11ef0 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65  er of that seque
11f00 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f  nce..**.** If Co
11f10 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55  llSeq.xCmp is NU
11f20 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  LL, it means tha
11f30 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69  t the.** collati
11f40 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
11f50 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63  ndefined.  Indic
11f60 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75  es built on an u
11f70 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c  ndefined.** coll
11f80 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d  ating sequence m
11f90 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f  ay not be read o
11fa0 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74  r written..*/.st
11fb0 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20  ruct CollSeq {. 
11fc0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
11fd0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
11fe0 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  f the collating 
11ff0 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20  sequence, UTF-8 
12000 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  encoded */.  u8 
12010 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
12020 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
12030 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78  ing handled by x
12040 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  Cmp() */.  void 
12050 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  *pUser;         
12060 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
12070 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a  nt to xCmp() */.
12080 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f    int (*xCmp)(vo
12090 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76  id*,int, const v
120a0 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  oid*, int, const
120b0 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
120c0 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20  (*xDel)(void*); 
120d0 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
120e0 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a  or pUser */.};..
120f0 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64  /*.** A sort ord
12100 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  er can be either
12110 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f   ASC or DESC..*/
12120 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
12130 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20  SO_ASC       0  
12140 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
12150 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
12160 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
12170 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20  DESC      1  /* 
12180 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
12190 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69  g order */.#defi
121a0 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44  ne SQLITE_SO_UND
121b0 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20  EFINED -1 /* No 
121c0 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69  sort order speci
121d0 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  fied */../*.** C
121e0 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
121f0 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73  ypes..**.** Thes
12200 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d  e used to have m
12210 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b  nemonic name lik
12220 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45  e 'i' for SQLITE
12230 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64  _AFF_INTEGER and
12240 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49  .** 't' for SQLI
12250 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75  TE_AFF_TEXT.  Bu
12260 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20  t we can save a 
12270 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64  little space and
12280 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20   improve.** the 
12290 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62  speed a little b
122a0 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20  y numbering the 
122b0 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69  values consecuti
122c0 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20  vely..**.** But 
122d0 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72  rather than star
122e0 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77  t with 0 or 1, w
122f0 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27  e begin with 'A'
12300 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20  .  That way,.** 
12310 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66  when multiple af
12320 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65  finity types are
12330 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e   concatenated in
12340 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a  to a string and.
12350 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50  ** used as the P
12360 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20  4 operand, they 
12370 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61  will be more rea
12380 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  dable..**.** Not
12390 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20  e also that the 
123a0 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72  numeric types ar
123b0 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68  e grouped togeth
123c0 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69  er so that testi
123d0 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65  ng.** for a nume
123e0 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69  ric type is a si
123f0 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ngle comparison.
12400 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74    And the BLOB t
12410 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f  ype is first..*/
12420 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
12430 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20 30 78 34  AFF_NONE     0x4
12440 30 20 20 2f 2a 20 27 40 27 20 2a 2f 0a 23 64 65  0  /* '@' */.#de
12450 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
12460 42 4c 4f 42 20 20 20 20 20 30 78 34 31 20 20 2f  BLOB     0x41  /
12470 2a 20 27 41 27 20 2a 2f 0a 23 64 65 66 69 6e 65  * 'A' */.#define
12480 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
12490 20 20 20 20 20 30 78 34 32 20 20 2f 2a 20 27 42       0x42  /* 'B
124a0 27 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ' */.#define SQL
124b0 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
124c0 20 30 78 34 33 20 20 2f 2a 20 27 43 27 20 2a 2f   0x43  /* 'C' */
124d0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
124e0 41 46 46 5f 49 4e 54 45 47 45 52 20 20 30 78 34  AFF_INTEGER  0x4
124f0 34 20 20 2f 2a 20 27 44 27 20 2a 2f 0a 23 64 65  4  /* 'D' */.#de
12500 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
12510 52 45 41 4c 20 20 20 20 20 30 78 34 35 20 20 2f  REAL     0x45  /
12520 2a 20 27 45 27 20 2a 2f 0a 0a 23 64 65 66 69 6e  * 'E' */..#defin
12530 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72  e sqlite3IsNumer
12540 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20 28  icAffinity(X)  (
12550 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  (X)>=SQLITE_AFF_
12560 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20  NUMERIC)../*.** 
12570 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  The SQLITE_AFF_M
12580 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73  ASK values masks
12590 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66 69   off the signifi
125a0 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a  cant bits of an.
125b0 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75  ** affinity valu
125c0 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
125d0 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20  LITE_AFF_MASK   
125e0 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64    0x47../*.** Ad
125f0 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c  ditional bit val
12600 75 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ues that can be 
12610 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61 66 66  ORed with an aff
12620 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a  inity without.**
12630 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66   changing the af
12640 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  finity..**.** Th
12650 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
12660 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69   flag is a combi
12670 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51  nation of NULLEQ
12680 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e   and JUMPIFNULL.
12690 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e  .** It causes an
126a0 20 61 73 73 65 72 74 28 29 20 74 6f 20 66 69 72   assert() to fir
126b0 65 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  e if either oper
126c0 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69  and to a compari
126d0 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20  son.** operator 
126e0 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20  is NULL.  It is 
126f0 61 64 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e  added to certain
12700 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72   comparison oper
12710 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76  ators to.** prov
12720 65 20 74 68 61 74 20 74 68 65 20 6f 70 65 72 61  e that the opera
12730 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e  nds are always N
12740 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66  OT NULL..*/.#def
12750 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e  ine SQLITE_KEEPN
12760 55 4c 4c 20 20 20 20 20 30 78 30 38 20 20 2f 2a  ULL     0x08  /*
12770 20 55 73 65 64 20 62 79 20 76 65 63 74 6f 72 20   Used by vector 
12780 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65 66  == or <> */.#def
12790 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  ine SQLITE_JUMPI
127a0 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a  FNULL   0x10  /*
127b0 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65 72   jumps if either
127c0 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
127d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
127e0 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20  TE_STOREP2      
127f0 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72  0x20  /* Store r
12800 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d  esult in reg[P2]
12810 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d   rather than jum
12820 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  p */.#define SQL
12830 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20  ITE_NULLEQ      
12840 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e   0x80  /* NULL=N
12850 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
12860 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20  QLITE_NOTNULL   
12870 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65     0x90  /* Asse
12880 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73  rt that operands
12890 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20   are never NULL 
128a0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  */../*.** An obj
128b0 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65  ect of this type
128c0 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
128d0 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61 62  each virtual tab
128e0 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a  le present in.**
128f0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
12900 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  hema..**.** If t
12910 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
12920 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68  ma is shared, th
12930 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20  en there is one 
12940 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
12950 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f  .** structure fo
12960 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  r each database 
12970 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69  connection (sqli
12980 74 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20  te3*) that uses 
12990 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63  the shared.** sc
129a0 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65  hema. This is be
129b0 63 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62  cause each datab
129c0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72  ase connection r
129d0 65 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20  equires its own 
129e0 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e  unique.** instan
129f0 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ce of the sqlite
12a00 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75  3_vtab* handle u
12a10 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  sed to access th
12a20 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0a  e virtual table.
12a30 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
12a40 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  n. sqlite3_vtab*
12a50 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74   handles can not
12a60 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65   be shared betwe
12a70 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  en.** database c
12a80 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e  onnections, even
12a90 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f   when the rest o
12aa0 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  f the in-memory 
12ab0 64 61 74 61 62 61 73 65 0a 2a 2a 20 73 63 68 65  database.** sche
12ac0 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73  ma is shared, as
12ad0 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
12ae0 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73  ion often stores
12af0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
12b00 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
12b10 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20  le passed to it 
12b20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74  via the xConnect
12b30 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20  () or xCreate() 
12b40 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67  method.** during
12b50 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
12b60 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73  internally. This
12b70 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
12b80 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a  tion handle may.
12b90 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20  ** then be used 
12ba0 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  by the virtual t
12bb0 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
12bc0 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65  ion to access re
12bd0 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69 74  al tables.** wit
12be0 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hin the database
12bf0 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61  . So that they a
12c00 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66  ppear as part of
12c10 20 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a 20   the callers.** 
12c20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
12c30 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64  se accesses need
12c40 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20   to be made via 
12c50 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
12c60 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
12c70 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20  as that used to 
12c80 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72  execute SQL oper
12c90 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69  ations on the vi
12ca0 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a  rtual table..**.
12cb0 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62  ** All VTable ob
12cc0 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65  jects that corre
12cd0 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c  spond to a singl
12ce0 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61  e table in a sha
12cf0 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  red.** database 
12d00 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69  schema are initi
12d10 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ally stored in a
12d20 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69   linked-list poi
12d30 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68  nted to by.** th
12d40 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
12d50 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20  member variable 
12d60 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
12d70 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63  ding Table objec
12d80 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71  t..** When an sq
12d90 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
12da0 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71  operation is req
12db0 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20  uired to access 
12dc0 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
12dd0 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65  able, it searche
12de0 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74  s the list for t
12df0 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63  he VTable that c
12e00 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
12e10 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  e.** database co
12e20 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74  nnection doing t
12e30 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20  he preparing so 
12e40 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f  as to use the co
12e50 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33  rrect.** sqlite3
12e60 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e  _vtab* handle in
12e70 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75   the compiled qu
12e80 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ery..**.** When 
12e90 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62  an in-memory Tab
12ea0 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c  le object is del
12eb0 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c  eted (for exampl
12ec0 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63  e when the.** sc
12ed0 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65  hema is being re
12ee0 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20  loaded for some 
12ef0 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61  reason), the VTa
12f00 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ble objects are 
12f10 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61  not.** deleted a
12f20 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  nd the sqlite3_v
12f30 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65  tab* handles are
12f40 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74   not xDisconnect
12f50 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61 74  ()ed.** immediat
12f60 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68  ely. Instead, th
12f70 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f  ey are moved fro
12f80 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61  m the Table.pVTa
12f90 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61  ble list to.** a
12fa0 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69  nother linked li
12fb0 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68 65  st headed by the
12fc0 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e   sqlite3.pDiscon
12fd0 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74  nect member of t
12fe0 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
12ff0 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72 75  ing sqlite3 stru
13000 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65 20  cture. They are 
13010 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69  then deleted/xDi
13020 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e 65  sconnected.** ne
13030 78 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d  xt time a statem
13040 65 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20  ent is prepared 
13050 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74  using said sqlit
13060 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e  e3*. This is don
13070 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65  e.** to avoid de
13080 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e  adlock issues in
13090 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65  volving multiple
130a0 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d   sqlite3.mutex m
130b0 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72  utexes..** Refer
130c0 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f   to comments abo
130d0 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69  ve function sqli
130e0 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
130f0 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78  t() for an.** ex
13100 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20  planation as to 
13110 77 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74  why it is safe t
13120 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74  o add an entry t
13130 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69  o an sqlite3.pDi
13140 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74  sconnect.** list
13150 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67   without holding
13160 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
13170 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  ng sqlite3.mutex
13180 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68   mutex..**.** Th
13190 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a  e memory for obj
131a0 65 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70  ects of this typ
131b0 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f  e is always allo
131c0 63 61 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  cated by.** sqli
131d0 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75  te3DbMalloc(), u
131e0 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  sing the connect
131f0 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65  ion handle store
13200 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61  d in VTable.db a
13210 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61  s.** the first a
13220 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  rgument..*/.stru
13230 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71  ct VTable {.  sq
13240 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
13250 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
13260 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  ase connection a
13270 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
13280 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d  his table */.  M
13290 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20  odule *pMod;    
132a0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
132b0 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d  ter to module im
132c0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a  plementation */.
132d0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
132e0 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50  pVtab;      /* P
132f0 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69  ointer to vtab i
13300 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74  nstance */.  int
13310 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
13320 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13330 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
13340 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a  this structure *
13350 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69  /.  u8 bConstrai
13360 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
13370 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61   True if constra
13380 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74  ints are support
13390 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76  ed */.  int iSav
133a0 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20  epoint;         
133b0 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68    /* Depth of th
133c0 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63  e SAVEPOINT stac
133d0 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  k */.  VTable *p
133e0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
133f0 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b   /* Next in link
13400 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f  ed list (see abo
13410 76 65 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ve) */.#ifdef SQ
13420 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 48 41 52  LITE_ENABLE_SHAR
13430 45 44 5f 53 43 48 45 4d 41 0a 20 20 63 68 61 72  ED_SCHEMA.  char
13440 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
13450 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 6e        /* Table n
13460 61 6d 65 20 28 52 45 55 53 45 5f 53 43 48 45 4d  ame (REUSE_SCHEM
13470 41 20 6d 6f 64 65 29 20 2a 2f 0a 23 65 6e 64 69  A mode) */.#endi
13480 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  f.};../*.** The 
13490 73 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20  schema for each 
134a0 53 51 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69  SQL table and vi
134b0 65 77 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  ew is represente
134c0 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62  d in memory.** b
134d0 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
134e0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
134f0 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
13500 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68  uct Table {.  ch
13510 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
13520 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
13530 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
13540 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f  */.  Column *aCo
13550 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66  l;        /* Inf
13560 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
13570 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
13580 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20  Index *pIndex;  
13590 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
135a0 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74  SQL indexes on t
135b0 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20  his table. */.  
135c0 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
135d0 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72       /* NULL for
135e0 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73   tables.  Points
135f0 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69   to definition i
13600 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46  f a view. */.  F
13610 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20  Key *pFKey;     
13620 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69      /* Linked li
13630 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67  st of all foreig
13640 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74  n keys in this t
13650 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  able */.  char *
13660 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f  zColAff;       /
13670 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e  * String definin
13680 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  g the affinity o
13690 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  f each column */
136a0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68  .  ExprList *pCh
136b0 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43  eck;    /* All C
136c0 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
136d0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
136e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
136f0 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64 20 61 73  ... also used as
13700 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73   column name lis
13710 74 20 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20  t in a VIEW */. 
13720 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
13730 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54        /* Root BT
13740 72 65 65 20 70 61 67 65 20 66 6f 72 20 74 68 69  ree page for thi
13750 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32  s table */.  u32
13760 20 6e 54 61 62 52 65 66 3b 20 20 20 20 20 20 20   nTabRef;       
13770 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
13780 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
13790 54 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 74  Table */.  u32 t
137a0 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  abFlags;        
137b0 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20  /* Mask of TF_* 
137c0 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 31 36 20  values */.  i16 
137d0 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20  iPKey;          
137e0 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74   /* If not negat
137f0 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50  ive, use aCol[iP
13800 4b 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69  Key] as the rowi
13810 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b  d */.  i16 nCol;
13820 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
13830 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
13840 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
13850 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c  /.  LogEst nRowL
13860 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69  ogEst;   /* Esti
13870 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61  mated rows in ta
13880 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74  ble - from sqlit
13890 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f  e_stat1 table */
138a0 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52  .  LogEst szTabR
138b0 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d  ow;     /* Estim
138c0 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63  ated size of eac
138d0 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62  h table row in b
138e0 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ytes */.#ifdef S
138f0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53  QLITE_ENABLE_COS
13900 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63  TMULT.  LogEst c
13910 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20  ostMult;     /* 
13920 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20  Cost multiplier 
13930 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74  for using this t
13940 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  able */.#endif. 
13950 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20   u8 keyConf;    
13960 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f        /* What to
13970 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75   do in case of u
13980 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69  niqueness confli
13990 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23  ct on iPKey */.#
139a0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
139b0 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20  IT_ALTERTABLE.  
139c0 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74  int addColOffset
139d0 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69  ;    /* Offset i
139e0 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  n CREATE TABLE s
139f0 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77  tmt to add a new
13a00 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69   column */.#endi
13a10 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
13a20 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
13a30 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65  LE.  int nModule
13a40 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  Arg;      /* Num
13a50 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
13a60 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a   to the module *
13a70 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64  /.  char **azMod
13a80 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d  uleArg;  /* 0: m
13a90 6f 64 75 6c 65 20 31 3a 20 73 63 68 65 6d 61 20  odule 1: schema 
13aa0 32 3a 20 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e  2: vtab name 3..
13ab0 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56 54 61  .: args */.  VTa
13ac0 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20  ble *pVTable;   
13ad0 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61    /* List of VTa
13ae0 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a  ble objects. */.
13af0 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72  #endif.  Trigger
13b00 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a   *pTrigger;   /*
13b10 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   List of trigger
13b20 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68  s stored in pSch
13b30 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ema */.  Schema 
13b40 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  *pSchema;     /*
13b50 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e   Schema that con
13b60 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65  tains this table
13b70 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
13b80 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65  xtZombie;  /* Ne
13b90 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e  xt on the Parse.
13ba0 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20  pZombieTab list 
13bb0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
13bc0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
13bd0 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a  Table.tabFlags..
13be0 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64  **.** TF_OOOHidd
13bf0 65 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 74 61  en applies to ta
13c00 62 6c 65 73 20 6f 72 20 76 69 65 77 20 74 68 61  bles or view tha
13c10 74 20 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f  t have hidden co
13c20 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a  lumns that are.*
13c30 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f  * followed by no
13c40 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  n-hidden columns
13c50 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52  .  Example:  "CR
13c60 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
13c70 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74  LE x USING.** vt
13c80 61 62 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29  ab1(a HIDDEN, b)
13c90 3b 22 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69  ;".  Since "b" i
13ca0 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63  s a non-hidden c
13cb0 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73  olumn but "a" is
13cc0 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20   hidden,.** the 
13cd0 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74  TF_OOOHidden att
13ce0 72 69 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70  ribute would app
13cf0 6c 79 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e  ly in this case.
13d00 20 20 53 75 63 68 20 74 61 62 6c 65 73 20 72 65    Such tables re
13d10 71 75 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c  quire.** special
13d20 20 68 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67   handling during
13d30 20 49 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69   INSERT processi
13d40 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ng..*/.#define T
13d50 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20  F_Readonly      
13d60 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 52    0x0001    /* R
13d70 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20  ead-only system 
13d80 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
13d90 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20   TF_Ephemeral   
13da0 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a      0x0002    /*
13db0 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61   An ephemeral ta
13dc0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
13dd0 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20  F_HasPrimaryKey 
13de0 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54    0x0004    /* T
13df0 61 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61  able has a prima
13e00 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
13e10 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65  e TF_Autoincreme
13e20 6e 74 20 20 20 30 78 30 30 30 38 20 20 20 20 2f  nt   0x0008    /
13e30 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72  * Integer primar
13e40 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63  y key is autoinc
13e50 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  rement */.#defin
13e60 65 20 54 46 5f 48 61 73 53 74 61 74 31 20 20 20  e TF_HasStat1   
13e70 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f       0x0010    /
13e80 2a 20 6e 52 6f 77 4c 6f 67 45 73 74 20 73 65 74  * nRowLogEst set
13e90 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
13ea0 74 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  t1 */.#define TF
13eb0 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20  _WithoutRowid   
13ec0 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 4e 6f   0x0020    /* No
13ed0 20 72 6f 77 69 64 2e 20 20 50 52 49 4d 41 52 59   rowid.  PRIMARY
13ee0 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65 79 20   KEY is the key 
13ef0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4e 6f  */.#define TF_No
13f00 56 69 73 69 62 6c 65 52 6f 77 69 64 20 20 30 78  VisibleRowid  0x
13f10 30 30 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75 73  0040    /* No us
13f20 65 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77 69  er-visible "rowi
13f30 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65  d" column */.#de
13f40 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65  fine TF_OOOHidde
13f50 6e 20 20 20 20 20 20 20 30 78 30 30 38 30 20 20  n       0x0080  
13f60 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65    /* Out-of-Orde
13f70 72 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  r hidden columns
13f80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 53   */.#define TF_S
13f90 74 61 74 73 55 73 65 64 20 20 20 20 20 20 20 30  tatsUsed       0
13fa0 78 30 31 30 30 20 20 20 20 2f 2a 20 51 75 65 72  x0100    /* Quer
13fb0 79 20 70 6c 61 6e 6e 65 72 20 64 65 63 69 73 69  y planner decisi
13fc0 6f 6e 73 20 61 66 66 65 63 74 65 64 20 62 79 0a  ons affected by.
13fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ff0 20 20 20 20 20 2a 2a 20 49 6e 64 65 78 2e 61 69       ** Index.ai
14000 52 6f 77 4c 6f 67 45 73 74 5b 5d 20 76 61 6c 75  RowLogEst[] valu
14010 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  es */.#define TF
14020 5f 48 61 73 4e 6f 74 4e 75 6c 6c 20 20 20 20 20  _HasNotNull     
14030 20 30 78 30 32 30 30 20 20 20 20 2f 2a 20 43 6f   0x0200    /* Co
14040 6e 74 61 69 6e 73 20 4e 4f 54 20 4e 55 4c 4c 20  ntains NOT NULL 
14050 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
14060 64 65 66 69 6e 65 20 54 46 5f 53 68 61 64 6f 77  define TF_Shadow
14070 20 20 20 20 20 20 20 20 20 20 30 78 30 34 30 30            0x0400
14080 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
14090 61 20 73 68 61 64 6f 77 20 74 61 62 6c 65 20 2a  a shadow table *
140a0 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f  /../*.** Test to
140b0 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20   see whether or 
140c0 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20 61  not a table is a
140d0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
140e0 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65   This is.** done
140f0 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74   as a macro so t
14100 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f  hat it will be o
14110 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65  ptimized out whe
14120 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  n virtual.** tab
14130 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d  le support is om
14140 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62  itted from the b
14150 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  uild..*/.#ifndef
14160 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
14170 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
14180 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
14190 20 20 20 20 20 20 28 28 58 29 2d 3e 6e 4d 6f 64        ((X)->nMod
141a0 75 6c 65 41 72 67 29 0a 23 65 6c 73 65 0a 23 20  uleArg).#else.# 
141b0 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
141c0 6c 28 58 29 20 20 20 20 20 20 30 0a 23 65 6e 64  l(X)      0.#end
141d0 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
141e0 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
141f0 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68 69 64   a column is hid
14200 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61 72 79  den.  IsOrdinary
14210 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 0a 2a  HiddenColumn().*
14220 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  * only works for
14230 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74 61 62   non-virtual tab
14240 6c 65 73 20 28 6f 72 64 69 6e 61 72 79 20 74 61  les (ordinary ta
14250 62 6c 65 73 20 61 6e 64 20 76 69 65 77 73 29 20  bles and views) 
14260 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73  and is.** always
14270 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20 53 51   false unless SQ
14280 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
14290 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20 64 65  EN_COLUMNS is de
142a0 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a 20 49  fined.  The.** I
142b0 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 20  sHiddenColumn() 
142c0 6d 61 63 72 6f 20 69 73 20 67 65 6e 65 72 61 6c  macro is general
142d0 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23 69 66   purpose..*/.#if
142e0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
142f0 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
14300 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66 69 6e 65  LUMNS).#  define
14310 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
14320 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29  X)         (((X)
14330 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
14340 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
14350 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64  .#  define IsOrd
14360 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
14370 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46  n(X) (((X)->colF
14380 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48  lags & COLFLAG_H
14390 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 69 66  IDDEN)!=0).#elif
143a0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
143b0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
143c0 4c 45 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  LE).#  define Is
143d0 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
143e0 20 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63          (((X)->c
143f0 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
14400 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20  G_HIDDEN)!=0).# 
14410 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61   define IsOrdina
14420 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  ryHiddenColumn(X
14430 29 20 30 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ) 0.#else.#  def
14440 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
14450 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 30 0a  mn(X)         0.
14460 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69  #  define IsOrdi
14470 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
14480 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f  (X) 0.#endif.../
14490 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65  * Does the table
144a0 20 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f   have a rowid */
144b0 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69  .#define HasRowi
144c0 64 28 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e  d(X)     (((X)->
144d0 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69  tabFlags & TF_Wi
144e0 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a  thoutRowid)==0).
144f0 23 64 65 66 69 6e 65 20 56 69 73 69 62 6c 65 52  #define VisibleR
14500 6f 77 69 64 28 58 29 20 28 28 28 58 29 2d 3e 74  owid(X) (((X)->t
14510 61 62 46 6c 61 67 73 20 26 20 54 46 5f 4e 6f 56  abFlags & TF_NoV
14520 69 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d 30 29  isibleRowid)==0)
14530 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72  ../*.** Each for
14540 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
14550 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  int is an instan
14560 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
14570 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
14580 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b  *.** A foreign k
14590 65 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64  ey is associated
145a0 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73   with two tables
145b0 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61  .  The "from" ta
145c0 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61  ble is.** the ta
145d0 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
145e0 73 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  s the REFERENCES
145f0 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65   clause that cre
14600 61 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e  ates the foreign
14610 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74  .** key.  The "t
14620 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20  o" table is the 
14630 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61  table that is na
14640 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52  med in the REFER
14650 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a  ENCES clause..**
14660 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65   Consider this e
14670 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20  xample:.**.**   
14680 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65    CREATE TABLE e
14690 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49  x1(.**       a I
146a0 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
146b0 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49  EY,.**       b I
146c0 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e  NTEGER CONSTRAIN
146d0 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53  T fk1 REFERENCES
146e0 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29   ex2(x).**     )
146f0 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65  ;.**.** For fore
14700 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74  ign key "fk1", t
14710 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
14720 20 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74   "ex1" and the t
14730 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22  o-table is "ex2"
14740 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20  ..** Equivalent 
14750 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  names:.**.**    
14760 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63   from-table == c
14770 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20  hild-table.**   
14780 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20      to-table == 
14790 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a  parent-table.**.
147a0 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43  ** Each REFERENC
147b0 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61  ES clause genera
147c0 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  tes an instance 
147d0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
147e0 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68   structure.** wh
147f0 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20  ich is attached 
14800 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  to the from-tabl
14810 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65  e.  The to-table
14820 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20   need not exist 
14830 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d  when.** the from
14840 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65  -table is create
14850 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63  d.  The existenc
14860 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c  e of the to-tabl
14870 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64  e is not checked
14880 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74  ..**.** The list
14890 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20   of all parents 
148a0 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20  for child Table 
148b0 58 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70  X is held at X.p
148c0 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69  FKey..**.** A li
148d0 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72  st of all childr
148e0 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e  en for a table n
148f0 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69  amed Z (which mi
14900 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69  ght not even exi
14910 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69  st).** is held i
14920 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73  n Schema.fkeyHas
14930 68 20 77 69 74 68 20 61 20 68 61 73 68 20 6b 65  h with a hash ke
14940 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63  y of Z..*/.struc
14950 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65  t FKey {.  Table
14960 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20   *pFrom;     /* 
14970 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  Table containing
14980 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
14990 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69  clause (aka: Chi
149a0 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  ld) */.  FKey *p
149b0 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65  NextFrom;  /* Ne
149c0 78 74 20 46 4b 65 79 20 77 69 74 68 20 74 68 65  xt FKey with the
149d0 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20   same in pFrom. 
149e0 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70  Next parent of p
149f0 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a  From */.  char *
14a00 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  zTo;        /* N
14a10 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61  ame of table tha
14a20 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73  t the key points
14a30 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74   to (aka: Parent
14a40 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
14a50 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74  xtTo;    /* Next
14a60 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a   with the same z
14a70 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f  To. Next child o
14a80 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79  f zTo. */.  FKey
14a90 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a   *pPrevTo;    /*
14aa0 20 50 72 65 76 69 6f 75 73 20 77 69 74 68 20 74   Previous with t
14ab0 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20  he same zTo */. 
14ac0 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20   int nCol;      
14ad0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14ae0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
14af0 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20  key */.  /* EV: 
14b00 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f  R-30323-21917 */
14b10 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64  .  u8 isDeferred
14b20 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20  ;       /* True 
14b30 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68  if constraint ch
14b40 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72  ecking is deferr
14b50 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a  ed till COMMIT *
14b60 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32  /.  u8 aAction[2
14b70 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20  ];        /* ON 
14b80 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50  DELETE and ON UP
14b90 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65  DATE actions, re
14ba0 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20  spectively */.  
14bb0 54 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67  Trigger *apTrigg
14bc0 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72  er[2];/* Trigger
14bd0 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20  s for aAction[] 
14be0 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  actions */.  str
14bf0 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20  uct sColMap {   
14c00 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66     /* Mapping of
14c10 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f   columns in pFro
14c20 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  m to columns in 
14c30 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  zTo */.    int i
14c40 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20  From;           
14c50 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c   /* Index of col
14c60 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a  umn in pFrom */.
14c70 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20      char *zCol; 
14c80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
14c90 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a  e of column in z
14ca0 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65  To.  If NULL use
14cb0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a   PRIMARY KEY */.
14cc0 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20    } aCol[1];    
14cd0 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
14ce0 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66  ntry for each of
14cf0 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f   nCol columns */
14d00 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74  .};../*.** SQLit
14d10 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20  e supports many 
14d20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
14d30 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73  o resolve a cons
14d40 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e  traint.** error.
14d50 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65    ROLLBACK proce
14d60 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74  ssing means that
14d70 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
14d80 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65  olation.** cause
14d90 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  s the operation 
14da0 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61  in process to fa
14db0 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63  il and for the c
14dc0 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
14dd0 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c  on.** to be roll
14de0 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20  ed back.  ABORT 
14df0 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
14e00 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
14e10 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69  n process.** fai
14e20 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72  ls and any prior
14e30 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68   changes from th
14e40 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e  at one operation
14e50 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c   are backed out,
14e60 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e  .** but the tran
14e70 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72  saction is not r
14e80 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49  olled back.  FAI
14e90 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  L processing mea
14ea0 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f  ns that.** the o
14eb0 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  peration in prog
14ec0 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72  ress stops and r
14ed0 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20  eturns an error 
14ee0 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72  code.  But prior
14ef0 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20  .** changes due 
14f00 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  to the same oper
14f10 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61  ation are not ba
14f20 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20  cked out and no 
14f30 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75  rollback.** occu
14f40 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e  rs.  IGNORE mean
14f50 73 20 74 68 61 74 20 74 68 65 20 70 61 72 74 69  s that the parti
14f60 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63  cular row that c
14f70 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72  aused the constr
14f80 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73  aint.** error is
14f90 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72   not inserted or
14fa0 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65   updated.  Proce
14fb0 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
14fc0 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20  and no error.** 
14fd0 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45  is returned.  RE
14fe0 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74  PLACE means that
14ff0 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74   preexisting dat
15000 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20  abase rows that 
15010 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51  caused.** a UNIQ
15020 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  UE constraint vi
15030 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f  olation are remo
15040 76 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20  ved so that the 
15050 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a  new insert or.**
15060 20 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63   update can proc
15070 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  eed.  Processing
15080 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
15090 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72  o error is repor
150a0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52  ted..**.** RESTR
150b0 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e  ICT, SETNULL, an
150c0 64 20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e  d CASCADE action
150d0 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20  s apply only to 
150e0 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a  foreign keys..**
150f0 20 52 45 53 54 52 49 43 54 20 69 73 20 74 68 65   RESTRICT is the
15100 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66   same as ABORT f
15110 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72  or IMMEDIATE for
15120 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68  eign keys and th
15130 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c  e.** same as ROL
15140 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52  LBACK for DEFERR
15150 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c  ED keys.  SETNUL
15160 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  L means that the
15170 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
15180 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20  is set to NULL. 
15190 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74   CASCADE means t
151a0 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20  hat a DELETE or 
151b0 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a  UPDATE of the.**
151c0 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
151d0 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61  e row is propaga
151e0 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77  ted into the row
151f0 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a   that holds the.
15200 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a  ** foreign key..
15210 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
15220 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c  ing symbolic val
15230 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ues are used to 
15240 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79 70  record which typ
15250 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74  e.** of action t
15260 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69  o take..*/.#defi
15270 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30  ne OE_None     0
15280 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e     /* There is n
15290 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20  o constraint to 
152a0 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  check */.#define
152b0 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20   OE_Rollback 1  
152c0 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65   /* Fail the ope
152d0 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62  ration and rollb
152e0 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
152f0 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
15300 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f  E_Abort    2   /
15310 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67  * Back out chang
15320 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c  es but do no rol
15330 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f  lback transactio
15340 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
15350 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20  Fail     3   /* 
15360 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69  Stop the operati
15370 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c  on but leave all
15380 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a   prior changes *
15390 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e  /.#define OE_Ign
153a0 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e  ore   4   /* Ign
153b0 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44  ore the error. D
153c0 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53  o not do the INS
153d0 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
153e0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c  .#define OE_Repl
153f0 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65  ace  5   /* Dele
15400 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f  te existing reco
15410 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45  rd, then do INSE
15420 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  RT or UPDATE */.
15430 23 64 65 66 69 6e 65 20 4f 45 5f 55 70 64 61 74  #define OE_Updat
15440 65 20 20 20 36 20 20 20 2f 2a 20 50 72 6f 63 65  e   6   /* Proce
15450 73 73 20 61 73 20 61 20 44 4f 20 55 50 44 41 54  ss as a DO UPDAT
15460 45 20 69 6e 20 61 6e 20 75 70 73 65 72 74 20 2a  E in an upsert *
15470 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73  /.#define OE_Res
15480 74 72 69 63 74 20 37 20 20 20 2f 2a 20 4f 45 5f  trict 7   /* OE_
15490 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49  Abort for IMMEDI
154a0 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  ATE, OE_Rollback
154b0 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f   for DEFERRED */
154c0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e  .#define OE_SetN
154d0 75 6c 6c 20 20 38 20 20 20 2f 2a 20 53 65 74 20  ull  8   /* Set 
154e0 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
154f0 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f  value to NULL */
15500 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44  .#define OE_SetD
15510 66 6c 74 20 20 39 20 20 20 2f 2a 20 53 65 74 20  flt  9   /* Set 
15520 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
15530 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66  value to its def
15540 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ault */.#define 
15550 4f 45 5f 43 61 73 63 61 64 65 20 20 31 30 20 20  OE_Cascade  10  
15560 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63  /* Cascade the c
15570 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
15580 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 31  e OE_Default  11
15590 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72    /* Do whatever
155a0 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74   the default act
155b0 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  ion is */.../*.*
155c0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
155d0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
155e0 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
155f0 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74 0a  ed as the first.
15600 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  ** argument to s
15610 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d  qlite3VdbeKeyCom
15620 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65 64  pare and is used
15630 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 0a   to control the.
15640 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66  ** comparison of
15650 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b   the two index k
15660 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  eys..**.** Note 
15670 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b  that aSortOrder[
15680 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61  ] and aColl[] ha
15690 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74  ve nField+1 slot
156a0 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65  s.  There.** are
156b0 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f   nField slots fo
156c0 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  r the columns of
156d0 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f   an index then o
156e0 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a  ne extra slot.**
156f0 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61   for the rowid a
15700 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  t the end..*/.st
15710 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20  ruct KeyInfo {. 
15720 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20   u32 nRef;      
15730 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15740 66 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20  f references to 
15750 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a  this KeyInfo obj
15760 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ect */.  u8 enc;
15770 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15780 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20  Text encoding - 
15790 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  one of the SQLIT
157a0 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f  E_UTF* values */
157b0 0a 20 20 75 31 36 20 6e 4b 65 79 46 69 65 6c 64  .  u16 nKeyField
157c0 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
157d0 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20   of key columns 
157e0 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
157f0 20 20 75 31 36 20 6e 41 6c 6c 46 69 65 6c 64 3b    u16 nAllField;
15800 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 63        /* Total c
15810 6f 6c 75 6d 6e 73 2c 20 69 6e 63 6c 75 64 69 6e  olumns, includin
15820 67 20 6b 65 79 20 70 6c 75 73 20 6f 74 68 65 72  g key plus other
15830 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  s */.  sqlite3 *
15840 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
15850 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
15860 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61  ction */.  u8 *a
15870 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f  SortOrder;     /
15880 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72  * Sort order for
15890 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f   each column. */
158a0 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c  .  CollSeq *aCol
158b0 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  l[1];  /* Collat
158c0 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72  ing sequence for
158d0 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68   each term of th
158e0 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  e key */.};../*.
158f0 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 68  ** This object h
15900 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 77 68  olds a record wh
15910 69 63 68 20 68 61 73 20 62 65 65 6e 20 70 61 72  ich has been par
15920 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64  sed out into ind
15930 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69 65 6c 64  ividual.** field
15940 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  s, for the purpo
15950 73 65 73 20 6f 66 20 64 6f 69 6e 67 20 61 20 63  ses of doing a c
15960 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a  omparison..**.**
15970 20 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e 20   A record is an 
15980 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e 74  object that cont
15990 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
159a0 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61 2e   fields of data.
159b0 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65 20  .** Records are 
159c0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
159d0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74  e content of a t
159e0 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f 20  able row and to 
159f0 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79  store.** the key
15a00 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20 41   of an index.  A
15a10 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f   blob encoding o
15a20 66 20 61 20 72 65 63 6f 72 64 20 69 73 20 63 72  f a record is cr
15a30 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  eated by.** the 
15a40 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70  OP_MakeRecord op
15a50 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42 45  code of the VDBE
15a60 20 61 6e 64 20 69 73 20 64 69 73 61 73 73 65 6d   and is disassem
15a70 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f  bled by the.** O
15a80 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e  P_Column opcode.
15a90 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  .**.** An instan
15aa0 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  ce of this objec
15ab0 74 20 73 65 72 76 65 73 20 61 73 20 61 20 22 6b  t serves as a "k
15ac0 65 79 22 20 66 6f 72 20 64 6f 69 6e 67 20 61 20  ey" for doing a 
15ad0 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20  search on.** an 
15ae0 69 6e 64 65 78 20 62 2b 74 72 65 65 2e 20 54 68  index b+tree. Th
15af0 65 20 67 6f 61 6c 20 6f 66 20 74 68 65 20 73 65  e goal of the se
15b00 61 72 63 68 20 69 73 20 74 6f 20 66 69 6e 64 20  arch is to find 
15b10 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a  the entry that.*
15b20 2a 20 69 73 20 63 6c 6f 73 65 64 20 74 6f 20 74  * is closed to t
15b30 68 65 20 6b 65 79 20 64 65 73 63 72 69 62 65 64  he key described
15b40 20 62 79 20 74 68 69 73 20 6f 62 6a 65 63 74 2e   by this object.
15b50 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20 6d 69    This object mi
15b60 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74  ght hold.** just
15b70 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
15b80 20 6b 65 79 2e 20 20 54 68 65 20 6e 75 6d 62 65   key.  The numbe
15b90 72 20 6f 66 20 66 69 65 6c 64 73 20 69 73 20 67  r of fields is g
15ba0 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b 65 79 49  iven by.** pKeyI
15bb0 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a  nfo->nField..**.
15bc0 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72 32  ** The r1 and r2
15bd0 20 66 69 65 6c 64 73 20 61 72 65 20 74 68 65 20   fields are the 
15be0 76 61 6c 75 65 73 20 74 6f 20 72 65 74 75 72 6e  values to return
15bf0 20 69 66 20 74 68 69 73 20 6b 65 79 20 69 73 20   if this key is 
15c00 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 6f 72 20  less than.** or 
15c10 67 72 65 61 74 65 72 20 74 68 61 6e 20 61 20 6b  greater than a k
15c20 65 79 20 69 6e 20 74 68 65 20 62 74 72 65 65 2c  ey in the btree,
15c30 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
15c40 54 68 65 73 65 20 61 72 65 20 6e 6f 72 6d 61 6c  These are normal
15c50 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b 31 20  ly.** -1 and +1 
15c60 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 62 75  respectively, bu
15c70 74 20 6d 69 67 68 74 20 62 65 20 69 6e 76 65 72  t might be inver
15c80 74 65 64 20 74 6f 20 2b 31 20 61 6e 64 20 2d 31  ted to +1 and -1
15c90 20 69 66 20 74 68 65 20 62 2d 74 72 65 65 0a 2a   if the b-tree.*
15ca0 2a 20 69 73 20 69 6e 20 44 45 53 43 20 6f 72 64  * is in DESC ord
15cb0 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65  er..**.** The ke
15cc0 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e  y comparison fun
15cd0 63 74 69 6f 6e 73 20 61 63 74 75 61 6c 6c 79 20  ctions actually 
15ce0 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74 5f 72  return default_r
15cf0 63 20 77 68 65 6e 20 74 68 65 79 20 66 69 6e 64  c when they find
15d00 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73 20 63 6f  .** an equals co
15d10 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65 66 61 75  mparison.  defau
15d20 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 2d 31 2c  lt_rc can be -1,
15d30 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49 66 20 74   0, or +1.  If t
15d40 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d 75 6c 74  here are.** mult
15d50 69 70 6c 65 20 65 6e 74 72 69 65 73 20 69 6e 20  iple entries in 
15d60 74 68 65 20 62 2d 74 72 65 65 20 77 69 74 68 20  the b-tree with 
15d70 74 68 65 20 73 61 6d 65 20 6b 65 79 20 28 77 68  the same key (wh
15d80 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a  en only looking.
15d90 2a 2a 20 61 74 20 74 68 65 20 66 69 72 73 74 20  ** at the first 
15da0 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
15db0 73 2c 29 20 74 68 65 6e 20 64 65 66 61 75 6c 74  s,) then default
15dc0 5f 72 63 20 63 61 6e 20 62 65 20 73 65 74 20 74  _rc can be set t
15dd0 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61 75 73 65  o -1 to.** cause
15de0 20 74 68 65 20 73 65 61 72 63 68 20 74 6f 20 66   the search to f
15df0 69 6e 64 20 74 68 65 20 6c 61 73 74 20 6d 61 74  ind the last mat
15e00 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20 63 61 75  ch, or +1 to cau
15e10 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74 6f  se the search to
15e20 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20 66 69 72  .** find the fir
15e30 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20  st match..**.** 
15e40 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73  The key comparis
15e50 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c  on functions wil
15e60 6c 20 73 65 74 20 65 71 53 65 65 6e 20 74 6f 20  l set eqSeen to 
15e70 74 72 75 65 20 69 66 20 74 68 65 79 20 65 76 65  true if they eve
15e80 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20 65 71 75  r.** get and equ
15e90 61 6c 20 72 65 73 75 6c 74 73 20 77 68 65 6e 20  al results when 
15ea0 63 6f 6d 70 61 72 69 6e 67 20 74 68 69 73 20 73  comparing this s
15eb0 74 72 75 63 74 75 72 65 20 74 6f 20 61 20 62 2d  tructure to a b-
15ec0 74 72 65 65 20 72 65 63 6f 72 64 2e 0a 2a 2a 20  tree record..** 
15ed0 57 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 21  When default_rc!
15ee0 3d 30 2c 20 74 68 65 20 73 65 61 72 63 68 20 6d  =0, the search m
15ef0 69 67 68 74 20 65 6e 64 20 75 70 20 6f 6e 20 74  ight end up on t
15f00 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65 64 69  he record immedi
15f10 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f 72 65 20  ately.** before 
15f20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 20  the first match 
15f30 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61  or immediately a
15f40 66 74 65 72 20 74 68 65 20 6c 61 73 74 20 6d 61  fter the last ma
15f50 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20 65 71 53  tch.  The.** eqS
15f60 65 65 6e 20 66 69 65 6c 64 20 77 69 6c 6c 20 69  een field will i
15f70 6e 64 69 63 61 74 65 20 77 68 65 74 68 65 72 20  ndicate whether 
15f80 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20  or not an exact 
15f90 6d 61 74 63 68 20 65 78 69 73 74 73 20 69 6e 20  match exists in 
15fa0 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a  the.** b-tree..*
15fb0 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65  /.struct Unpacke
15fc0 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49  dRecord {.  KeyI
15fd0 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20  nfo *pKeyInfo;  
15fe0 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64  /* Collation and
15ff0 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f   sort-order info
16000 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d  rmation */.  Mem
16010 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *aMem;         
16020 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20   /* Values */.  
16030 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
16040 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16050 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65   entries in apMe
16060 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61  m[] */.  i8 defa
16070 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20  ult_rc;      /* 
16080 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c  Comparison resul
16090 74 20 69 66 20 6b 65 79 73 20 61 72 65 20 65 71  t if keys are eq
160a0 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43  ual */.  u8 errC
160b0 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ode;         /* 
160c0 45 72 72 6f 72 20 64 65 74 65 63 74 65 64 20 62  Error detected b
160d0 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65  y xRecordCompare
160e0 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d   (CORRUPT or NOM
160f0 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72 31 3b 20  EM) */.  i8 r1; 
16100 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16110 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
16120 69 66 20 28 6c 68 73 20 3c 20 72 68 73 29 20 2a  if (lhs < rhs) *
16130 2f 0a 20 20 69 38 20 72 32 3b 20 20 20 20 20 20  /.  i8 r2;      
16140 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
16150 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c   to return if (l
16160 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20 75  hs > rhs) */.  u
16170 38 20 65 71 53 65 65 6e 3b 20 20 20 20 20 20 20  8 eqSeen;       
16180 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e     /* True if an
16190 20 65 71 75 61 6c 69 74 79 20 63 6f 6d 70 61 72   equality compar
161a0 69 73 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65  ison has been se
161b0 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a  en */.};.../*.**
161c0 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20   Each SQL index 
161d0 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
161e0 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a  n memory by an.*
161f0 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
16200 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
16210 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  cture..**.** The
16220 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
16230 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 74  table that are t
16240 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61 72 65  o be indexed are
16250 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79   described.** by
16260 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20   the aiColumn[] 
16270 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74  field of this st
16280 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78  ructure.  For ex
16290 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a  ample, suppose.*
162a0 2a 20 77 65 20 68 61 76 65 20 74 68 65 20 66 6f  * we have the fo
162b0 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e  llowing table an
162c0 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20  d index:.**.**  
162d0 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
162e0 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69  Ex1(c1 int, c2 i
162f0 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a  nt, c3 text);.**
16300 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
16310 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c  X Ex2 ON Ex1(c3,
16320 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  c1);.**.** In th
16330 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72  e Table structur
16340 65 20 64 65 73 63 72 69 62 69 6e 67 20 45 78 31  e describing Ex1
16350 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73  , nCol==3 becaus
16360 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74  e there are.** t
16370 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  hree columns in 
16380 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74  the table.  In t
16390 68 65 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  he Index structu
163a0 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a  re describing.**
163b0 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32   Ex2, nColumn==2
163c0 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20   since 2 of the 
163d0 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31  3 columns of Ex1
163e0 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a   are indexed..**
163f0 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69   The value of ai
16400 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d  Column is {2, 0}
16410 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d  .  aiColumn[0]==
16420 32 20 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a  2 because the.**
16430 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f   first column to
16440 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 33 29   be indexed (c3)
16450 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
16460 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d   2 in Ex1.aCol[]
16470 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20  ..** The second 
16480 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
16490 65 78 65 64 20 28 63 31 29 20 68 61 73 20 61 6e  exed (c1) has an
164a0 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a   index of 0 in.*
164b0 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65  * Ex1.aCol[], he
164c0 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e  nce Ex2.aiColumn
164d0 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68  [1]==0..**.** Th
164e0 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20  e Index.onError 
164f0 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73  field determines
16500 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
16510 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75  the indexed colu
16520 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75  mns.** must be u
16530 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74 20 74  nique and what t
16540 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61 72 65  o do if they are
16550 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65   not.  When Inde
16560 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e  x.onError=OE_Non
16570 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74  e,.** it means t
16580 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69  his is not a uni
16590 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65  que index.  Othe
165a0 72 77 69 73 65 20 69 74 20 69 73 20 61 20 75 6e  rwise it is a un
165b0 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e  ique index.** an
165c0 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49  d the value of I
165d0 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64  ndex.onError ind
165e0 69 63 61 74 65 20 74 68 65 20 77 68 69 63 68 20  icate the which 
165f0 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
16600 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d  ion.** algorithm
16610 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65   to employ whene
16620 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69  ver an attempt i
16630 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74  s made to insert
16640 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a   a non-unique.**
16650 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20   element..**.** 
16660 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 20  While parsing a 
16670 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20  CREATE TABLE or 
16680 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74 61  CREATE INDEX sta
16690 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72 20  tement in order 
166a0 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 56  to.** generate V
166b0 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f 70 70  DBE code (as opp
166c0 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e 67 20  osed to parsing 
166d0 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20 61 6e  one read from an
166e0 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a   sqlite_master.*
166f0 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72 74 20  * table as part 
16700 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20 65 78  of parsing an ex
16710 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
16720 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73 69 65  schema), transie
16730 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20  nt instances.** 
16740 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
16750 65 20 6d 61 79 20 62 65 20 63 72 65 61 74 65 64  e may be created
16760 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
16770 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61  he Index.tnum va
16780 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65  riable is.** use
16790 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 61  d to store the a
167a0 64 64 72 65 73 73 20 6f 66 20 61 20 56 44 42 45  ddress of a VDBE
167b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f   instruction, no
167c0 74 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67  t a database pag
167d0 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74 20  e.** number (it 
167e0 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61 74  cannot - the dat
167f0 61 62 61 73 65 20 70 61 67 65 20 69 73 20 6e 6f  abase page is no
16800 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69  t allocated unti
16810 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20 70 72  l the VDBE.** pr
16820 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75 74 65  ogram is execute
16830 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72 74 54  d). See convertT
16840 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54 61 62  oWithoutRowidTab
16850 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73  le() for details
16860 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
16870 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  x {.  char *zNam
16880 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
16890 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69  * Name of this i
168a0 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61  ndex */.  i16 *a
168b0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
168c0 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75     /* Which colu
168d0 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79 20  mns are used by 
168e0 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74  this index.  1st
168f0 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73   is 0 */.  LogEs
16900 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20  t *aiRowLogEst; 
16910 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c      /* From ANAL
16920 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73  YZE: Est. rows s
16930 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68 20  elected by each 
16940 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c  column */.  Tabl
16950 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20  e *pTable;      
16960 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20       /* The SQL 
16970 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65  table being inde
16980 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  xed */.  char *z
16990 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20  ColAff;         
169a0 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
169b0 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
169c0 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
169d0 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65   */.  Index *pNe
169e0 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
169f0 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78  * The next index
16a00 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
16a10 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20   the same table 
16a20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
16a30 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a  hema;         /*
16a40 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
16a50 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  ng this index */
16a60 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
16a70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66  r;          /* f
16a80 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20  or each column: 
16a90 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73  True==DESC, Fals
16aa0 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 6f 6e 73  e==ASC */.  cons
16ab0 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b  t char **azColl;
16ac0 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
16ad0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
16ae0 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e  nce names for in
16af0 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  dex */.  Expr *p
16b00 50 61 72 74 49 64 78 57 68 65 72 65 3b 20 20 20  PartIdxWhere;   
16b10 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73    /* WHERE claus
16b20 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e  e for partial in
16b30 64 69 63 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c  dices */.  ExprL
16b40 69 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b 20 20  ist *aColExpr;  
16b50 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78      /* Column ex
16b60 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
16b70 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20  nt tnum;        
16b80 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61          /* DB Pa
16b90 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f  ge containing ro
16ba0 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  ot of this index
16bb0 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49   */.  LogEst szI
16bc0 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f  dxRow;         /
16bd0 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76 65 72  * Estimated aver
16be0 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20  age row size in 
16bf0 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  bytes */.  u16 n
16c00 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  KeyCol;         
16c10 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16c20 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67   columns forming
16c30 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31   the key */.  u1
16c40 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  6 nColumn;      
16c50 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16c60 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72   of columns stor
16c70 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ed in the index 
16c80 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b  */.  u8 onError;
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16ca0 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67   OE_Abort, OE_Ig
16cb0 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65  nore, OE_Replace
16cc0 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a  , or OE_None */.
16cd0 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78 54 79    unsigned idxTy
16ce0 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20 30 3a  pe:2;      /* 0:
16cf0 4e 6f 72 6d 61 6c 20 31 3a 55 4e 49 51 55 45 2c  Normal 1:UNIQUE,
16d00 20 32 3a 50 52 49 4d 41 52 59 20 4b 45 59 2c 20   2:PRIMARY KEY, 
16d10 33 3a 49 50 4b 20 2a 2f 0a 20 20 75 6e 73 69 67  3:IPK */.  unsig
16d20 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31  ned bUnordered:1
16d30 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  ;   /* Use this 
16d40 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20  index for == or 
16d50 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20  IN queries only 
16d60 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e  */.  unsigned un
16d70 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a  iqNotNull:1;  /*
16d80 20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20   True if UNIQUE 
16d90 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72  and NOT NULL for
16da0 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   all columns */.
16db0 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73    unsigned isRes
16dc0 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72  ized:1;    /* Tr
16dd0 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65  ue if resizeInde
16de0 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65  xObject() has be
16df0 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75  en called */.  u
16e00 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69  nsigned isCoveri
16e10 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  ng:1;   /* True 
16e20 69 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76  if this is a cov
16e30 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  ering index */. 
16e40 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70   unsigned noSkip
16e50 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20  Scan:1;   /* Do 
16e60 6e 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20 73  not try to use s
16e70 6b 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65  kip-scan if true
16e80 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 68   */.  unsigned h
16e90 61 73 53 74 61 74 31 3a 31 3b 20 20 20 20 20 2f  asStat1:1;     /
16ea0 2a 20 61 69 52 6f 77 4c 6f 67 45 73 74 20 76 61  * aiRowLogEst va
16eb0 6c 75 65 73 20 63 6f 6d 65 20 66 72 6f 6d 20 73  lues come from s
16ec0 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 20  qlite_stat1 */. 
16ed0 20 75 6e 73 69 67 6e 65 64 20 62 4e 6f 51 75 65   unsigned bNoQue
16ee0 72 79 3a 31 3b 20 20 20 20 20 2f 2a 20 44 6f 20  ry:1;     /* Do 
16ef0 6e 6f 74 20 75 73 65 20 74 68 69 73 20 69 6e 64  not use this ind
16f00 65 78 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 71  ex to optimize q
16f10 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 6e 73 69  ueries */.  unsi
16f20 67 6e 65 64 20 62 41 73 63 4b 65 79 42 75 67 3a  gned bAscKeyBug:
16f30 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  1;   /* True if 
16f40 74 68 65 20 62 62 61 37 62 36 39 66 39 38 34 39  the bba7b69f9849
16f50 62 35 62 66 20 62 75 67 20 61 70 70 6c 69 65 73  b5bf bug applies
16f60 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
16f70 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 20  E_ENABLE_STAT4. 
16f80 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20   int nSample;   
16f90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
16fa0 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
16fb0 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a  in aSample[] */.
16fc0 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c    int nSampleCol
16fd0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69  ;          /* Si
16fe0 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c  ze of IndexSampl
16ff0 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20  e.anEq[] and so 
17000 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  on */.  tRowcnt 
17010 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20 20 20  *aAvgEq;        
17020 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20   /* Average nEq 
17030 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20  values for keys 
17040 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a  not in aSample *
17050 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  /.  IndexSample 
17060 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20  *aSample;    /* 
17070 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c  Samples of the l
17080 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a  eft-most key */.
17090 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77    tRowcnt *aiRow
170a0 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f  Est;       /* No
170b0 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74  n-logarithmic st
170c0 61 74 31 20 64 61 74 61 20 66 6f 72 20 74 68 69  at1 data for thi
170d0 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f  s index */.  tRo
170e0 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20  wcnt nRowEst0;  
170f0 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67        /* Non-log
17100 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20  arithmic number 
17110 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69  of rows in the i
17120 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  ndex */.#endif. 
17130 20 42 69 74 6d 61 73 6b 20 63 6f 6c 4e 6f 74 49   Bitmask colNotI
17140 64 78 65 64 3b 20 20 20 20 20 2f 2a 20 30 20 66  dxed;     /* 0 f
17150 6f 72 20 75 6e 69 6e 64 65 78 65 64 20 63 6f 6c  or unindexed col
17160 75 6d 6e 73 20 69 6e 20 70 54 61 62 20 2a 2f 0a  umns in pTab */.
17170 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
17180 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64  d values for Ind
17190 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64  ex.idxType.*/.#d
171a0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
171b0 54 59 50 45 5f 41 50 50 44 45 46 20 20 20 20 20  TYPE_APPDEF     
171c0 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20   0   /* Created 
171d0 75 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44  using CREATE IND
171e0 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  EX */.#define SQ
171f0 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49  LITE_IDXTYPE_UNI
17200 51 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20  QUE      1   /* 
17210 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49  Implements a UNI
17220 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  QUE constraint *
17230 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
17240 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59  _IDXTYPE_PRIMARY
17250 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74  KEY  2   /* Is t
17260 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66  he PRIMARY KEY f
17270 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  or the table */.
17280 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
17290 44 58 54 59 50 45 5f 49 50 4b 20 20 20 20 20 20  DXTYPE_IPK      
172a0 20 20 20 33 20 20 20 2f 2a 20 49 4e 54 45 47 45     3   /* INTEGE
172b0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e  R PRIMARY KEY in
172c0 64 65 78 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72  dex */../* Retur
172d0 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
172e0 58 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b  X is a PRIMARY K
172f0 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  EY index */.#def
17300 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79  ine IsPrimaryKey
17310 49 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e  Index(X)  ((X)->
17320 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  idxType==SQLITE_
17330 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b  IDXTYPE_PRIMARYK
17340 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74  EY)../* Return t
17350 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69  rue if index X i
17360 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78  s a UNIQUE index
17370 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e   */.#define IsUn
17380 69 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20  iqueIndex(X)    
17390 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21    ((X)->onError!
173a0 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68  =OE_None)../* Th
173b0 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e  e Index.aiColumn
173c0 5b 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f  [] values are no
173d0 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65 20  rmally positive 
173e0 69 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a  integer.  But.**
173f0 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20   there are some 
17400 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20  negative values 
17410 74 68 61 74 20 68 61 76 65 20 73 70 65 63 69 61  that have specia
17420 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64  l meaning:.*/.#d
17430 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20  efine XN_ROWID  
17440 20 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20 49     (-1)     /* I
17450 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73  ndexed column is
17460 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64   the rowid */.#d
17470 65 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20 20  efine XN_EXPR   
17480 20 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20 49     (-2)     /* I
17490 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73  ndexed column is
174a0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a   an expression *
174b0 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61  /../*.** Each sa
174c0 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74  mple stored in t
174d0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20  he sqlite_stat4 
174e0 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
174f0 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a  nted in memory.*
17500 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74  * using a struct
17510 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65  ure of this type
17520 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  .  See documenta
17530 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20  tion at the top 
17540 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a  of the.** analyz
17550 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20  e.c source file 
17560 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
17570 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
17580 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
17590 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20  e {.  void *p;  
175a0 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
175b0 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65  er to sampled re
175c0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b  cord */.  int n;
175d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
175e0 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e  ize of record in
175f0 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77   bytes */.  tRow
17600 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a  cnt *anEq;    /*
17610 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
17620 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b  rows where the k
17630 65 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73  ey equals this s
17640 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
17650 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20  nt *anLt;    /* 
17660 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
17670 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73  ows where key is
17680 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
17690 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77  sample */.  tRow
176a0 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a  cnt *anDLt;   /*
176b0 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
176c0 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65  distinct keys le
176d0 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
176e0 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ple */.};../*.**
176f0 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
17700 20 74 6f 20 75 73 65 20 77 69 74 68 69 6e 20 74   to use within t
17710 68 65 20 66 6c 61 67 73 20 61 72 67 75 6d 65 6e  he flags argumen
17720 74 20 74 6f 20 73 71 6c 69 74 65 33 47 65 74 54  t to sqlite3GetT
17730 6f 6b 65 6e 28 29 2e 0a 2a 2f 0a 23 64 65 66 69  oken()..*/.#defi
17740 6e 65 20 53 51 4c 49 54 45 5f 54 4f 4b 45 4e 5f  ne SQLITE_TOKEN_
17750 51 55 4f 54 45 44 20 20 20 20 30 78 31 20 2f 2a  QUOTED    0x1 /*
17760 20 54 6f 6b 65 6e 20 69 73 20 61 20 71 75 6f 74   Token is a quot
17770 65 64 20 69 64 65 6e 74 69 66 69 65 72 2e 20 2a  ed identifier. *
17780 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
17790 5f 54 4f 4b 45 4e 5f 4b 45 59 57 4f 52 44 20 20  _TOKEN_KEYWORD  
177a0 20 30 78 32 20 2f 2a 20 54 6f 6b 65 6e 20 69 73   0x2 /* Token is
177b0 20 61 20 6b 65 79 77 6f 72 64 2e 20 2a 2f 0a 0a   a keyword. */..
177c0 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
177d0 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
177e0 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
177f0 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
17800 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
17810 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
17820 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
17830 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
17840 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 74  .** The memory t
17850 68 61 74 20 22 7a 22 20 70 6f 69 6e 74 73 20 74  hat "z" points t
17860 6f 20 69 73 20 6f 77 6e 65 64 20 62 79 20 6f 74  o is owned by ot
17870 68 65 72 20 6f 62 6a 65 63 74 73 2e 20 20 54 61  her objects.  Ta
17880 6b 65 20 63 61 72 65 0a 2a 2a 20 74 68 61 74 20  ke care.** that 
17890 74 68 65 20 6f 77 6e 65 72 20 6f 66 20 74 68 65  the owner of the
178a0 20 22 7a 22 20 73 74 72 69 6e 67 20 64 6f 65 73   "z" string does
178b0 20 6e 6f 74 20 64 65 61 6c 6c 6f 63 61 74 65 20   not deallocate 
178c0 74 68 65 20 73 74 72 69 6e 67 20 62 65 66 6f 72  the string befor
178d0 65 0a 2a 2a 20 74 68 65 20 54 6f 6b 65 6e 20 67  e.** the Token g
178e0 6f 65 73 20 6f 75 74 20 6f 66 20 73 63 6f 70 65  oes out of scope
178f0 21 20 20 56 65 72 79 20 6f 66 74 65 6e 2c 20 74  !  Very often, t
17900 68 65 20 22 7a 22 20 70 6f 69 6e 74 73 20 74 6f  he "z" points to
17910 20 73 6f 6d 65 20 70 6c 61 63 65 0a 2a 2a 20 69   some place.** i
17920 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
17930 74 68 65 20 50 61 72 73 65 2e 7a 53 71 6c 20 74  the Parse.zSql t
17940 65 78 74 2e 20 20 42 75 74 20 69 74 20 6d 69 67  ext.  But it mig
17950 68 74 20 61 6c 73 6f 20 70 6f 69 6e 74 20 74 6f  ht also point to
17960 20 61 0a 2a 2a 20 73 74 61 74 69 63 20 73 74 72   a.** static str
17970 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ing..*/.struct T
17980 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63  oken {.  const c
17990 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54  har *z;     /* T
179a0 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e  ext of the token
179b0 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d  .  Not NULL-term
179c0 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73  inated! */.  uns
179d0 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20  igned int n;    
179e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61  /* Number of cha
179f0 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20  racters in this 
17a00 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  token */.};../*.
17a10 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
17a20 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
17a30 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
17a40 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
17a50 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
17a60 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68   for a SELECT th
17a70 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72  at contains aggr
17a80 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e  egate functions.
17a90 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f  .**.** If Expr.o
17aa0 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  p==TK_AGG_COLUMN
17ab0 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   or TK_AGG_FUNCT
17ac0 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41  ION then Expr.pA
17ad0 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70  ggInfo is a.** p
17ae0 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
17af0 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45  tructure.  The E
17b00 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c  xpr.iColumn fiel
17b10 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69  d is the index i
17b20 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f  n.** AggInfo.aCo
17b30 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61  l[] or AggInfo.a
17b40 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d  Func[] of inform
17b50 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
17b60 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
17b70 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a   for that node..
17b80 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47  **.** AggInfo.pG
17b90 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e  roupBy and AggIn
17ba0 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70  fo.aFunc.pExpr p
17bb0 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77  oint to fields w
17bc0 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69  ithin the.** ori
17bd0 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72  ginal Select str
17be0 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63  ucture that desc
17bf0 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54  ribes the SELECT
17c00 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
17c10 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20  se.** fields do 
17c20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66  not need to be f
17c30 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f  reed when deallo
17c40 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e  cating the AggIn
17c50 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  fo structure..*/
17c60 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20  .struct AggInfo 
17c70 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64  {.  u8 directMod
17c80 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  e;          /* D
17c90 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20  irect rendering 
17ca0 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20  mode means take 
17cb0 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20  data directly.  
17cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cd0 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20          ** from 
17ce0 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61  source tables ra
17cf0 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61  ther than from a
17d00 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20  ccumulators */. 
17d10 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64   u8 useSortingId
17d20 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64  x;       /* In d
17d30 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65  irect mode, refe
17d40 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e  rence the sortin
17d50 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20  g index rather. 
17d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d70 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e           ** than
17d80 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
17d90 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  e */.  int sorti
17da0 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f  ngIdx;         /
17db0 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
17dc0 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  of the sorting i
17dd0 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  ndex */.  int so
17de0 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20  rtingIdxPTab;   
17df0 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
17e00 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62  er of pseudo-tab
17e10 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72  le */.  int nSor
17e20 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  tingColumn;     
17e30 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
17e40 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74  umns in the sort
17e50 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
17e60 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b  nt mnReg, mxReg;
17e70 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20         /* Range 
17e80 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
17e90 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20  ocated for aCol 
17ea0 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45  and aFunc */.  E
17eb0 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
17ec0 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72  y;     /* The gr
17ed0 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f  oup by clause */
17ee0 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
17ef0 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f  o_col {    /* Fo
17f00 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73  r each column us
17f10 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62  ed in source tab
17f20 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  les */.    Table
17f30 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
17f40 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61      /* Source ta
17f50 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
17f60 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
17f70 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
17f80 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72  mber of the sour
17f90 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
17fa0 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  int iColumn;    
17fb0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75           /* Colu
17fc0 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e  mn number within
17fd0 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
17fe0 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f  e */.    int iSo
17ff0 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  rterColumn;     
18000 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
18010 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  er in the sortin
18020 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69  g index */.    i
18030 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
18040 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
18050 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
18060 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
18070 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  tor */.    Expr 
18080 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
18090 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69      /* The origi
180a0 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  nal expression *
180b0 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69  /.  } *aCol;.  i
180c0 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt nColumn;     
180d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
180e0 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73   of used entries
180f0 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20   in aCol[] */.  
18100 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72  int nAccumulator
18110 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
18120 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61  r of columns tha
18130 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74  t show through t
18140 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20  o the output..  
18150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18160 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74          ** Addit
18170 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72  ional columns ar
18180 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70  e used only as p
18190 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20  arameters to.   
181a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181b0 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67         ** aggreg
181c0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
181d0 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
181e0 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f  o_func {   /* Fo
181f0 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65  r each aggregate
18200 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
18210 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
18220 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
18230 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67  ression encoding
18240 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
18250 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46  .    FuncDef *pF
18260 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  unc;          /*
18270 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66   The aggregate f
18280 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  unction implemen
18290 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  tation */.    in
182a0 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
182b0 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
182c0 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
182d0 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
182e0 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44  or */.    int iD
182f0 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20  istinct;        
18300 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20     /* Ephemeral 
18310 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e  table used to en
18320 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a  force DISTINCT *
18330 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20  /.  } *aFunc;.  
18340 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20  int nFunc;      
18350 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18360 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
18370 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f  aFunc[] */.};../
18380 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70  *.** The datatyp
18390 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67  e ynVar is a sig
183a0 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74  ned integer, eit
183b0 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32  her 16-bit or 32
183c0 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79  -bit..** Usually
183d0 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20   it is 16-bits. 
183e0 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d   But if SQLITE_M
183f0 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
18400 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a  ER is greater.**
18410 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68   than 32767 we h
18420 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33  ave to make it 3
18430 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69  2-bit.  16-bit i
18440 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61  s preferred beca
18450 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c  use.** it uses l
18460 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68  ess memory in th
18470 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77  e Expr object, w
18480 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65  hich is a big me
18490 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20  mory user.** in 
184a0 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74  systems with lot
184b0 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74  s of prepared st
184c0 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66  atements.  And f
184d0 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  ew applications.
184e0 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61  ** need more tha
184f0 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30  n about 10 or 20
18500 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74   variables.  But
18510 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73   some extreme us
18520 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68  ers want.** to h
18530 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61  ave prepared sta
18540 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65  tements with ove
18550 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65  r 32767 variable
18560 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a  s, and for them.
18570 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73  ** the option is
18580 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63   available (at c
18590 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f  ompile-time)..*/
185a0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
185b0 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c  VARIABLE_NUMBER<
185c0 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69  =32767.typedef i
185d0 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a  16 ynVar;.#else.
185e0 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61  typedef int ynVa
185f0 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  r;.#endif../*.**
18600 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e   Each node of an
18610 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
18620 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73  he parse tree is
18630 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
18640 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
18650 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70  e..**.** Expr.op
18660 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20   is the opcode. 
18670 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73  The integer pars
18680 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61  er token codes a
18690 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20  re reused.** as 
186a0 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f  opcodes here. Fo
186b0 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70  r example, the p
186c0 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b  arser defines TK
186d0 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  _GE to be an int
186e0 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70  eger.** code rep
186f0 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e  resenting the ">
18700 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69  =" operator. Thi
18710 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63  s same integer c
18720 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a  ode is reused.**
18730 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68   to represent th
18740 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f  e greater-than-o
18750 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61  r-equal-to opera
18760 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65  tor in the expre
18770 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a  ssion.** tree..*
18780 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
18790 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
187a0 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54   literal (TK_INT
187b0 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20  EGER, TK_FLOAT, 
187c0 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54  TK_BLOB,.** or T
187d0 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20  K_STRING), then 
187e0 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
187f0 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20  ins the text of 
18800 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e  the SQL literal.
18810 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   If.** the expre
18820 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61  ssion is a varia
18830 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45  ble (TK_VARIABLE
18840 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
18850 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a  en contains the.
18860 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  ** variable name
18870 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68  . Finally, if th
18880 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
18890 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  an SQL function 
188a0 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a  (TK_FUNCTION),.*
188b0 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  * then Expr.toke
188c0 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e  n contains the n
188d0 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
188e0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ion..**.** Expr.
188f0 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e  pRight and Expr.
18900 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65  pLeft are the le
18910 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62  ft and right sub
18920 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61  expressions of a
18930 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61  .** binary opera
18940 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62  tor. Either or b
18950 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  oth may be NULL.
18960 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c  .**.** Expr.x.pL
18970 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66  ist is a list of
18980 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68   arguments if th
18990 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
189a0 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c  an SQL function,
189b0 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65  .** a CASE expre
189c0 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65  ssion or an IN e
189d0 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
189e0 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
189f0 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a  (<y>, <z>...)"..
18a00 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  ** Expr.x.pSelec
18a10 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65  t is used if the
18a20 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
18a30 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61   sub-select or a
18a40 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a  n expression of.
18a50 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  ** the form "<lh
18a60 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  s> IN (SELECT ..
18a70 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78  .)". If the EP_x
18a80 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20  IsSelect bit is 
18a90 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78  set in the.** Ex
18aa0 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
18ab0 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  hen Expr.x.pSele
18ac0 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68  ct is valid. Oth
18ad0 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70  erwise, Expr.x.p
18ae0 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64  List is.** valid
18af0 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65  ..**.** An expre
18b00 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
18b10 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65  m ID or ID.ID re
18b20 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  fers to a column
18b30 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   in a table..** 
18b40 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73  For such express
18b50 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73  ions, Expr.op is
18b60 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d   set to TK_COLUM
18b70 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c  N and Expr.iTabl
18b80 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65  e is.** the inte
18b90 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ger cursor numbe
18ba0 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73  r of a VDBE curs
18bb0 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
18bc0 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a  hat table and.**
18bd0 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73   Expr.iColumn is
18be0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   the column numb
18bf0 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  er for the speci
18c00 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20  fic column.  If 
18c10 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  the.** expressio
18c20 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72  n is used as a r
18c30 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72  esult in an aggr
18c40 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68  egate SELECT, th
18c50 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
18c60 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69  is also stored i
18c70 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20  n the Expr.iAgg 
18c80 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67  column in the ag
18c90 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a  gregate so that.
18ca0 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63  ** it can be acc
18cb0 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20  essed after all 
18cc0 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63  aggregates are c
18cd0 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  omputed..**.** I
18ce0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
18cf0 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76   is an unbound v
18d00 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28  ariable marker (
18d10 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a  a question mark.
18d20 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27  ** character '?'
18d30 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
18d40 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45   SQL) then the E
18d50 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73  xpr.iTable holds
18d60 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75   the index.** nu
18d70 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61  mber for that va
18d80 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  riable..**.** If
18d90 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
18da0 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68  is a subquery th
18db0 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  en Expr.iColumn 
18dc0 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
18dd0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  .** register num
18de0 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ber containing t
18df0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
18e00 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74   subquery.  If t
18e10 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67  he.** subquery g
18e20 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  ives a constant 
18e30 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61  result, then iTa
18e40 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74  ble is -1.  If t
18e50 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67  he subquery.** g
18e60 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74  ives a different
18e70 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65   answer at diffe
18e80 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e  rent times durin
18e90 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63  g statement proc
18ea0 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69  essing.** then i
18eb0 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64  Table is the add
18ec0 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75  ress of a subrou
18ed0 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74  tine that comput
18ee0 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  es the subquery.
18ef0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78  .**.** If the Ex
18f00 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50  pr is of type OP
18f10 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65  _Column, and the
18f20 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c   table it is sel
18f30 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69  ecting from.** i
18f40 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f  s a disk table o
18f50 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73  r the "old.*" ps
18f60 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e  eudo-table, then
18f70 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20   pTab points to 
18f80 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
18f90 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e  ding table defin
18fa0 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c  ition..**.** ALL
18fb0 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a  OCATION NOTES:.*
18fc0 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74  *.** Expr object
18fd0 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20  s can use a lot 
18fe0 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  of memory space 
18ff0 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65  in database sche
19000 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20  ma.  To.** help 
19010 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65  reduce memory re
19020 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65  quirements, some
19030 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62  times an Expr ob
19040 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20  ject will be.** 
19050 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20  truncated.  And 
19060 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75  to reduce the nu
19070 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61  mber of memory a
19080 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65  llocations, some
19090 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20  times.** two or 
190a0 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74  more Expr object
190b0 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  s will be stored
190c0 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d   in a single mem
190d0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a  ory allocation,.
190e0 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  ** together with
190f0 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72   Expr.zToken str
19100 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ings..**.** If t
19110 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e  he EP_Reduced an
19120 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  d EP_TokenOnly f
19130 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65  lags are set whe
19140 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a  n.** an Expr obj
19150 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64  ect is truncated
19160 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63  .  When EP_Reduc
19170 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ed is set, then 
19180 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64  all.** the child
19190 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e   Expr objects in
191a0 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20   the Expr.pLeft 
191b0 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20  and Expr.pRight 
191c0 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20  subtrees.** are 
191d0 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e  contained within
191e0 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79   the same memory
191f0 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f   allocation.  No
19200 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61  te, however, tha
19210 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65  t.** the subtree
19220 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73  s in Expr.x.pLis
19230 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c  t or Expr.x.pSel
19240 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73  ect are always s
19250 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c  eparately.** all
19260 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65  ocated, regardle
19270 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
19280 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20   not EP_Reduced 
19290 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63  is set..*/.struc
192a0 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70  t Expr {.  u8 op
192b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
192c0 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70    /* Operation p
192d0 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73  erformed by this
192e0 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20   node */.  char 
192f0 61 66 66 45 78 70 72 3b 20 20 20 20 20 20 20 20  affExpr;        
19300 20 20 2f 2a 20 61 66 66 69 6e 69 74 79 2c 20 6f    /* affinity, o
19310 72 20 52 41 49 53 45 20 74 79 70 65 20 2a 2f 0a  r RAISE type */.
19320 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20    u32 flags;    
19330 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
19340 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a  ous flags.  EP_*
19350 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
19360 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72  union {.    char
19370 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20   *zToken;       
19380 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75     /* Token valu
19390 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74  e. Zero terminat
193a0 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20  ed and dequoted 
193b0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75  */.    int iValu
193c0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
193d0 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e   Non-negative in
193e0 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45  teger value if E
193f0 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20  P_IntValue */.  
19400 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } u;..  /* If th
19410 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
19420 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
19430 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
19440 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
19450 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
19460 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
19470 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
19480 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
19490 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
194a0 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
194b0 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
194c0 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a  malfunction..  *
194d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
194e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
194f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19500 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19510 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70  ****/..  Expr *p
19520 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20  Left;           
19530 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20  /* Left subnode 
19540 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68  */.  Expr *pRigh
19550 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  t;          /* R
19560 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  ight subnode */.
19570 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78    union {.    Ex
19580 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20  prList *pList;  
19590 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45     /* op = IN, E
195a0 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43  XISTS, SELECT, C
195b0 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42  ASE, FUNCTION, B
195c0 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65  ETWEEN */.    Se
195d0 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
195e0 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65     /* EP_xIsSele
195f0 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20  ct and op = IN, 
19600 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a  EXISTS, SELECT *
19610 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49  /.  } x;..  /* I
19620 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
19630 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
19640 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
19650 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
19660 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
19670 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
19680 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
19690 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
196a0 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
196b0 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
196c0 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
196d0 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
196e0 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
196f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19700 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19710 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19720 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c  ******/..#if SQL
19730 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
19740 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67  TH>0.  int nHeig
19750 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ht;           /*
19760 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74   Height of the t
19770 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68  ree headed by th
19780 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  is node */.#endi
19790 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20  f.  int iTable; 
197a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
197b0 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20  _COLUMN: cursor 
197c0 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20  number of table 
197d0 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20  holding column. 
197e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197f0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45          ** TK_RE
19800 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72  GISTER: register
19810 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20   number.        
19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19830 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20   ** TK_TRIGGER: 
19840 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f  1 -> new, 0 -> o
19850 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ld.             
19860 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45              ** E
19870 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34  P_Unlikely:  134
19880 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b  217728 times lik
19890 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20 20 20 20  elihood.        
198a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198b0 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 3a 20 31   ** TK_SELECT: 1
198c0 73 74 20 72 65 67 69 73 74 65 72 20 6f 66 20 72  st register of r
198d0 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a  esult vector */.
198e0 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b    ynVar iColumn;
198f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
19900 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e  OLUMN: column in
19910 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77  dex.  -1 for row
19920 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  id..            
19930 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
19940 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72  TK_VARIABLE: var
19950 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c  iable number (al
19960 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20 20 20 20  ways >= 1)..    
19970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19980 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43       ** TK_SELEC
19990 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  T_COLUMN: column
199a0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 76   of the result v
199b0 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31 36 20 69  ector */.  i16 i
199c0 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Agg;            
199d0 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79    /* Which entry
199e0 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43   in pAggInfo->aC
199f0 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b  ol[] or ->aFunc[
19a00 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68  ] */.  i16 iRigh
19a10 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a  tJoinTable;   /*
19a20 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c   If EP_FromJoin,
19a30 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65   the right table
19a40 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a   of the join */.
19a50 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20    u8 op2;       
19a60 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52           /* TK_R
19a70 45 47 49 53 54 45 52 2f 54 4b 5f 54 52 55 54 48  EGISTER/TK_TRUTH
19a80 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65  : original value
19a90 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20   of Expr.op.    
19aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ab0 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d       ** TK_COLUM
19ac0 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  N: the value of 
19ad0 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e  p5 for OP_Column
19ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19af0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
19b00 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65  AGG_FUNCTION: ne
19b10 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20  sting depth */. 
19b20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
19b30 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20  fo;     /* Used 
19b40 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  by TK_AGG_COLUMN
19b50 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43   and TK_AGG_FUNC
19b60 54 49 4f 4e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  TION */.  union 
19b70 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  {.    Table *pTa
19b80 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  b;           /* 
19b90 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 54 61 62 6c 65  TK_COLUMN: Table
19ba0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 63 6f 6c 75   containing colu
19bb0 6d 6e 2e 20 43 61 6e 20 62 65 20 4e 55 4c 4c 0a  mn. Can be NULL.
19bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bd0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 6f             ** fo
19be0 72 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e  r a column of an
19bf0 20 69 6e 64 65 78 20 6f 6e 20 61 6e 20 65 78 70   index on an exp
19c00 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 57  ression */.    W
19c10 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20  indow *pWin;    
19c20 20 20 20 20 20 20 2f 2a 20 45 50 5f 57 69 6e 46        /* EP_WinF
19c30 75 6e 63 3a 20 57 69 6e 64 6f 77 2f 46 69 6c 74  unc: Window/Filt
19c40 65 72 20 64 65 66 6e 20 66 6f 72 20 61 20 66 75  er defn for a fu
19c50 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 73 74  nction */.    st
19c60 72 75 63 74 20 7b 20 20 20 20 20 20 20 20 20 20  ruct {          
19c70 20 20 20 20 20 2f 2a 20 54 4b 5f 49 4e 2c 20 54       /* TK_IN, T
19c80 4b 5f 53 45 4c 45 43 54 2c 20 61 6e 64 20 54 4b  K_SELECT, and TK
19c90 5f 45 58 49 53 54 53 20 2a 2f 0a 20 20 20 20 20  _EXISTS */.     
19ca0 20 69 6e 74 20 69 41 64 64 72 3b 20 20 20 20 20   int iAddr;     
19cb0 20 20 20 20 20 20 20 20 2f 2a 20 53 75 62 72 6f          /* Subro
19cc0 75 74 69 6e 65 20 65 6e 74 72 79 20 61 64 64 72  utine entry addr
19cd0 65 73 73 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74  ess */.      int
19ce0 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 20   regReturn;     
19cf0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
19d00 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 72 65 74  used to hold ret
19d10 75 72 6e 20 61 64 64 72 65 73 73 20 2a 2f 0a 20  urn address */. 
19d20 20 20 20 7d 20 73 75 62 3b 0a 20 20 7d 20 79 3b     } sub;.  } y;
19d30 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
19d40 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65  ollowing are the
19d50 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74   meanings of bit
19d60 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  s in the Expr.fl
19d70 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 20 56 61  ags field..** Va
19d80 6c 75 65 20 72 65 73 74 72 69 63 74 69 6f 6e 73  lue restrictions
19d90 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  :.**.**         
19da0 20 45 50 5f 41 67 67 20 3d 3d 20 4e 43 5f 48 61   EP_Agg == NC_Ha
19db0 73 41 67 67 20 3d 3d 20 53 46 5f 48 61 73 41 67  sAgg == SF_HasAg
19dc0 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 45 50  g.**          EP
19dd0 5f 57 69 6e 20 3d 3d 20 4e 43 5f 48 61 73 57 69  _Win == NC_HasWi
19de0 6e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n.*/.#define EP_
19df0 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30  FromJoin  0x0000
19e00 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73  01 /* Originates
19e10 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61   in ON/USING cla
19e20 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69  use of outer joi
19e30 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
19e40 44 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30  Distinct  0x0000
19e50 30 32 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  02 /* Aggregate 
19e60 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49  function with DI
19e70 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a  STINCT keyword *
19e80 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 48 61 73  /.#define EP_Has
19e90 46 75 6e 63 20 20 20 30 78 30 30 30 30 30 34 20  Func   0x000004 
19ea0 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  /* Contains one 
19eb0 6f 72 20 6d 6f 72 65 20 66 75 6e 63 74 69 6f 6e  or more function
19ec0 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64 20 2a 2f  s of any kind */
19ed0 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 69 78 65  .#define EP_Fixe
19ee0 64 43 6f 6c 20 20 30 78 30 30 30 30 30 38 20 2f  dCol  0x000008 /
19ef0 2a 20 54 4b 5f 43 6f 6c 75 6d 6e 20 77 69 74 68  * TK_Column with
19f00 20 61 20 6b 6e 6f 77 6e 20 66 69 78 65 64 20 76   a known fixed v
19f10 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alue */.#define 
19f20 45 50 5f 41 67 67 20 20 20 20 20 20 20 30 78 30  EP_Agg       0x0
19f30 30 30 30 31 30 20 2f 2a 20 43 6f 6e 74 61 69 6e  00010 /* Contain
19f40 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  s one or more ag
19f50 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
19f60 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
19f70 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30 30  VarSelect 0x0000
19f80 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73  20 /* pSelect is
19f90 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74   correlated, not
19fa0 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65   constant */.#de
19fb0 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65  fine EP_DblQuote
19fc0 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74 6f  d 0x000040 /* to
19fd0 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e  ken.z was origin
19fe0 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f  ally in "..." */
19ff0 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69  .#define EP_Infi
1a000 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20 2f  xFunc 0x000080 /
1a010 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e  * True for an in
1a020 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49  fix function: LI
1a030 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f  KE, GLOB, etc */
1a040 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c  .#define EP_Coll
1a050 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20 2f  ate   0x000100 /
1a060 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
1a070 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65  a TK_COLLATE ope
1a080 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  rator */.#define
1a090 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30 78   EP_Generic   0x
1a0a0 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65  000200 /* Ignore
1a0b0 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66 69   COLLATE or affi
1a0c0 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72 65  nity on this tre
1a0d0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
1a0e0 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30 34  IntValue  0x0004
1a0f0 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61  00 /* Integer va
1a100 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  lue contained in
1a110 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65   u.iValue */.#de
1a120 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63  fine EP_xIsSelec
1a130 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e  t 0x000800 /* x.
1a140 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
1a150 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c   (otherwise x.pL
1a160 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69  ist is) */.#defi
1a170 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20  ne EP_Skip      
1a180 30 78 30 30 31 30 30 30 20 2f 2a 20 4f 70 65 72  0x001000 /* Oper
1a190 61 74 6f 72 20 64 6f 65 73 20 6e 6f 74 20 63 6f  ator does not co
1a1a0 6e 74 72 69 62 75 74 65 20 74 6f 20 61 66 66 69  ntribute to affi
1a1b0 6e 69 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nity */.#define 
1a1c0 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78 30  EP_Reduced   0x0
1a1d0 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74  02000 /* Expr st
1a1e0 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43 45  ruct EXPR_REDUCE
1a1f0 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  DSIZE bytes only
1a200 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54   */.#define EP_T
1a210 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30  okenOnly 0x00400
1a220 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74  0 /* Expr struct
1a230 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
1a240 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a  IZE bytes only *
1a250 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 57 69 6e  /.#define EP_Win
1a260 20 20 20 20 20 20 20 30 78 30 30 38 30 30 30 20         0x008000 
1a270 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 77 69 6e 64  /* Contains wind
1a280 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  ow functions */.
1a290 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f  #define EP_MemTo
1a2a0 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f 2a  ken  0x010000 /*
1a2b0 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33   Need to sqlite3
1a2c0 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54  DbFree() Expr.zT
1a2d0 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oken */.#define 
1a2e0 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78 30  EP_NoReduce  0x0
1a2f0 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20  20000 /* Cannot 
1a300 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 74  EXPRDUP_REDUCE t
1a310 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65 66  his Expr */.#def
1a320 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20  ine EP_Unlikely 
1a330 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c   0x040000 /* unl
1a340 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c  ikely() or likel
1a350 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e  ihood() function
1a360 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
1a370 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30 30  onstFunc 0x08000
1a380 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46 55  0 /* A SQLITE_FU
1a390 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20 5f  NC_CONSTANT or _
1a3a0 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f 6e  SLOCHNG function
1a3b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
1a3c0 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30 30  anBeNull 0x10000
1a3d0 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c  0 /* Can be null
1a3e0 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c   despite NOT NUL
1a3f0 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
1a400 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71 75  #define EP_Subqu
1a410 65 72 79 20 20 30 78 32 30 30 30 30 30 20 2f 2a  ery  0x200000 /*
1a420 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61   Tree contains a
1a430 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72 61   TK_SELECT opera
1a440 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  tor */.#define E
1a450 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78 34 30  P_Alias     0x40
1a460 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20 61 6c  0000 /* Is an al
1a470 69 61 73 20 66 6f 72 20 61 20 72 65 73 75 6c 74  ias for a result
1a480 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23   set column */.#
1a490 64 65 66 69 6e 65 20 45 50 5f 4c 65 61 66 20 20  define EP_Leaf  
1a4a0 20 20 20 20 30 78 38 30 30 30 30 30 20 2f 2a 20      0x800000 /* 
1a4b0 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e 70 52 69  Expr.pLeft, .pRi
1a4c0 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65 63 74 20  ght, .u.pSelect 
1a4d0 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66  all NULL */.#def
1a4e0 69 6e 65 20 45 50 5f 57 69 6e 46 75 6e 63 20 20  ine EP_WinFunc  
1a4f0 30 78 31 30 30 30 30 30 30 20 2f 2a 20 54 4b 5f  0x1000000 /* TK_
1a500 46 55 4e 43 54 49 4f 4e 20 77 69 74 68 20 45 78  FUNCTION with Ex
1a510 70 72 2e 79 2e 70 57 69 6e 20 73 65 74 20 2a 2f  pr.y.pWin set */
1a520 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 72  .#define EP_Subr
1a530 74 6e 20 20 20 30 78 32 30 30 30 30 30 30 20 2f  tn   0x2000000 /
1a540 2a 20 55 73 65 73 20 45 78 70 72 2e 79 2e 73 75  * Uses Expr.y.su
1a550 62 2e 20 54 4b 5f 49 4e 2c 20 5f 53 45 4c 45 43  b. TK_IN, _SELEC
1a560 54 2c 20 6f 72 20 5f 45 58 49 53 54 53 20 2a 2f  T, or _EXISTS */
1a570 0a 23 64 65 66 69 6e 65 20 45 50 5f 51 75 6f 74  .#define EP_Quot
1a580 65 64 20 20 20 30 78 34 30 30 30 30 30 30 20 2f  ed   0x4000000 /
1a590 2a 20 54 4b 5f 49 44 20 77 61 73 20 6f 72 69 67  * TK_ID was orig
1a5a0 69 6e 61 6c 6c 79 20 71 75 6f 74 65 64 20 2a 2f  inally quoted */
1a5b0 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74  .#define EP_Stat
1a5c0 69 63 20 20 20 30 78 38 30 30 30 30 30 30 20 2f  ic   0x8000000 /
1a5d0 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79  * Held in memory
1a5e0 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72   not obtained fr
1a5f0 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23  om malloc() */.#
1a600 64 65 66 69 6e 65 20 45 50 5f 49 73 54 72 75 65  define EP_IsTrue
1a610 20 20 30 78 31 30 30 30 30 30 30 30 20 2f 2a 20    0x10000000 /* 
1a620 41 6c 77 61 79 73 20 68 61 73 20 62 6f 6f 6c 65  Always has boole
1a630 61 6e 20 76 61 6c 75 65 20 6f 66 20 54 52 55 45  an value of TRUE
1a640 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
1a650 73 46 61 6c 73 65 20 30 78 32 30 30 30 30 30 30  sFalse 0x2000000
1a660 30 20 2f 2a 20 41 6c 77 61 79 73 20 68 61 73 20  0 /* Always has 
1a670 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 20 6f 66  boolean value of
1a680 20 46 41 4c 53 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   FALSE */../*.**
1a690 20 54 68 65 20 45 50 5f 50 72 6f 70 61 67 61 74   The EP_Propagat
1a6a0 65 20 6d 61 73 6b 20 69 73 20 61 20 73 65 74 20  e mask is a set 
1a6b0 6f 66 20 70 72 6f 70 65 72 74 69 65 73 20 74 68  of properties th
1a6c0 61 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  at automatically
1a6d0 20 70 72 6f 70 61 67 61 74 65 0a 2a 2a 20 75 70   propagate.** up
1a6e0 77 61 72 64 73 20 69 6e 74 6f 20 70 61 72 65 6e  wards into paren
1a6f0 74 20 6e 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66  t nodes..*/.#def
1a700 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65  ine EP_Propagate
1a710 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f   (EP_Collate|EP_
1a720 53 75 62 71 75 65 72 79 7c 45 50 5f 48 61 73 46  Subquery|EP_HasF
1a730 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  unc)../*.** Thes
1a740 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
1a750 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
1a760 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
1a770 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e   in the.** Expr.
1a780 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
1a790 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50  #define ExprHasP
1a7a0 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20  roperty(E,P)    
1a7b0 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50   (((E)->flags&(P
1a7c0 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45  ))!=0).#define E
1a7d0 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74  xprHasAllPropert
1a7e0 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66  y(E,P)  (((E)->f
1a7f0 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a  lags&(P))==(P)).
1a800 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50  #define ExprSetP
1a810 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20  roperty(E,P)    
1a820 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
1a830 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65  .#define ExprCle
1a840 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  arProperty(E,P) 
1a850 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28    (E)->flags&=~(
1a860 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 41  P).#define ExprA
1a870 6c 77 61 79 73 54 72 75 65 28 45 29 20 20 20 28  lwaysTrue(E)   (
1a880 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 45 50 5f  ((E)->flags&(EP_
1a890 46 72 6f 6d 4a 6f 69 6e 7c 45 50 5f 49 73 54 72  FromJoin|EP_IsTr
1a8a0 75 65 29 29 3d 3d 45 50 5f 49 73 54 72 75 65 29  ue))==EP_IsTrue)
1a8b0 0a 23 64 65 66 69 6e 65 20 45 78 70 72 41 6c 77  .#define ExprAlw
1a8c0 61 79 73 46 61 6c 73 65 28 45 29 20 20 28 28 28  aysFalse(E)  (((
1a8d0 45 29 2d 3e 66 6c 61 67 73 26 28 45 50 5f 46 72  E)->flags&(EP_Fr
1a8e0 6f 6d 4a 6f 69 6e 7c 45 50 5f 49 73 46 61 6c 73  omJoin|EP_IsFals
1a8f0 65 29 29 3d 3d 45 50 5f 49 73 46 61 6c 73 65 29  e))==EP_IsFalse)
1a900 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74  ../* The ExprSet
1a910 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61  VVAProperty() ma
1a920 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
1a930 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61  Verification, Va
1a940 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64  lidation,.** and
1a950 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f   Accreditation o
1a960 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c  nly.  It works l
1a970 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ike ExprSetPrope
1a980 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41  rty() during VVA
1a990 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75  .** processes bu
1a9a0 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72  t is a no-op for
1a9b0 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69   delivery..*/.#i
1a9c0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1a9d0 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  G.# define ExprS
1a9e0 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
1a9f0 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d  P)  (E)->flags|=
1aa00 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  (P).#else.# defi
1aa10 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
1aa20 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69  perty(E,P).#endi
1aa30 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
1aa40 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
1aa50 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
1aa60 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e   required by a n
1aa70 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74  ormal Expr.** st
1aa80 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74  ruct, an Expr st
1aa90 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
1aaa0 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65  _Reduced flag se
1aab0 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a  t in Expr.flags.
1aac0 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73  ** and an Expr s
1aad0 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
1aae0 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
1aaf0 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65   set..*/.#define
1ab00 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20   EXPR_FULLSIZE  
1ab10 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
1ab20 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20  Expr)           
1ab30 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a  /* Full size */.
1ab40 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44  #define EXPR_RED
1ab50 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20  UCEDSIZE        
1ab60 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54  offsetof(Expr,iT
1ab70 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e  able)  /* Common
1ab80 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65   features */.#de
1ab90 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  fine EXPR_TOKENO
1aba0 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66  NLYSIZE      off
1abb0 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74  setof(Expr,pLeft
1abc0 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61  )   /* Fewer fea
1abd0 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tures */../*.** 
1abe0 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
1abf0 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  the sqlite3ExprD
1ac00 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53  up() function. S
1ac10 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f  ee the header co
1ac20 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73  mment.** above s
1ac30 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20  qlite3ExprDup() 
1ac40 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a  for details..*/.
1ac50 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f  #define EXPRDUP_
1ac60 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30  REDUCE         0
1ac70 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72  x0001  /* Used r
1ac80 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72  educed-size Expr
1ac90 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   nodes */../*.**
1aca0 20 54 72 75 65 20 69 66 20 74 68 65 20 65 78 70   True if the exp
1acb0 72 65 73 73 69 6f 6e 20 70 61 73 73 65 64 20 61  ression passed a
1acc0 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 77 61  s an argument wa
1acd0 73 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  s a function wit
1ace0 68 0a 2a 2a 20 61 6e 20 4f 56 45 52 28 29 20 63  h.** an OVER() c
1acf0 6c 61 75 73 65 20 28 61 20 77 69 6e 64 6f 77 20  lause (a window 
1ad00 66 75 6e 63 74 69 6f 6e 29 2e 0a 2a 2f 0a 23 64  function)..*/.#d
1ad10 65 66 69 6e 65 20 49 73 57 69 6e 64 6f 77 46 75  efine IsWindowFu
1ad20 6e 63 28 70 29 20 28 20 5c 0a 20 20 20 20 45 78  nc(p) ( \.    Ex
1ad30 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 28 70  prHasProperty((p
1ad40 29 2c 20 45 50 5f 57 69 6e 46 75 6e 63 29 20 26  ), EP_WinFunc) &
1ad50 26 20 70 2d 3e 79 2e 70 57 69 6e 2d 3e 65 46 72  & p->y.pWin->eFr
1ad60 6d 54 79 70 65 21 3d 54 4b 5f 46 49 4c 54 45 52  mType!=TK_FILTER
1ad70 20 5c 0a 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69   \.)../*.** A li
1ad80 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
1ad90 73 2e 20 20 45 61 63 68 20 65 78 70 72 65 73 73  s.  Each express
1ada0 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c  ion may optional
1adb0 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d  ly have a.** nam
1adc0 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65  e.  An expr/name
1add0 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e   combination can
1ade0 20 62 65 20 75 73 65 64 20 69 6e 20 73 65 76 65   be used in seve
1adf0 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a  ral ways, such.*
1ae00 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66  * as the list of
1ae10 20 22 65 78 70 72 20 41 53 20 49 44 22 20 66 69   "expr AS ID" fi
1ae20 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  elds following a
1ae30 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20   "SELECT" or in 
1ae40 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22  the.** list of "
1ae50 49 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73  ID = expr" items
1ae60 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20   in an UPDATE.  
1ae70 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
1ae80 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73  sions can.** als
1ae90 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65  o be used as the
1aea0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66   argument to a f
1aeb0 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63  unction, in whic
1aec0 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61  h case the a.zNa
1aed0 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e  me.** field is n
1aee0 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42  ot used..**.** B
1aef0 79 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 78  y default the Ex
1af00 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68  pr.zSpan field h
1af10 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61  olds a human-rea
1af20 64 61 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f  dable descriptio
1af30 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72  n of.** the expr
1af40 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75  ession that is u
1af50 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72  sed in the gener
1af60 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d  ation of error m
1af70 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63  essages and.** c
1af80 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49  olumn labels.  I
1af90 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45 78 70  n this case, Exp
1afa0 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63  r.zSpan is typic
1afb0 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66  ally the text of
1afc0 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70   a.** column exp
1afd0 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78  ression as it ex
1afe0 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54  ists in a SELECT
1aff0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77   statement.  How
1b000 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20  ever, if.** the 
1b010 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20  bSpanIsTab flag 
1b020 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70  is set, then zSp
1b030 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64  an is overloaded
1b040 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d   to mean the nam
1b050 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75  e.** of the resu
1b060 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  lt column in the
1b070 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e   form: DATABASE.
1b080 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54  TABLE.COLUMN.  T
1b090 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72  his later.** for
1b0a0 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61  m is used for na
1b0b0 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69  me resolution wi
1b0c0 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63  th nested FROM c
1b0d0 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63  lauses..*/.struc
1b0e0 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69  t ExprList {.  i
1b0f0 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20  nt nExpr;       
1b100 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b110 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  of expressions o
1b120 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20  n the list */.  
1b130 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f  struct ExprList_
1b140 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61  item { /* For ea
1b150 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  ch expression in
1b160 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20   the list */.   
1b170 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
1b180 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1b190 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 74  parse tree for t
1b1a0 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  his expression *
1b1b0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
1b1c0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
1b1d0 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65   Token associate
1b1e0 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72  d with this expr
1b1f0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68  ession */.    ch
1b200 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20  ar *zSpan;      
1b210 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61        /* Origina
1b220 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78  l text of the ex
1b230 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
1b240 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20  u8 sortOrder;   
1b250 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72          /* 1 for
1b260 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41   DESC or 0 for A
1b270 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  SC */.    unsign
1b280 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20  ed done :1;     
1b290 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69    /* A flag to i
1b2a0 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f  ndicate when pro
1b2b0 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73  cessing is finis
1b2c0 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  hed */.    unsig
1b2d0 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a  ned bSpanIsTab :
1b2e0 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64  1; /* zSpan hold
1b2f0 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  s DB.TABLE.COLUM
1b300 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  N */.    unsigne
1b310 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20  d reusable :1;  
1b320 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70   /* Constant exp
1b330 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61  ression is reusa
1b340 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ble */.    unsig
1b350 6e 65 64 20 62 53 6f 72 74 65 72 52 65 66 20 3a  ned bSorterRef :
1b360 31 3b 20 2f 2a 20 44 65 66 65 72 20 65 76 61 6c  1; /* Defer eval
1b370 75 61 74 69 6f 6e 20 75 6e 74 69 6c 20 61 66 74  uation until aft
1b380 65 72 20 73 6f 72 74 69 6e 67 20 2a 2f 0a 20 20  er sorting */.  
1b390 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20    union {.      
1b3a0 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20  struct {.       
1b3b0 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c   u16 iOrderByCol
1b3c0 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52  ;      /* For OR
1b3d0 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e  DER BY, column n
1b3e0 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20  umber in result 
1b3f0 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75  set */.        u
1b400 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20  16 iAlias;      
1b410 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
1b420 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b  to Parse.aAlias[
1b430 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20  ] for zName */. 
1b440 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20       } x;.      
1b450 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65  int iConstExprRe
1b460 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73  g;      /* Regis
1b470 74 65 72 20 69 6e 20 77 68 69 63 68 20 45 78 70  ter in which Exp
1b480 72 20 76 61 6c 75 65 20 69 73 20 63 61 63 68 65  r value is cache
1b490 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20  d */.    } u;.  
1b4a0 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  } a[1];         
1b4b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1b4c0 73 6c 6f 74 20 66 6f 72 20 65 61 63 68 20 65 78  slot for each ex
1b4d0 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
1b4e0 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
1b4f0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1b500 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
1b510 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c  can hold a simpl
1b520 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69  e list of identi
1b530 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61  fiers,.** such a
1b540 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c  s the list "a,b,
1b550 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  c" in the follow
1b560 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a  ing statements:.
1b570 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52  **.**      INSER
1b580 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20  T INTO t(a,b,c) 
1b590 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20  VALUES ...;.**  
1b5a0 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
1b5b0 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29   idx ON t(a,b,c)
1b5c0 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45  ;.**      CREATE
1b5d0 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45   TRIGGER trig BE
1b5e0 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74  FORE UPDATE ON t
1b5f0 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a  (a,b,c) ...;.**.
1b600 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e  ** The IdList.a.
1b610 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65  idx field is use
1b620 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73  d when the IdLis
1b630 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65  t represents the
1b640 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75   list of.** colu
1b650 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61  mn names after a
1b660 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61   table name in a
1b670 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
1b680 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74  nt.  In the stat
1b690 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ement.**.**     
1b6a0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
1b6b0 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49  b,c) ....**.** I
1b6c0 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74  f "a" is the k-t
1b6d0 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c  h column of tabl
1b6e0 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69  e "t", then IdLi
1b6f0 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a  st.a[0].idx==k..
1b700 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74  */.struct IdList
1b710 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69   {.  struct IdLi
1b720 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68  st_item {.    ch
1b730 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
1b740 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69  /* Name of the i
1b750 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20  dentifier */.   
1b760 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20   int idx;       
1b770 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73     /* Index in s
1b780 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d  ome Table.aCol[]
1b790 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d   of a column nam
1b7a0 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20  ed zName */.  } 
1b7b0 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20  *a;.  int nId;  
1b7c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b7d0 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20   of identifiers 
1b7e0 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  on the list */.}
1b7f0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
1b800 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1b810 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 46   describes the F
1b820 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ROM clause of a 
1b830 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1b840 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20  ..** Each table 
1b850 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74  or subquery in t
1b860 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69  he FROM clause i
1b870 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c 65  s a separate ele
1b880 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53  ment of.** the S
1b890 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79  rcList.a[] array
1b8a0 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65  ..**.** With the
1b8b0 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c   addition of mul
1b8c0 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 73  tiple database s
1b8d0 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c  upport, the foll
1b8e0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
1b8f0 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75  ** can also be u
1b900 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65 20  sed to describe 
1b910 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
1b920 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20 74  le such as the t
1b930 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20  able that.** is 
1b940 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 49  modified by an I
1b950 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f  NSERT, DELETE, o
1b960 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  r UPDATE stateme
1b970 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64  nt.  In standard
1b980 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20   SQL,.** such a 
1b990 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20  table must be a 
1b9a0 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e  simple name: ID.
1b9b0 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c    But in SQLite,
1b9c0 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a   the table can.*
1b9d0 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66  * now be identif
1b9e0 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61 73  ied by a databas
1b9f0 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74  e name, a dot, t
1ba00 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61  hen the table na
1ba10 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a  me: ID.ID..**.**
1ba20 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74   The jointype st
1ba30 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67  arts out showing
1ba40 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62   the join type b
1ba50 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72 65  etween the curre
1ba60 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20  nt table.** and 
1ba70 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f  the next table o
1ba80 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65  n the list.  The
1ba90 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74   parser builds t
1baa0 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61 79  he list this way
1bab0 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33  ..** But sqlite3
1bac0 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e  SrcListShiftJoin
1bad0 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68 69  Type() later shi
1bae0 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65  fts the jointype
1baf0 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a  s so that each.*
1bb00 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65  * jointype expre
1bb10 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65  sses the join be
1bb20 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20  tween the table 
1bb30 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73  and the previous
1bb40 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e   table..**.** In
1bb50 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65   the colUsed fie
1bb60 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64  ld, the high-ord
1bb70 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29 20  er bit (bit 63) 
1bb80 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74 61  is set if the ta
1bb90 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  ble.** contains 
1bba0 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c  more than 63 col
1bbb0 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d  umns and the 64-
1bbc0 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75  th or later colu
1bbd0 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73  mn is used..*/.s
1bbe0 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a  truct SrcList {.
1bbf0 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20    int nSrc;     
1bc00 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1bc10 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65  tables or subque
1bc20 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d  ries in the FROM
1bc30 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32   clause */.  u32
1bc40 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a   nAlloc;      /*
1bc50 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
1bc60 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20  es allocated in 
1bc70 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73  a[] below */.  s
1bc80 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
1bc90 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20  em {.    Schema 
1bca0 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63  *pSchema;  /* Sc
1bcb0 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68  hema to which th
1bcc0 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65 64  is item is fixed
1bcd0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44   */.    char *zD
1bce0 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d  atabase;  /* Nam
1bcf0 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  e of database ho
1bd00 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65  lding this table
1bd10 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
1bd20 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
1bd30 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a  e of the table *
1bd40 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69  /.    char *zAli
1bd50 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22  as;     /* The "
1bd60 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41 20  B" part of a "A 
1bd70 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a  AS B" phrase.  z
1bd80 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22 20  Name is the "A" 
1bd90 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
1bda0 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53  ab;      /* An S
1bdb0 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70  QL table corresp
1bdc0 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20  onding to zName 
1bdd0 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
1bde0 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45  Select;  /* A SE
1bdf0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75  LECT statement u
1be00 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  sed in place of 
1be10 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a  a table name */.
1be20 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c      int addrFill
1be30 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73  Sub;  /* Address
1be40 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74   of subroutine t
1be50 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62  o manifest a sub
1be60 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74  query */.    int
1be70 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f   regReturn;    /
1be80 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
1be90 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65 73  ng return addres
1bea0 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62  s of addrFillSub
1beb0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
1bec0 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67  esult;    /* Reg
1bed0 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72  isters holding r
1bee0 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72  esults of a co-r
1bef0 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74  outine */.    st
1bf00 72 75 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20  ruct {.      u8 
1bf10 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f  jointype;      /
1bf20 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62  * Type of join b
1bf30 65 74 77 65 65 6e 20 74 68 69 73 20 74 61 62 6c  etween this tabl
1bf40 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
1bf50 75 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  us */.      unsi
1bf60 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20  gned notIndexed 
1bf70 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
1bf80 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
1bf90 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20   INDEXED clause 
1bfa0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
1bfb0 64 20 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31  d isIndexedBy :1
1bfc0 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74  ;   /* True if t
1bfd0 68 65 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58  here is an INDEX
1bfe0 45 44 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ED BY clause */.
1bff0 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
1c000 73 54 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20  sTabFunc :1;    
1c010 20 2f 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c   /* True if tabl
1c020 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f  e-valued-functio
1c030 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20  n syntax */.    
1c040 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72    unsigned isCor
1c050 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20  related :1;  /* 
1c060 54 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72  True if sub-quer
1c070 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20  y is correlated 
1c080 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
1c090 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a  d viaCoroutine :
1c0a0 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1;  /* Implement
1c0b0 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69  ed as a co-routi
1c0c0 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  ne */.      unsi
1c0d0 67 6e 65 64 20 69 73 52 65 63 75 72 73 69 76 65  gned isRecursive
1c0e0 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66   :1;   /* True f
1c0f0 6f 72 20 72 65 63 75 72 73 69 76 65 20 72 65 66  or recursive ref
1c100 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a  erence in WITH *
1c110 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 20 20 20 20  /.    } fg;.    
1c120 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20  int iCursor;    
1c130 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
1c140 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64  rsor number used
1c150 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 73 20   to access this 
1c160 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70  table */.    Exp
1c170 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f  r *pOn;        /
1c180 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20  * The ON clause 
1c190 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
1c1a0 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b   IdList *pUsing;
1c1b0 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20     /* The USING 
1c1c0 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
1c1d0 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20   */.    Bitmask 
1c1e0 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74  colUsed;  /* Bit
1c1f0 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66   N (1<<N) set if
1c200 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61   column N of pTa
1c210 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20  b is used */.   
1c220 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 63   union {.      c
1c230 68 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b  har *zIndexedBy;
1c240 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65      /* Identifie
1c250 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20  r from "INDEXED 
1c260 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61  BY <zIndex>" cla
1c270 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 45 78 70  use */.      Exp
1c280 72 4c 69 73 74 20 2a 70 46 75 6e 63 41 72 67 3b  rList *pFuncArg;
1c290 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74    /* Arguments t
1c2a0 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66  o table-valued-f
1c2b0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d  unction */.    }
1c2c0 20 75 31 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a   u1;.    Index *
1c2d0 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49 6e  pIBIndex;  /* In
1c2e0 64 65 78 20 73 74 72 75 63 74 75 72 65 20 63 6f  dex structure co
1c2f0 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 75  rresponding to u
1c300 31 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f 0a  1.zIndexedBy */.
1c310 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20    } a[1];       
1c320 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74        /* One ent
1c330 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e  ry for each iden
1c340 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69  tifier on the li
1c350 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
1c360 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73  Permitted values
1c370 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e   of the SrcList.
1c380 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64  a.jointype field
1c390 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49  .*/.#define JT_I
1c3a0 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20  NNER     0x0001 
1c3b0 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f     /* Any kind o
1c3c0 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73  f inner or cross
1c3d0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
1c3e0 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78   JT_CROSS     0x
1c3f0 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69  0002    /* Expli
1c400 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43  cit use of the C
1c410 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  ROSS keyword */.
1c420 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52  #define JT_NATUR
1c430 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f  AL   0x0004    /
1c440 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61  * True for a "na
1c450 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23  tural" join */.#
1c460 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20  define JT_LEFT  
1c470 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a      0x0008    /*
1c480 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e   Left outer join
1c490 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52   */.#define JT_R
1c4a0 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20  IGHT     0x0010 
1c4b0 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65     /* Right oute
1c4c0 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
1c4d0 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30  e JT_OUTER     0
1c4e0 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20  x0020    /* The 
1c4f0 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20  "OUTER" keyword 
1c500 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64  is present */.#d
1c510 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20  efine JT_ERROR  
1c520 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20     0x0040    /* 
1c530 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70  unknown or unsup
1c540 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65  ported join type
1c550 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67   */.../*.** Flag
1c560 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f  s appropriate fo
1c570 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73  r the wctrlFlags
1c580 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71   parameter of sq
1c590 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
1c5a0 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65  ).** and the Whe
1c5b0 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67  reInfo.wctrlFlag
1c5c0 73 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20  s member..**.** 
1c5d0 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
1c5e0 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
1c5f0 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
1c600 20 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49    WHERE_USE_LIMI
1c610 54 20 20 3d 3d 20 53 46 5f 46 69 78 65 64 4c 69  T  == SF_FixedLi
1c620 6d 69 74 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  mit.*/.#define W
1c630 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52  HERE_ORDERBY_NOR
1c640 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20  MAL   0x0000 /* 
1c650 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65  No-op */.#define
1c660 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d   WHERE_ORDERBY_M
1c670 49 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f  IN      0x0001 /
1c680 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
1c690 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20  ssing for min() 
1c6a0 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
1c6b0 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41  WHERE_ORDERBY_MA
1c6c0 58 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a  X      0x0002 /*
1c6d0 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
1c6e0 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66  sing for max() f
1c6f0 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
1c700 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53  HERE_ONEPASS_DES
1c710 49 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20  IRED  0x0004 /* 
1c720 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70  Want to do one-p
1c730 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54  ass UPDATE/DELET
1c740 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  E */.#define WHE
1c750 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49  RE_ONEPASS_MULTI
1c760 52 4f 57 20 30 78 30 30 30 38 20 2f 2a 20 4f 4e  ROW 0x0008 /* ON
1c770 45 50 41 53 53 20 69 73 20 6f 6b 20 77 69 74 68  EPASS is ok with
1c780 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
1c790 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c7a0 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20  DUPLICATES_OK   
1c7b0 20 30 78 30 30 31 30 20 2f 2a 20 4f 6b 20 74 6f   0x0010 /* Ok to
1c7c0 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f   return a row mo
1c7d0 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a  re than once */.
1c7e0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1c7f0 5f 53 55 42 43 4c 41 55 53 45 20 20 20 20 20 30  _SUBCLAUSE     0
1c800 78 30 30 32 30 20 2f 2a 20 50 72 6f 63 65 73 73  x0020 /* Process
1c810 69 6e 67 20 61 20 73 75 62 2d 57 48 45 52 45 20  ing a sub-WHERE 
1c820 61 73 20 70 61 72 74 20 6f 66 0a 20 20 20 20 20  as part of.     
1c830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c850 20 2a 2a 20 74 68 65 20 4f 52 20 6f 70 74 69 6d   ** the OR optim
1c860 69 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23 64 65 66  ization  */.#def
1c870 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42  ine WHERE_GROUPB
1c880 59 20 20 20 20 20 20 20 20 20 20 30 78 30 30 34  Y          0x004
1c890 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73  0 /* pOrderBy is
1c8a0 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20   really a GROUP 
1c8b0 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  BY */.#define WH
1c8c0 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20  ERE_DISTINCTBY  
1c8d0 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20 70       0x0080 /* p
1c8e0 4f 72 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c  Orderby is reall
1c8f0 79 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61  y a DISTINCT cla
1c900 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  use */.#define W
1c910 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e  HERE_WANT_DISTIN
1c920 43 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20  CT    0x0100 /* 
1c930 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73  All output needs
1c940 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20   to be distinct 
1c950 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c960 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20  _SORTBYGROUP    
1c970 20 20 30 78 30 32 30 30 20 2f 2a 20 53 75 70 70    0x0200 /* Supp
1c980 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  ort sqlite3Where
1c990 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64  IsSorted() */.#d
1c9a0 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b  efine WHERE_SEEK
1c9b0 5f 54 41 42 4c 45 20 20 20 20 20 20 20 30 78 30  _TABLE       0x0
1c9c0 34 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65  400 /* Do not de
1c9d0 66 65 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61 69  fer seeks on mai
1c9e0 6e 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  n table */.#defi
1c9f0 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
1ca00 5f 4c 49 4d 49 54 20 20 20 20 30 78 30 38 30 30  _LIMIT    0x0800
1ca10 20 2f 2a 20 4f 52 44 45 52 42 59 2b 4c 49 4d 49   /* ORDERBY+LIMI
1ca20 54 20 6f 6e 20 74 68 65 20 69 6e 6e 65 72 20 6c  T on the inner l
1ca30 6f 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  oop */.#define W
1ca40 48 45 52 45 5f 53 45 45 4b 5f 55 4e 49 51 5f 54  HERE_SEEK_UNIQ_T
1ca50 41 42 4c 45 20 20 30 78 31 30 30 30 20 2f 2a 20  ABLE  0x1000 /* 
1ca60 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65  Do not defer see
1ca70 6b 73 20 69 66 20 75 6e 69 71 75 65 20 2a 2f 0a  ks if unique */.
1ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca90 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30          /*     0
1caa0 78 32 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72  x2000    not cur
1cab0 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 23  rently used */.#
1cac0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 55 53 45  define WHERE_USE
1cad0 5f 4c 49 4d 49 54 20 20 20 20 20 20 20 20 30 78  _LIMIT        0x
1cae0 34 30 30 30 20 2f 2a 20 55 73 65 20 74 68 65 20  4000 /* Use the 
1caf0 4c 49 4d 49 54 20 69 6e 20 63 6f 73 74 20 65 73  LIMIT in cost es
1cb00 74 69 6d 61 74 65 73 20 2a 2f 0a 20 20 20 20 20  timates */.     
1cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb20 20 20 20 2f 2a 20 20 20 20 20 30 78 38 30 30 30     /*     0x8000
1cb30 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c      not currentl
1cb40 79 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20 41 6c  y used */../* Al
1cb50 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c  lowed return val
1cb60 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ues from sqlite3
1cb70 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28  WhereIsDistinct(
1cb80 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  ).*/.#define WHE
1cb90 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50  RE_DISTINCT_NOOP
1cba0 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54        0  /* DIST
1cbb0 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74  INCT keyword not
1cbc0 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
1cbd0 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1cbe0 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20  UNIQUE    1  /* 
1cbf0 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f  No duplicates */
1cc00 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1cc10 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20  ISTINCT_ORDERED 
1cc20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c    2  /* All dupl
1cc30 69 63 61 74 65 73 20 61 72 65 20 61 64 6a 61 63  icates are adjac
1cc40 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ent */.#define W
1cc50 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e  HERE_DISTINCT_UN
1cc60 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75  ORDERED 3  /* Du
1cc70 70 6c 69 63 61 74 65 73 20 61 72 65 20 73 63 61  plicates are sca
1cc80 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ttered */../*.**
1cc90 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64   A NameContext d
1cca0 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74  efines a context
1ccb0 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73   in which to res
1ccc0 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63  olve table and c
1ccd0 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20  olumn.** names. 
1cce0 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e   The context con
1ccf0 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20  sists of a list 
1cd00 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65 20 70  of tables (the p
1cd10 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61  SrcList) field a
1cd20 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20  nd.** a list of 
1cd30 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e  named expression
1cd40 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20   (pEList).  The 
1cd50 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e  named expression
1cd60 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20   list may.** be 
1cd70 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20  NULL.  The pSrc 
1cd80 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
1cd90 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
1cda0 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a  f a SELECT or.**
1cdb0 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65   to the table be
1cdc0 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20  ing operated on 
1cdd0 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54  by INSERT, UPDAT
1cde0 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54  E, or DELETE.  T
1cdf0 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72  he.** pEList cor
1ce00 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
1ce10 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20  result set of a 
1ce20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55  SELECT and is NU
1ce30 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20  LL for.** other 
1ce40 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
1ce50 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63  * NameContexts c
1ce60 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57  an be nested.  W
1ce70 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61  hen resolving na
1ce80 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d  mes, the inner-m
1ce90 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  ost.** context i
1cea0 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74  s searched first
1ceb0 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69  .  If no match i
1cec0 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78  s found, the nex
1ced0 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65  t outer.** conte
1cee0 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20  xt is checked.  
1cef0 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c  If there is stil
1cf00 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20  l no match, the 
1cf10 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20  next context.** 
1cf20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69  is checked.  Thi
1cf30 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e  s process contin
1cf40 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72  ues until either
1cf50 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
1cf60 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74  d.** or all cont
1cf70 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20  exts are check. 
1cf80 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73   When a match is
1cf90 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66   found, the nRef
1cfa0 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68   member of.** th
1cfb0 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69  e context contai
1cfc0 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69  ning the match i
1cfd0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a  s incremented..*
1cfe0 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65  *.** Each subque
1cff0 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61  ry gets a new Na
1d000 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20  meContext.  The 
1d010 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e  pNext field poin
1d020 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d  ts to the.** Nam
1d030 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20  eContext in the 
1d040 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54  parent query.  T
1d050 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20  hus the process 
1d060 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a  of scanning the.
1d070 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c  ** NameContext l
1d080 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
1d090 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72  to searching thr
1d0a0 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c  ough successivel
1d0b0 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75  y outer.** subqu
1d0c0 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f  eries looking fo
1d0d0 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74  r a match..*/.st
1d0e0 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ruct NameContext
1d0f0 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
1d100 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  se;       /* The
1d110 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63   parser */.  Src
1d120 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20  List *pSrcList; 
1d130 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
1d140 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20   tables used to 
1d150 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f  resolve names */
1d160 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45  .  union {.    E
1d170 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b  xprList *pEList;
1d180 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
1d190 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73  list of result-s
1d1a0 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  et columns */.  
1d1b0 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49    AggInfo *pAggI
1d1c0 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  nfo;   /* Inform
1d1d0 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72  ation about aggr
1d1e0 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c  egates at this l
1d1f0 65 76 65 6c 20 2a 2f 0a 20 20 20 20 55 70 73 65  evel */.    Upse
1d200 72 74 20 2a 70 55 70 73 65 72 74 3b 20 20 20 20  rt *pUpsert;    
1d210 20 2f 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20   /* ON CONFLICT 
1d220 63 6c 61 75 73 65 20 69 6e 66 6f 72 6d 61 74 69  clause informati
1d230 6f 6e 20 66 72 6f 6d 20 61 6e 20 75 70 73 65 72  on from an upser
1d240 74 20 2a 2f 0a 20 20 7d 20 75 4e 43 3b 0a 20 20  t */.  } uNC;.  
1d250 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65  NameContext *pNe
1d260 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74  xt;  /* Next out
1d270 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e  er name context.
1d280 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72    NULL for outer
1d290 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  most */.  int nR
1d2a0 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ef;            /
1d2b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65  * Number of name
1d2c0 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68  s resolved by th
1d2d0 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  is context */.  
1d2e0 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
1d2f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1d300 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74  f errors encount
1d310 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c  ered while resol
1d320 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  ving names */.  
1d330 69 6e 74 20 6e 63 46 6c 61 67 73 3b 20 20 20 20  int ncFlags;    
1d340 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20       /* Zero or 
1d350 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20  more NC_* flags 
1d360 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f  defined below */
1d370 0a 20 20 53 65 6c 65 63 74 20 2a 70 57 69 6e 53  .  Select *pWinS
1d380 65 6c 65 63 74 3b 20 20 2f 2a 20 53 45 4c 45 43  elect;  /* SELEC
1d390 54 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20  T statement for 
1d3a0 61 6e 79 20 77 69 6e 64 6f 77 20 66 75 6e 63 74  any window funct
1d3b0 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ions */.};../*.*
1d3c0 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
1d3d0 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e   for the NameCon
1d3e0 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69  text, ncFlags fi
1d3f0 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  eld..**.** Value
1d400 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c   constraints (al
1d410 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61 73  l checked via as
1d420 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4e  sert()):.**    N
1d430 43 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20 53  C_HasAgg    == S
1d440 46 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20 45  F_HasAgg    == E
1d450 50 5f 41 67 67 0a 2a 2a 20 20 20 20 4e 43 5f 4d  P_Agg.**    NC_M
1d460 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 46 5f 4d  inMaxAgg == SF_M
1d470 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 51 4c 49  inMaxAgg == SQLI
1d480 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a  TE_FUNC_MINMAX.*
1d490 2a 20 20 20 20 4e 43 5f 48 61 73 57 69 6e 20 20  *    NC_HasWin  
1d4a0 20 20 3d 3d 20 45 50 5f 57 69 6e 0a 2a 2a 0a 2a    == EP_Win.**.*
1d4b0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c  /.#define NC_All
1d4c0 6f 77 41 67 67 20 20 30 78 30 30 30 31 20 20 2f  owAgg  0x0001  /
1d4d0 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
1d4e0 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65  tions are allowe
1d4f0 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e  d here */.#defin
1d500 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30  e NC_PartIdx   0
1d510 78 30 30 30 32 20 20 2f 2a 20 54 72 75 65 20 69  x0002  /* True i
1d520 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61  f resolving a pa
1d530 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52  rtial index WHER
1d540 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  E */.#define NC_
1d550 49 73 43 68 65 63 6b 20 20 20 30 78 30 30 30 34  IsCheck   0x0004
1d560 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
1d570 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20  olving names in 
1d580 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  a CHECK constrai
1d590 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  nt */.#define NC
1d5a0 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30  _InAggFunc 0x000
1d5b0 38 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e  8  /* True if an
1d5c0 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74  alyzing argument
1d5d0 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63  s to an agg func
1d5e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48   */.#define NC_H
1d5f0 61 73 41 67 67 20 20 20 20 30 78 30 30 31 30 20  asAgg    0x0010 
1d600 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
1d610 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1d620 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  ons seen */.#def
1d630 69 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20 20  ine NC_IdxExpr  
1d640 20 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75 65   0x0020  /* True
1d650 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f   if resolving co
1d660 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45 20  lumns of CREATE 
1d670 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65  INDEX */.#define
1d680 20 4e 43 5f 56 61 72 53 65 6c 65 63 74 20 30 78   NC_VarSelect 0x
1d690 30 30 34 30 20 20 2f 2a 20 41 20 63 6f 72 72 65  0040  /* A corre
1d6a0 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20 68  lated subquery h
1d6b0 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a  as been seen */.
1d6c0 23 64 65 66 69 6e 65 20 4e 43 5f 55 45 4c 69 73  #define NC_UELis
1d6d0 74 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20  t    0x0080  /* 
1d6e0 54 72 75 65 20 69 66 20 75 4e 43 2e 70 45 4c 69  True if uNC.pELi
1d6f0 73 74 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64  st is used */.#d
1d700 65 66 69 6e 65 20 4e 43 5f 55 41 67 67 49 6e 66  efine NC_UAggInf
1d710 6f 20 20 30 78 30 31 30 30 20 20 2f 2a 20 54 72  o  0x0100  /* Tr
1d720 75 65 20 69 66 20 75 4e 43 2e 70 41 67 67 49 6e  ue if uNC.pAggIn
1d730 66 6f 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64  fo is used */.#d
1d740 65 66 69 6e 65 20 4e 43 5f 55 55 70 73 65 72 74  efine NC_UUpsert
1d750 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20 54 72     0x0200  /* Tr
1d760 75 65 20 69 66 20 75 4e 43 2e 70 55 70 73 65 72  ue if uNC.pUpser
1d770 74 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65  t is used */.#de
1d780 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67  fine NC_MinMaxAg
1d790 67 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e  g 0x1000  /* min
1d7a0 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65 73 20  /max aggregates 
1d7b0 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20  seen.  See note 
1d7c0 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65  above */.#define
1d7d0 20 4e 43 5f 43 6f 6d 70 6c 65 78 20 20 20 30 78   NC_Complex   0x
1d7e0 32 30 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66  2000  /* True if
1d7f0 20 61 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 73   a function or s
1d800 75 62 71 75 65 72 79 20 73 65 65 6e 20 2a 2f 0a  ubquery seen */.
1d810 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77  #define NC_Allow
1d820 57 69 6e 20 20 30 78 34 30 30 30 20 20 2f 2a 20  Win  0x4000  /* 
1d830 57 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73  Window functions
1d840 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72   are allowed her
1d850 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  e */.#define NC_
1d860 48 61 73 57 69 6e 20 20 20 20 30 78 38 30 30 30  HasWin    0x8000
1d870 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
1d880 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
1d890 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s seen */.#defin
1d8a0 65 20 4e 43 5f 49 73 44 44 4c 20 20 20 20 30 78  e NC_IsDDL    0x
1d8b0 31 30 30 30 30 20 20 2f 2a 20 52 65 73 6f 6c 76  10000  /* Resolv
1d8c0 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43  ing names in a C
1d8d0 52 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  REATE statement 
1d8e0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
1d8f0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1d900 6c 6f 77 69 6e 67 20 6f 62 6a 65 63 74 20 64 65  lowing object de
1d910 73 63 72 69 62 65 73 20 61 20 73 69 6e 67 6c 65  scribes a single
1d920 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 0a 2a 2a 20   ON CONFLICT.** 
1d930 63 6c 61 75 73 65 20 69 6e 20 61 6e 20 75 70 73  clause in an ups
1d940 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  ert..**.** The p
1d950 55 70 73 65 72 74 54 61 72 67 65 74 20 66 69 65  UpsertTarget fie
1d960 6c 64 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 69  ld is only set i
1d970 66 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  f the ON CONFLIC
1d980 54 20 63 6c 61 75 73 65 20 69 6e 63 6c 75 64 65  T clause include
1d990 73 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61  s.** conflict-ta
1d9a0 72 67 65 74 20 63 6c 61 75 73 65 2e 20 20 28 49  rget clause.  (I
1d9b0 6e 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 61  n "ON CONFLICT(a
1d9c0 2c 62 29 22 20 74 68 65 20 22 28 61 2c 62 29 22  ,b)" the "(a,b)"
1d9d0 20 69 73 20 74 68 65 0a 2a 2a 20 63 6f 6e 66 6c   is the.** confl
1d9e0 69 63 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73  ict-target claus
1d9f0 65 2e 29 20 20 54 68 65 20 70 55 70 73 65 72 74  e.)  The pUpsert
1da00 54 61 72 67 65 74 57 68 65 72 65 20 69 73 20 74  TargetWhere is t
1da10 68 65 20 6f 70 74 69 6f 6e 61 6c 0a 2a 2a 20 57  he optional.** W
1da20 48 45 52 45 20 63 6c 61 75 73 65 20 75 73 65 64  HERE clause used
1da30 20 74 6f 20 69 64 65 6e 74 69 66 79 20 70 61 72   to identify par
1da40 74 69 61 6c 20 75 6e 69 71 75 65 20 69 6e 64 65  tial unique inde
1da50 78 65 73 2e 0a 2a 2a 0a 2a 2a 20 70 55 70 73 65  xes..**.** pUpse
1da60 72 74 53 65 74 20 69 73 20 74 68 65 20 6c 69 73  rtSet is the lis
1da70 74 20 6f 66 20 63 6f 6c 75 6d 6e 3d 65 78 70 72  t of column=expr
1da80 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 55 50   terms of the UP
1da90 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  DATE statement. 
1daa0 0a 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74 53  .** The pUpsertS
1dab0 65 74 20 66 69 65 6c 64 20 69 73 20 4e 55 4c 4c  et field is NULL
1dac0 20 66 6f 72 20 61 20 4f 4e 20 43 4f 4e 46 4c 49   for a ON CONFLI
1dad0 43 54 20 44 4f 20 4e 4f 54 48 49 4e 47 2e 20 20  CT DO NOTHING.  
1dae0 54 68 65 0a 2a 2a 20 70 55 70 73 65 72 74 57 68  The.** pUpsertWh
1daf0 65 72 65 20 69 73 20 74 68 65 20 57 48 45 52 45  ere is the WHERE
1db00 20 63 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20   clause for the 
1db10 55 50 44 41 54 45 20 61 6e 64 20 69 73 20 4e 55  UPDATE and is NU
1db20 4c 4c 20 69 66 20 74 68 65 0a 2a 2a 20 57 48 45  LL if the.** WHE
1db30 52 45 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69  RE clause is omi
1db40 74 74 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tted..*/.struct 
1db50 55 70 73 65 72 74 20 7b 0a 20 20 45 78 70 72 4c  Upsert {.  ExprL
1db60 69 73 74 20 2a 70 55 70 73 65 72 74 54 61 72 67  ist *pUpsertTarg
1db70 65 74 3b 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c  et;  /* Optional
1db80 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20   description of 
1db90 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65  conflicting inde
1dba0 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70  x */.  Expr *pUp
1dbb0 73 65 72 74 54 61 72 67 65 74 57 68 65 72 65 3b  sertTargetWhere;
1dbc0 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65   /* WHERE clause
1dbd0 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64   for partial ind
1dbe0 65 78 20 74 61 72 67 65 74 73 20 2a 2f 0a 20 20  ex targets */.  
1dbf0 45 78 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72  ExprList *pUpser
1dc00 74 53 65 74 3b 20 20 20 20 20 2f 2a 20 54 68 65  tSet;     /* The
1dc10 20 53 45 54 20 63 6c 61 75 73 65 20 66 72 6f 6d   SET clause from
1dc20 20 61 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20   an ON CONFLICT 
1dc30 55 50 44 41 54 45 20 2a 2f 0a 20 20 45 78 70 72  UPDATE */.  Expr
1dc40 20 2a 70 55 70 73 65 72 74 57 68 65 72 65 3b 20   *pUpsertWhere; 
1dc50 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63        /* WHERE c
1dc60 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20 4f 4e  lause for the ON
1dc70 20 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45   CONFLICT UPDATE
1dc80 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 66 69 65   */.  /* The fie
1dc90 6c 64 73 20 61 62 6f 76 65 20 63 6f 6d 70 72 69  lds above compri
1dca0 73 65 20 74 68 65 20 70 61 72 73 65 20 74 72 65  se the parse tre
1dcb0 65 20 66 6f 72 20 74 68 65 20 75 70 73 65 72 74  e for the upsert
1dcc0 20 63 6c 61 75 73 65 2e 0a 20 20 2a 2a 20 54 68   clause..  ** Th
1dcd0 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 61  e fields below a
1dce0 72 65 20 75 73 65 64 20 74 6f 20 74 72 61 6e 73  re used to trans
1dcf0 66 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  fer information 
1dd00 66 72 6f 6d 20 74 68 65 20 49 4e 53 45 52 54 0a  from the INSERT.
1dd10 20 20 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20    ** processing 
1dd20 64 6f 77 6e 20 69 6e 74 6f 20 74 68 65 20 55 50  down into the UP
1dd30 44 41 54 45 20 70 72 6f 63 65 73 73 69 6e 67 20  DATE processing 
1dd40 77 68 69 6c 65 20 67 65 6e 65 72 61 74 69 6e 67  while generating
1dd50 20 63 6f 64 65 2e 0a 20 20 2a 2a 20 55 70 73 65   code..  ** Upse
1dd60 72 74 20 6f 77 6e 73 20 74 68 65 20 6d 65 6d 6f  rt owns the memo
1dd70 72 79 20 61 6c 6c 6f 63 61 74 65 64 20 61 62 6f  ry allocated abo
1dd80 76 65 2c 20 62 75 74 20 6e 6f 74 20 74 68 65 20  ve, but not the 
1dd90 6d 65 6d 6f 72 79 20 62 65 6c 6f 77 2e 20 2a 2f  memory below. */
1dda0 0a 20 20 49 6e 64 65 78 20 2a 70 55 70 73 65 72  .  Index *pUpser
1ddb0 74 49 64 78 3b 20 20 20 20 20 20 20 20 2f 2a 20  tIdx;        /* 
1ddc0 43 6f 6e 73 74 72 61 69 6e 74 20 74 68 61 74 20  Constraint that 
1ddd0 70 55 70 73 65 72 74 54 61 72 67 65 74 20 69 64  pUpsertTarget id
1dde0 65 6e 74 69 66 69 65 73 20 2a 2f 0a 20 20 53 72  entifies */.  Sr
1ddf0 63 4c 69 73 74 20 2a 70 55 70 73 65 72 74 53 72  cList *pUpsertSr
1de00 63 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  c;      /* Table
1de10 20 74 6f 20 62 65 20 75 70 64 61 74 65 64 20 2a   to be updated *
1de20 2f 0a 20 20 69 6e 74 20 72 65 67 44 61 74 61 3b  /.  int regData;
1de30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1de40 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20   First register 
1de50 68 6f 6c 64 69 6e 67 20 61 72 72 61 79 20 6f 66  holding array of
1de60 20 56 41 4c 55 45 53 20 2a 2f 0a 20 20 69 6e 74   VALUES */.  int
1de70 20 69 44 61 74 61 43 75 72 3b 20 20 20 20 20 20   iDataCur;      
1de80 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1de90 6f 66 20 74 68 65 20 64 61 74 61 20 63 75 72 73  of the data curs
1dea0 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 69 49 64 78  or */.  int iIdx
1deb0 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cur;            
1dec0 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68    /* Index of th
1ded0 65 20 66 69 72 73 74 20 69 6e 64 65 78 20 63 75  e first index cu
1dee0 72 73 6f 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  rsor */.};../*.*
1def0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1df00 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1df10 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
1df20 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  s all informatio
1df30 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67  n.** needed to g
1df40 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72  enerate code for
1df50 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54   a single SELECT
1df60 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a   statement..**.*
1df70 2a 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72  * See the header
1df80 20 63 6f 6d 6d 65 6e 74 20 6f 6e 20 74 68 65 20   comment on the 
1df90 63 6f 6d 70 75 74 65 4c 69 6d 69 74 52 65 67 69  computeLimitRegi
1dfa0 73 74 65 72 73 28 29 20 72 6f 75 74 69 6e 65 20  sters() routine 
1dfb0 66 6f 72 20 61 0a 2a 2a 20 64 65 74 61 69 6c 65  for a.** detaile
1dfc0 64 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  d description of
1dfd0 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20   the meaning of 
1dfe0 74 68 65 20 69 4c 69 6d 69 74 20 61 6e 64 20 69  the iLimit and i
1dff0 4f 66 66 73 65 74 20 66 69 65 6c 64 73 2e 0a 2a  Offset fields..*
1e000 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68  *.** addrOpenEph
1e010 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74  m[] entries cont
1e020 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20  ain the address 
1e030 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  of OP_OpenEpheme
1e040 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20  ral opcodes..** 
1e050 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20  These addresses 
1e060 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73  must be stored s
1e070 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f  o that we can go
1e080 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69   back and fill i
1e090 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49  n.** the P4_KEYI
1e0a0 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d  NFO and P2 param
1e0b0 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65  eters later.  Ne
1e0c0 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66  ither the KeyInf
1e0d0 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d  o nor.** the num
1e0e0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1e0f0 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70  n P2 can be comp
1e100 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65  uted at the same
1e110 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20   time.** as the 
1e120 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74  OP_OpenEphm inst
1e130 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64  ruction is coded
1e140 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20   because not.** 
1e150 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69  enough informati
1e160 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d  on about the com
1e170 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b  pound query is k
1e180 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69  nown at that poi
1e190 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e  nt..** The KeyIn
1e1a0 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54  fo for addrOpenT
1e1b0 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63  ran[0] and [1] c
1e1c0 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
1e1d0 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66  g sequences.** f
1e1e0 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  or the result se
1e1f0 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  t.  The KeyInfo 
1e200 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  for addrOpenEphm
1e210 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [2] contains col
1e220 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e  lating.** sequen
1e230 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45  ces for the ORDE
1e240 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  R BY clause..*/.
1e250 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a  struct Select {.
1e260 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
1e270 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  st;      /* The 
1e280 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65  fields of the re
1e290 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  sult */.  u8 op;
1e2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2b0 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55   /* One of: TK_U
1e2c0 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49  NION TK_ALL TK_I
1e2d0 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45  NTERSECT TK_EXCE
1e2e0 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e  PT */.  LogEst n
1e2f0 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f  SelectRow;     /
1e300 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62  * Estimated numb
1e310 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  er of result row
1e320 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c  s */.  u32 selFl
1e330 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ags;          /*
1e340 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61   Various SF_* va
1e350 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c  lues */.  int iL
1e360 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20  imit, iOffset;  
1e370 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
1e380 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d  ters holding LIM
1e390 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e  IT & OFFSET coun
1e3a0 74 65 72 73 20 2a 2f 0a 20 20 75 33 32 20 73 65  ters */.  u32 se
1e3b0 6c 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  lId;            
1e3c0 20 2f 2a 20 55 6e 69 71 75 65 20 69 64 65 6e 74   /* Unique ident
1e3d0 69 66 69 65 72 20 6e 75 6d 62 65 72 20 66 6f 72  ifier number for
1e3e0 20 74 68 69 73 20 53 45 4c 45 43 54 20 2a 2f 0a   this SELECT */.
1e3f0 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70    int addrOpenEp
1e400 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f  hm[2];   /* OP_O
1e410 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73  penEphem opcodes
1e420 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73   related to this
1e430 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72 63   select */.  Src
1e440 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20  List *pSrc;     
1e450 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20      /* The FROM 
1e460 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1e470 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20   *pWhere;       
1e480 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
1e490 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1e4a0 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20  List *pGroupBy; 
1e4b0 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20     /* The GROUP 
1e4c0 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  BY clause */.  E
1e4d0 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20  xpr *pHaving;   
1e4e0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56        /* The HAV
1e4f0 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ING clause */.  
1e500 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
1e510 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52  By;    /* The OR
1e520 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  DER BY clause */
1e530 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f  .  Select *pPrio
1e540 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69  r;        /* Pri
1e550 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63  or select in a c
1e560 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73  ompound select s
1e570 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65  tatement */.  Se
1e580 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  lect *pNext;    
1e590 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c       /* Next sel
1e5a0 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20  ect to the left 
1e5b0 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f  in a compound */
1e5c0 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b  .  Expr *pLimit;
1e5d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d            /* LIM
1e5e0 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  IT expression. N
1e5f0 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
1e600 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ed. */.  With *p
1e610 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
1e620 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61  /* WITH clause a
1e630 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20  ttached to this 
1e640 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e  select. Or NULL.
1e650 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1e660 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55  TE_OMIT_WINDOWFU
1e670 4e 43 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69  NC.  Window *pWi
1e680 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  n;          /* L
1e690 69 73 74 20 6f 66 20 77 69 6e 64 6f 77 20 66 75  ist of window fu
1e6a0 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 57 69 6e  nctions */.  Win
1e6b0 64 6f 77 20 2a 70 57 69 6e 44 65 66 6e 3b 20 20  dow *pWinDefn;  
1e6c0 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 6e      /* List of n
1e6d0 61 6d 65 64 20 77 69 6e 64 6f 77 20 64 65 66 69  amed window defi
1e6e0 6e 69 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69  nitions */.#endi
1e6f0 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  f.};../*.** Allo
1e700 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53  wed values for S
1e710 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20  elect.selFlags. 
1e720 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78   The "SF" prefix
1e730 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22   stands for.** "
1e740 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a  Select Flag"..**
1e750 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
1e760 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b  aints (all check
1e770 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
1e780 0a 2a 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67  .**     SF_HasAg
1e790 67 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41  g     == NC_HasA
1e7a0 67 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e  gg.**     SF_Min
1e7b0 4d 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69  MaxAgg  == NC_Mi
1e7c0 6e 4d 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53  nMaxAgg     == S
1e7d0 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
1e7e0 58 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65  X.**     SF_Fixe
1e7f0 64 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f  dLimit == WHERE_
1e800 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65  USE_LIMIT.*/.#de
1e810 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74  fine SF_Distinct
1e820 20 20 20 20 20 20 20 30 78 30 30 30 30 31 20 20         0x00001  
1e830 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64  /* Output should
1e840 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a   be DISTINCT */.
1e850 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20  #define SF_All  
1e860 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 30            0x0000
1e870 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74  2  /* Includes t
1e880 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a  he ALL keyword *
1e890 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73  /.#define SF_Res
1e8a0 6f 6c 76 65 64 20 20 20 20 20 20 20 30 78 30 30  olved       0x00
1e8b0 30 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69  004  /* Identifi
1e8c0 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  ers have been re
1e8d0 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e  solved */.#defin
1e8e0 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20  e SF_Aggregate  
1e8f0 20 20 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20      0x00008  /* 
1e900 43 6f 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e  Contains agg fun
1e910 63 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55  ctions or a GROU
1e920 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  P BY */.#define 
1e930 53 46 5f 48 61 73 41 67 67 20 20 20 20 20 20 20  SF_HasAgg       
1e940 20 20 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f    0x00010  /* Co
1e950 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
1e960 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64   functions */.#d
1e970 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68  efine SF_UsesEph
1e980 65 6d 65 72 61 6c 20 20 30 78 30 30 30 32 30 20  emeral  0x00020 
1e990 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65   /* Uses the Ope
1e9a0 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64  nEphemeral opcod
1e9b0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
1e9c0 45 78 70 61 6e 64 65 64 20 20 20 20 20 20 20 30  Expanded       0
1e9d0 78 30 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74  x00040  /* sqlit
1e9e0 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29  e3SelectExpand()
1e9f0 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20   called on this 
1ea00 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61  */.#define SF_Ha
1ea10 73 54 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30  sTypeInfo    0x0
1ea20 30 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75  0080  /* FROM su
1ea30 62 71 75 65 72 69 65 73 20 68 61 76 65 20 54 61  bqueries have Ta
1ea40 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a  ble metadata */.
1ea50 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f  #define SF_Compo
1ea60 75 6e 64 20 20 20 20 20 20 20 30 78 30 30 31 30  und       0x0010
1ea70 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20  0  /* Part of a 
1ea80 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a  compound query *
1ea90 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c  /.#define SF_Val
1eaa0 75 65 73 20 20 20 20 20 20 20 20 20 30 78 30 30  ues         0x00
1eab0 32 30 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69  200  /* Synthesi
1eac0 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20  zed from VALUES 
1ead0 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
1eae0 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20  e SF_MultiValue 
1eaf0 20 20 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20      0x00400  /* 
1eb00 53 69 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65  Single VALUES te
1eb10 72 6d 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65  rm with multiple
1eb20 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65   rows */.#define
1eb30 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20   SF_NestedFrom  
1eb40 20 20 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50     0x00800  /* P
1eb50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68  art of a parenth
1eb60 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75  esized FROM clau
1eb70 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  se */.#define SF
1eb80 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20  _MinMaxAgg      
1eb90 30 78 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72  0x01000  /* Aggr
1eba0 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67  egate containing
1ebb0 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20   min() or max() 
1ebc0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65  */.#define SF_Re
1ebd0 63 75 72 73 69 76 65 20 20 20 20 20 20 30 78 30  cursive      0x0
1ebe0 32 30 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63  2000  /* The rec
1ebf0 75 72 73 69 76 65 20 70 61 72 74 20 6f 66 20 61  ursive part of a
1ec00 20 72 65 63 75 72 73 69 76 65 20 43 54 45 20 2a   recursive CTE *
1ec10 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78  /.#define SF_Fix
1ec20 65 64 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34  edLimit     0x04
1ec30 30 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52  000  /* nSelectR
1ec40 6f 77 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73  ow set by a cons
1ec50 74 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64  tant LIMIT */.#d
1ec60 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f  efine SF_MaybeCo
1ec70 6e 76 65 72 74 20 20 20 30 78 30 38 30 30 30 20  nvert   0x08000 
1ec80 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74   /* Need convert
1ec90 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
1eca0 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64  Subquery() */.#d
1ecb0 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74  efine SF_Convert
1ecc0 65 64 20 20 20 20 20 20 30 78 31 30 30 30 30 20  ed      0x10000 
1ecd0 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f   /* By convertCo
1ece0 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1ecf0 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
1ed00 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69  ine SF_IncludeHi
1ed10 64 64 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f  dden  0x20000  /
1ed20 2a 20 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e  * Include hidden
1ed30 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70   columns in outp
1ed40 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ut */.#define SF
1ed50 5f 43 6f 6d 70 6c 65 78 52 65 73 75 6c 74 20 20  _ComplexResult  
1ed60 30 78 34 30 30 30 30 20 20 2f 2a 20 52 65 73 75  0x40000  /* Resu
1ed70 6c 74 20 63 6f 6e 74 61 69 6e 73 20 73 75 62 71  lt contains subq
1ed80 75 65 72 79 20 6f 72 20 66 75 6e 63 74 69 6f 6e  uery or function
1ed90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 57   */.#define SF_W
1eda0 68 65 72 65 42 65 67 69 6e 20 20 20 20 20 30 78  hereBegin     0x
1edb0 38 30 30 30 30 20 20 2f 2a 20 52 65 61 6c 6c 79  80000  /* Really
1edc0 20 61 20 57 68 65 72 65 42 65 67 69 6e 28 29 20   a WhereBegin() 
1edd0 63 61 6c 6c 2e 20 20 44 65 62 75 67 20 4f 6e 6c  call.  Debug Onl
1ede0 79 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  y */../*.** The 
1edf0 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c  results of a SEL
1ee00 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74 72  ECT can be distr
1ee10 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61  ibuted in severa
1ee20 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e  l ways, as defin
1ee30 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20  ed.** by one of 
1ee40 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  the following ma
1ee50 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22  cros.  The "SRT"
1ee60 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53   prefix means "S
1ee70 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20  ELECT Result.** 
1ee80 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  Type"..**.**    
1ee90 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
1eea0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61   Store results a
1eeb0 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d  s a key in a tem
1eec0 70 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20  porary index.** 
1eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eee0 20 20 20 20 69 64 65 6e 74 69 66 69 65 64 20 62      identified b
1eef0 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  y pDest->iSDParm
1ef00 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1ef10 45 78 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f  Except      Remo
1ef20 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  ve results from 
1ef30 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e  the temporary in
1ef40 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61  dex pDest->iSDPa
1ef50 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  rm..**.**     SR
1ef60 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 53 74  T_Exists      St
1ef70 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72  ore a 1 in memor
1ef80 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53  y cell pDest->iS
1ef90 44 50 61 72 6d 20 69 66 20 74 68 65 20 72 65 73  DParm if the res
1efa0 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ult.**          
1efb0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69             set i
1efc0 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a  s not empty..**.
1efd0 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63 61  **     SRT_Disca
1efe0 72 64 20 20 20 20 20 54 68 72 6f 77 20 74 68 65  rd     Throw the
1eff0 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20   results away.  
1f000 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
1f010 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20  SELECT.**       
1f020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1f030 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
1f040 74 72 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f  triggers whose o
1f050 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a  nly purpose is.*
1f060 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f070 20 20 20 20 20 20 74 68 65 20 73 69 64 65 2d 65        the side-e
1f080 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69  ffects of functi
1f090 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f  ons..**.** All o
1f0a0 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
1f0b0 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74  free to ignore t
1f0c0 68 65 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c  heir ORDER BY cl
1f0d0 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74  ause. Those that
1f0e0 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20  .** follow must 
1f0f0 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20  honor the ORDER 
1f100 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a  BY clause..**.**
1f110 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20       SRT_Output 
1f120 20 20 20 20 20 47 65 6e 65 72 61 74 65 20 61 20       Generate a 
1f130 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75  row of output (u
1f140 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75  sing the OP_Resu
1f150 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20  ltRow.**        
1f160 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 63               opc
1f170 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f  ode) for each ro
1f180 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  w in the result 
1f190 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  set..**.**     S
1f1a0 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f  RT_Mem         O
1f1b0 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68 65  nly valid if the
1f1c0 20 72 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e   result is a sin
1f1d0 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20  gle column..**  
1f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1f0 20 20 20 53 74 6f 72 65 20 74 68 65 20 66 69 72     Store the fir
1f200 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  st column of the
1f210 20 66 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f   first result ro
1f220 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  w.**            
1f230 20 20 20 20 20 20 20 20 20 69 6e 20 72 65 67 69           in regi
1f240 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50  ster pDest->iSDP
1f250 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e  arm then abandon
1f260 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20   the rest.**    
1f270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f280 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20 20   of the query.  
1f290 54 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e  This destination
1f2a0 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20   implies "LIMIT 
1f2b0 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  1"..**.**     SR
1f2c0 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 54 68  T_Set         Th
1f2d0 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65  e result must be
1f2e0 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
1f2f0 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a  .  Store each.**
1f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f310 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75       row of resu
1f320 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e  lt as the key in
1f330 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1f340 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20  DParm..**       
1f350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70                Ap
1f360 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79  ply the affinity
1f370 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20   pDest->affSdst 
1f380 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a  before storing.*
1f390 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f3a0 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20        results.  
1f3b0 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  Used to implemen
1f3c0 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  t "IN (SELECT ..
1f3d0 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  .)"..**.**     S
1f3e0 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43  RT_EphemTab    C
1f3f0 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61  reate an tempora
1f400 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1f410 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72  iSDParm and stor
1f420 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1f430 20 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73           the res
1f440 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63  ult there. The c
1f450 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70  ursor is left op
1f460 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20  en after.**     
1f470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f480 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73  returning.  This
1f490 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62   is like SRT_Tab
1f4a0 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  le except that.*
1f4b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f4c0 20 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69        this desti
1f4d0 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f  nation uses OP_O
1f4e0 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20  penEphemeral to 
1f4f0 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20  create.**       
1f500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1f510 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a  e table first..*
1f520 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72  *.**     SRT_Cor
1f530 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74  outine   Generat
1f540 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74  e a co-routine t
1f550 68 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65  hat returns a ne
1f560 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20  w row of.**     
1f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f580 72 65 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d  results each tim
1f590 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e  e it is invoked.
1f5a0 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e    The entry poin
1f5b0 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1f5c0 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
1f5d0 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74  co-routine is st
1f5e0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
1f5f0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a   pDest->iSDParm.
1f600 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1f610 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72         and the r
1f620 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f  esult row is sto
1f630 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44  red in pDest->nD
1f640 65 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a  est registers.**
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f660 20 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69       starting wi
1f670 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e  th pDest->iSdst.
1f680 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54  .**.**     SRT_T
1f690 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65  able       Store
1f6a0 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70   results in temp
1f6b0 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1f6c0 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1f6d0 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20     SRT_Fifo     
1f6e0 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20     This is like 
1f6f0 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63  SRT_EphemTab exc
1f700 65 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62  ept that the tab
1f710 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  le.**           
1f720 20 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73            is ass
1f730 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20  umed to already 
1f740 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69  be open.  SRT_Fi
1f750 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20  fo has.**       
1f760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1f770 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f  e additional pro
1f780 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61  perty of being a
1f790 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a  ble to ignore.**
1f7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7b0 20 20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42       the ORDER B
1f7c0 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  Y clause..**.** 
1f7d0 20 20 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f      SRT_DistFifo
1f7e0 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1f7f0 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  s in a temporary
1f800 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1f810 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20  DParm..**       
1f820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75                Bu
1f830 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f  t also use tempo
1f840 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1f850 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a  ->iSDParm+1 as.*
1f860 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f870 20 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f        a record o
1f880 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75  f all prior resu
1f890 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61  lts and ignore a
1f8a0 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20  ny duplicate.** 
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8c0 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20      rows.  Name 
1f8d0 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63  means:  "Distinc
1f8e0 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20  t Fifo"..**.**  
1f8f0 20 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20     SRT_Queue    
1f900 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1f910 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65   in priority que
1f920 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ue pDest->iSDPar
1f930 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20  m (really.**    
1f940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f950 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70   an index).  App
1f960 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e  end a sequence n
1f970 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c  umber so that al
1f980 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20  l entries.**    
1f990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9a0 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a   are distinct..*
1f9b0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1f9c0 74 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72  tQueue   Store r
1f9d0 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
1f9e0 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
1f9f0 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a  iSDParm only if.
1fa00 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1fa10 20 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20         the same 
1fa20 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72  record has never
1fa30 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66   been stored bef
1fa40 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20  ore.  The.**    
1fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa60 20 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d   index at pDest-
1fa70 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20  >iSDParm+1 hold 
1fa80 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73  all prior stores
1fa90 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  ..*/.#define SRT
1faa0 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20  _Union        1 
1fab0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1fac0 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
1fad0 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
1fae0 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20  SRT_Except      
1faf0 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65   2  /* Remove re
1fb00 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f  sult from a UNIO
1fb10 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  N index */.#defi
1fb20 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20  ne SRT_Exists   
1fb30 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20      3  /* Store 
1fb40 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  1 if the result 
1fb50 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a  is not empty */.
1fb60 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63  #define SRT_Disc
1fb70 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44  ard      4  /* D
1fb80 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72  o not save the r
1fb90 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20  esults anywhere 
1fba0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46  */.#define SRT_F
1fbb0 69 66 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f  ifo         5  /
1fbc0 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
1fbd0 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61  s data with an a
1fbe0 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a  utomatic rowid *
1fbf0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
1fc00 73 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a  stFifo     6  /*
1fc10 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20   Like SRT_Fifo, 
1fc20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c  but unique resul
1fc30 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  ts only */.#defi
1fc40 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20 20 20  ne SRT_Queue    
1fc50 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20      7  /* Store 
1fc60 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65  result in an que
1fc70 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ue */.#define SR
1fc80 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 20 38  T_DistQueue    8
1fc90 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75    /* Like SRT_Qu
1fca0 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20  eue, but unique 
1fcb0 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a  results only */.
1fcc0 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59  ./* The ORDER BY
1fcd0 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72   clause is ignor
1fce0 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68  ed for all of th
1fcf0 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69  e above */.#defi
1fd00 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65  ne IgnorableOrde
1fd10 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73  rby(X) ((X->eDes
1fd20 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75  t)<=SRT_DistQueu
1fd30 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  e)..#define SRT_
1fd40 4f 75 74 70 75 74 20 20 20 20 20 20 20 39 20 20  Output       9  
1fd50 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72  /* Output each r
1fd60 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
1fd70 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20  #define SRT_Mem 
1fd80 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53          10  /* S
1fd90 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
1fda0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a   memory cell */.
1fdb0 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20  #define SRT_Set 
1fdc0 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53          11  /* S
1fdd0 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20  tore results as 
1fde0 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
1fdf0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1fe00 45 70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20  EphemTab    12  
1fe10 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69  /* Create transi
1fe20 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72  ent tab and stor
1fe30 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  e like SRT_Table
1fe40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1fe50 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20  Coroutine   13  
1fe60 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69  /* Generate a si
1fe70 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75  ngle row of resu
1fe80 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
1fe90 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31 34  T_Table       14
1fea0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1feb0 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61  t as data with a
1fec0 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69  n automatic rowi
1fed0 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  d */../*.** An i
1fee0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
1fef0 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73  object describes
1ff00 20 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66   where to put of
1ff10 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a   the results of.
1ff20 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  ** a SELECT stat
1ff30 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ement..*/.struct
1ff40 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20   SelectDest {.  
1ff50 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20  u8 eDest;       
1ff60 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64       /* How to d
1ff70 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65  ispose of the re
1ff80 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52  sults.  On of SR
1ff90 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20  T_* above. */.  
1ffa0 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20  int iSDParm;    
1ffb0 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65       /* A parame
1ffc0 74 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20  ter used by the 
1ffd0 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d  eDest disposal m
1ffe0 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ethod */.  int i
1fff0 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Sdst;           
20000 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72  /* Base register
20010 20 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61   where results a
20020 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20  re written */.  
20030 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20  int nSdst;      
20040 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
20050 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f  f registers allo
20060 63 61 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  cated */.  char 
20070 2a 7a 41 66 66 53 64 73 74 3b 20 20 20 20 20 20  *zAffSdst;      
20080 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64  /* Affinity used
20090 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54   when eDest==SRT
200a0 5f 53 65 74 20 2a 2f 0a 20 20 45 78 70 72 4c 69  _Set */.  ExprLi
200b0 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f  st *pOrderBy;  /
200c0 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f  * Key columns fo
200d0 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20  r SRT_Queue and 
200e0 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f  SRT_DistQueue */
200f0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e  .};../*.** Durin
20100 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f  g code generatio
20110 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20  n of statements 
20120 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20  that do inserts 
20130 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45  into AUTOINCREME
20140 4e 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68  NT.** tables, th
20150 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f  e following info
20160 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63  rmation is attac
20170 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65  hed to the Table
20180 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20  .u.autoInc.p.** 
20190 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20  pointer of each 
201a0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61  autoincrement ta
201b0 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f  ble to record so
201c0 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74  me side informat
201d0 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ion that.** the 
201e0 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e  code generator n
201f0 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74  eeds.  We have t
20200 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65  o keep per-table
20210 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a   autoincrement.*
20220 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e  * information in
20230 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72   case inserts ar
20240 65 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74 72  e done within tr
20250 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72  iggers.  Trigger
20260 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d  s do not.** norm
20270 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20  ally coordinate 
20280 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73  their activities
20290 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64  , but we do need
202a0 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74   to coordinate t
202b0 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e  he.** loading an
202c0 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f  d saving of auto
202d0 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d  increment inform
202e0 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
202f0 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20   AutoincInfo {. 
20300 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e   AutoincInfo *pN
20310 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69  ext;   /* Next i
20320 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c  nfo block in a l
20330 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20  ist of them all 
20340 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
20350 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
20360 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c  ble this info bl
20370 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f  ock refers to */
20380 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
20390 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
203a0 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  x in sqlite3.aDb
203b0 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  [] of database h
203c0 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20  olding pTab */. 
203d0 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20   int regCtr;    
203e0 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
203f0 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   register holdin
20400 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e  g the rowid coun
20410 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ter */.};../*.**
20420 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e   At least one in
20430 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
20440 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
20450 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
20460 20 65 61 63 68 0a 2a 2a 20 74 72 69 67 67 65 72   each.** trigger
20470 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72   that may be fir
20480 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ed while parsing
20490 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41   an INSERT, UPDA
204a0 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20  TE or DELETE.** 
204b0 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73  statement. All s
204c0 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20  uch objects are 
204d0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69  stored in the li
204e0 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
204f0 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72   at.** Parse.pTr
20500 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c  iggerPrg and del
20510 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d  eted once statem
20520 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  ent compilation 
20530 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70  has been.** comp
20540 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56  leted..**.** A V
20550 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  dbe sub-program 
20560 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20  that implements 
20570 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45  the body and WHE
20580 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67  N clause of trig
20590 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72  ger.** TriggerPr
205a0 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75  g.pTrigger, assu
205b0 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f  ming a default O
205c0 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
205d0 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50  e of.** TriggerP
205e0 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74  rg.orconf, is st
205f0 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67  ored in the Trig
20600 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20  gerPrg.pProgram 
20610 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  variable..** The
20620 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
20630 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f  rg list never co
20640 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69  ntains two entri
20650 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  es with the same
20660 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62  .** values for b
20670 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64  oth pTrigger and
20680 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54   orconf..**.** T
20690 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
206a0 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62  olmask[0] variab
206b0 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d  le is set to a m
206c0 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
206d0 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64  umns.** accessed
206e0 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f   (or set to 0 fo
206f0 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64  r triggers fired
20700 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20   as a result of 
20710 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d  INSERT.** statem
20720 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79  ents). Similarly
20730 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  , the TriggerPrg
20740 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72  .aColmask[1] var
20750 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a  iable is set to.
20760 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77  ** a mask of new
20770 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20  .* columns used 
20780 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a  by the program..
20790 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
207a0 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72  rPrg {.  Trigger
207b0 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20   *pTrigger;     
207c0 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73   /* Trigger this
207d0 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64   program was cod
207e0 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69  ed from */.  Tri
207f0 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20  ggerPrg *pNext; 
20800 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74       /* Next ent
20810 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69  ry in Parse.pTri
20820 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a  ggerPrg list */.
20830 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
20840 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f  rogram;   /* Pro
20850 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  gram implementin
20860 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e  g pTrigger/orcon
20870 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e  f */.  int orcon
20880 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  f;             /
20890 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
208a0 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a  FLICT policy */.
208b0 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32    u32 aColmask[2
208c0 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ];        /* Mas
208d0 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77  ks of old.*, new
208e0 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73  .* columns acces
208f0 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  sed */.};../*.**
20900 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74   The yDbMask dat
20910 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69  atype for the bi
20920 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74  tmask of all att
20930 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
20940 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
20950 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20  AX_ATTACHED>30. 
20960 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
20970 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28  d char yDbMask[(
20980 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
20990 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66  HED+9)/8];.# def
209a0 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d  ine DbMaskTest(M
209b0 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29  ,I)    (((M)[(I)
209c0 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29  /8]&(1<<((I)&7))
209d0 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44  )!=0).# define D
209e0 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20  bMaskZero(M)    
209f0 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73    memset((M),0,s
20a00 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69  izeof(M)).# defi
20a10 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49  ne DbMaskSet(M,I
20a20 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d  )     (M)[(I)/8]
20a30 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23  |=(1<<((I)&7)).#
20a40 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c   define DbMaskAl
20a50 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74  lZero(M)   sqlit
20a60 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
20a70 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  M).# define DbMa
20a80 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28  skNonZero(M)   (
20a90 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
20aa0 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73  Zero(M)==0).#els
20ab0 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69  e.  typedef unsi
20ac0 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b  gned int yDbMask
20ad0 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ;.# define DbMas
20ae0 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28  kTest(M,I)    ((
20af0 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31  (M)&(((yDbMask)1
20b00 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64  )<<(I)))!=0).# d
20b10 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f  efine DbMaskZero
20b20 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23  (M)      (M)=0.#
20b30 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65   define DbMaskSe
20b40 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d  t(M,I)     (M)|=
20b50 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28  (((yDbMask)1)<<(
20b60 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  I)).# define DbM
20b70 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20  askAllZero(M)   
20b80 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20  (M)==0.# define 
20b90 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29  DbMaskNonZero(M)
20ba0 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66     (M)!=0.#endif
20bb0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70  ../*.** An SQL p
20bc0 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
20bd0 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73  A copy of this s
20be0 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
20bf0 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68  ed through.** th
20c00 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77  e parser and dow
20c10 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70  n into all the p
20c20 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75  arser action rou
20c30 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  tine in order to
20c40 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64  .** carry around
20c50 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
20c60 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74  t is global to t
20c70 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e  he entire parse.
20c80 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63  .**.** The struc
20c90 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20  ture is divided 
20ca0 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20  into two parts. 
20cb0 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72   When the parser
20cc0 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e   and code.** gen
20cd0 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73  erate call thems
20ce0 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c  elves recursivel
20cf0 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72  y, the first par
20d00 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75  t of the structu
20d10 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e  re.** is constan
20d20 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64  t but the second
20d30 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61   part is reset a
20d40 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
20d50 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61  and end of.** ea
20d60 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a  ch recursion..**
20d70 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f  .** The nTableLo
20d80 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63  ck and aTableLoc
20d90 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  k variables are 
20da0 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65  only used if the
20db0 20 73 68 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a   shared-cache.**
20dc0 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
20dd0 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54  led (if sqlite3T
20de0 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44  sd()->useSharedD
20df0 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68  ata is true). Th
20e00 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  ey are.** used t
20e10 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20  o store the set 
20e20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72  of table-locks r
20e30 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
20e40 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a  tatement being.*
20e50 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63  * compiled. Func
20e60 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c  tion sqlite3Tabl
20e70 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20  eLock() is used 
20e80 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74  to add entries t
20e90 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a  o the.** list..*
20ea0 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b  /.struct Parse {
20eb0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
20ec0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d          /* The m
20ed0 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72  ain database str
20ee0 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72  ucture */.  char
20ef0 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20   *zErrMsg;      
20f00 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73   /* An error mes
20f10 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a  sage */.  Vdbe *
20f20 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f  pVdbe;         /
20f30 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20  * An engine for 
20f40 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61  executing databa
20f50 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20  se bytecode */. 
20f60 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
20f70 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20        /* Return 
20f80 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74  code from execut
20f90 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e  ion */.  u8 colN
20fa0 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a  amesSet;      /*
20fb0 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43   TRUE after OP_C
20fc0 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65  olumnName has be
20fd0 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64  en issued to pVd
20fe0 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b  be */.  u8 check
20ff0 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20  Schema;      /* 
21000 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f  Causes schema co
21010 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72  okie check after
21020 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75   an error */.  u
21030 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20  8 nested;       
21040 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
21050 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
21060 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65   the parser/code
21070 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20   generator */.  
21080 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20  u8 nTempReg;    
21090 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
210a0 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  f temporary regi
210b0 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65  sters in aTempRe
210c0 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75  g[] */.  u8 isMu
210d0 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a  ltiWrite;     /*
210e0 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
210f0 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e  nt may modify/in
21100 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f  sert multiple ro
21110 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62  ws */.  u8 mayAb
21120 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ort;         /* 
21130 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
21140 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41  t may throw an A
21150 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a  BORT exception *
21160 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75  /.  u8 hasCompou
21170 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64  nd;      /* Need
21180 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65   to invoke conve
21190 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
211a0 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
211b0 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74    u8 okConstFact
211c0 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20  or;    /* OK to 
211d0 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  factor out const
211e0 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64 69 73  ants */.  u8 dis
211f0 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f  ableLookaside; /
21200 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65  * Number of time
21210 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73 20  s lookaside has 
21220 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f  been disabled */
21230 0a 20 20 75 38 20 64 69 73 61 62 6c 65 56 74 61  .  u8 disableVta
21240 62 3b 20 20 20 20 20 20 2f 2a 20 44 69 73 61 62  b;      /* Disab
21250 6c 65 20 61 6c 6c 20 76 69 72 74 75 61 6c 20 74  le all virtual t
21260 61 62 6c 65 73 20 66 6f 72 20 74 68 69 73 20 70  ables for this p
21270 61 72 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  arse */.  int nR
21280 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f  angeReg;       /
21290 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65  * Size of the te
212a0 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
212b0 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   block */.  int 
212c0 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  iRangeReg;      
212d0 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74   /* First regist
212e0 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  er in temporary 
212f0 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a  register block *
21300 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
21310 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
21320 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65  er of errors see
21330 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b  n */.  int nTab;
21340 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
21350 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75  umber of previou
21360 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44  sly allocated VD
21370 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20  BE cursors */.  
21380 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20  int nMem;       
21390 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
213a0 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75  f memory cells u
213b0 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
213c0 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20  int szOpAlloc;  
213d0 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66       /* Bytes of
213e0 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 61 6c   memory space al
213f0 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65  located for Vdbe
21400 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  .aOp[] */.  int 
21410 69 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20  iSelfTab;       
21420 20 2f 2a 20 54 61 62 6c 65 20 61 73 73 6f 63 69   /* Table associ
21430 61 74 65 64 20 77 69 74 68 20 61 6e 20 69 6e 64  ated with an ind
21440 65 78 20 6f 6e 20 65 78 70 72 2c 20 6f 72 20 6e  ex on expr, or n
21450 65 67 61 74 69 76 65 0a 20 20 20 20 20 20 20 20  egative.        
21460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
21470 2a 20 6f 66 20 74 68 65 20 62 61 73 65 20 72 65  * of the base re
21480 67 69 73 74 65 72 20 64 75 72 69 6e 67 20 63 68  gister during ch
21490 65 63 6b 2d 63 6f 6e 73 74 72 61 69 6e 74 20 65  eck-constraint e
214a0 76 61 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61  val */.  int nLa
214b0 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  bel;          /*
214c0 20 54 68 65 20 2a 6e 65 67 61 74 69 76 65 2a 20   The *negative* 
214d0 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  of the number of
214e0 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a   labels used */.
214f0 20 20 69 6e 74 20 6e 4c 61 62 65 6c 41 6c 6c 6f    int nLabelAllo
21500 63 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  c;     /* Number
21510 20 6f 66 20 73 6c 6f 74 73 20 69 6e 20 61 4c 61   of slots in aLa
21520 62 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c  bel */.  int *aL
21530 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  abel;         /*
21540 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74   Space to hold t
21550 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 45  he labels */.  E
21560 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45  xprList *pConstE
21570 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  xpr;/* Constant 
21580 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
21590 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e   Token constrain
215a0 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66  tName;/* Name of
215b0 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
215c0 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
215d0 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d  parsed */.  yDbM
215e0 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20  ask writeMask;  
215f0 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74   /* Start a writ
21600 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  e transaction on
21610 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73   these databases
21620 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f   */.  yDbMask co
21630 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69  okieMask;  /* Bi
21640 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20  tmask of schema 
21650 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73  verified databas
21660 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  es */.  int regR
21670 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  owid;        /* 
21680 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
21690 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45   rowid of CREATE
216a0 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a   TABLE entry */.
216b0 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20    int regRoot;  
216c0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
216d0 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20  er holding root 
216e0 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
216f0 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20  new objects */. 
21700 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20   int nMaxArg;   
21710 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67        /* Max arg
21720 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72  s passed to user
21730 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62   function by sub
21740 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e  -program */.  in
21750 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20  t nSelect;      
21760 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
21770 53 45 4c 45 43 54 20 73 74 6d 74 73 2e 20 43 6f  SELECT stmts. Co
21780 75 6e 74 65 72 20 66 6f 72 20 53 65 6c 65 63 74  unter for Select
21790 2e 73 65 6c 49 64 20 2a 2f 0a 23 69 66 6e 64 65  .selId */.#ifnde
217a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
217b0 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74  ARED_CACHE.  int
217c0 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20   nTableLock;    
217d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
217e0 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65   locks in aTable
217f0 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c  Lock */.  TableL
21800 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b  ock *aTableLock;
21810 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62   /* Required tab
21820 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61  le locks for sha
21830 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
21840 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69  /.#endif.  Autoi
21850 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20  ncInfo *pAinc;  
21860 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
21870 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45  bout AUTOINCREME
21880 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20  NT counters */. 
21890 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65   Parse *pTopleve
218a0 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73  l;    /* Parse s
218b0 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69  tructure for mai
218c0 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55  n program (or NU
218d0 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  LL) */.  Table *
218e0 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a  pTriggerTab;  /*
218f0 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20   Table triggers 
21900 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20  are being coded 
21910 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64  for */.  int add
21920 72 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a  rCrTab;       /*
21930 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43   Address of OP_C
21940 72 65 61 74 65 42 74 72 65 65 20 6f 70 63 6f 64  reateBtree opcod
21950 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c  e on CREATE TABL
21960 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72  E */.  u32 nQuer
21970 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45  yLoop;      /* E
21980 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65  st number of ite
21990 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65  rations of a que
219a0 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20  ry (10*log2(N)) 
219b0 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b  */.  u32 oldmask
219c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
219d0 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
219e0 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
219f0 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20  .  u32 newmask; 
21a00 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
21a10 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  of new.* columns
21a20 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20   referenced */. 
21a30 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20   u8 eTriggerOp; 
21a40 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41        /* TK_UPDA
21a50 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72  TE, TK_INSERT or
21a60 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20   TK_DELETE */.  
21a70 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20  u8 eOrconf;     
21a80 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
21a90 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69  ON CONFLICT poli
21aa0 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20 73  cy for trigger s
21ab0 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73  teps */.  u8 dis
21ac0 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f  ableTriggers;  /
21ad0 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c  * True to disabl
21ae0 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20  e triggers */.. 
21af0 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   /**************
21b00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21b10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21b20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21b30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a  ************.  *
21b40 2a 20 46 69 65 6c 64 73 20 61 62 6f 76 65 20 6d  * Fields above m
21b50 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ust be initializ
21b60 65 64 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65  ed to zero.  The
21b70 20 66 69 65 6c 64 73 20 74 68 61 74 20 66 6f 6c   fields that fol
21b80 6c 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74  low,.  ** down t
21b90 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  o the beginning 
21ba0 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 76 65  of the recursive
21bb0 20 73 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74   section, do not
21bc0 20 6e 65 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a   need to be.  **
21bd0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20   initialized as 
21be0 74 68 65 79 20 77 69 6c 6c 20 62 65 20 73 65 74  they will be set
21bf0 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 75 73   before being us
21c00 65 64 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72  ed.  The boundar
21c10 79 20 69 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d  y is.  ** determ
21c20 69 6e 65 64 20 62 79 20 6f 66 66 73 65 74 6f 66  ined by offsetof
21c30 28 50 61 72 73 65 2c 61 54 65 6d 70 52 65 67 29  (Parse,aTempReg)
21c40 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
21c50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21c60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21c70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21c80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
21c90 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b  .  int aTempReg[
21ca0 38 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 6f  8];        /* Ho
21cb0 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74  lding area for t
21cc0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
21cd0 72 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e  rs */.  Token sN
21ce0 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20  ameToken;       
21cf0 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e  /* Token with un
21d00 71 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61  qualified schema
21d10 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a   object name */.
21d20 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  /************
21d30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21d40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21d50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21d60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a  ************.  *
21d70 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74  * Above is const
21d80 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75  ant between recu
21d90 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69  rsions.  Below i
21da0 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61  s reset before a
21db0 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61  nd after.  ** ea
21dc0 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54  ch recursion.  T
21dd0 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77  he boundary betw
21de0 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65  een these two re
21df0 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69  gions is determi
21e00 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f  ned.  ** using o
21e10 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c  ffsetof(Parse,sL
21e20 61 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65  astToken) so the
21e30 20 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c   sLastToken fiel
21e40 64 20 6d 75 73 74 20 62 65 20 74 68 65 0a 20 20  d must be the.  
21e50 2a 2a 20 66 69 72 73 74 20 66 69 65 6c 64 20 69  ** first field i
21e60 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  n the recursive 
21e70 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  region..  ******
21e80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21e90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21eb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ec0 2a 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61  **/..  Token sLa
21ed0 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f  stToken;       /
21ee0 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e  * The last token
21ef0 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56   parsed */.  ynV
21f00 61 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20  ar nVar;        
21f10 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
21f20 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65   of '?' variable
21f30 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51  s seen in the SQ
21f40 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38  L so far */.  u8
21f50 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20   iPkSortOrder;  
21f60 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f          /* ASC o
21f70 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47  r DESC for INTEG
21f80 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  ER PRIMARY KEY *
21f90 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20  /.  u8 explain; 
21fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21fb0 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50   True if the EXP
21fc0 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75  LAIN flag is fou
21fd0 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20  nd on the query 
21fe0 2a 2f 0a 23 69 66 20 21 28 64 65 66 69 6e 65 64  */.#if !(defined
21ff0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
22000 54 55 41 4c 54 41 42 4c 45 29 20 26 26 20 64 65  TUALTABLE) && de
22010 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
22020 54 5f 41 4c 54 45 52 54 41 42 4c 45 29 29 0a 20  T_ALTERTABLE)). 
22030 20 75 38 20 65 50 61 72 73 65 4d 6f 64 65 3b 20   u8 eParseMode; 
22040 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 41             /* PA
22050 52 53 45 5f 4d 4f 44 45 5f 58 58 58 20 63 6f 6e  RSE_MODE_XXX con
22060 73 74 61 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  stant */.#endif.
22070 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
22080 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
22090 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b  .  int nVtabLock
220a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
220b0 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61  Number of virtua
220c0 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b  l tables to lock
220d0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
220e0 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
220f0 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
22100 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74  sion tree height
22110 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d   of current sub-
22120 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65  select */.#ifnde
22130 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
22140 50 4c 41 49 4e 0a 20 20 69 6e 74 20 61 64 64 72  PLAIN.  int addr
22150 45 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20  Explain;        
22160 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
22170 63 75 72 72 65 6e 74 20 4f 50 5f 45 78 70 6c 61  current OP_Expla
22180 69 6e 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  in opcode */.#en
22190 64 69 66 0a 20 20 56 4c 69 73 74 20 2a 70 56 4c  dif.  VList *pVL
221a0 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ist;            
221b0 2f 2a 20 4d 61 70 70 69 6e 67 20 62 65 74 77 65  /* Mapping betwe
221c0 65 6e 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  en variable name
221d0 73 20 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a 2f  s and numbers */
221e0 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65 70  .  Vdbe *pReprep
221f0 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  are;         /* 
22200 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70 61  VM being reprepa
22210 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70 72  red (sqlite3Repr
22220 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f  epare()) */.  co
22230 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b  nst char *zTail;
22240 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53          /* All S
22250 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65  QL text past the
22260 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20   last semicolon 
22270 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c  parsed */.  Tabl
22280 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20  e *pNewTable;   
22290 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65        /* A table
222a0 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74   being construct
222b0 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42  ed by CREATE TAB
222c0 4c 45 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  LE */.  Index *p
222d0 4e 65 77 49 6e 64 65 78 3b 20 20 20 20 20 20 20  NewIndex;       
222e0 20 20 2f 2a 20 41 6e 20 69 6e 64 65 78 20 62 65    /* An index be
222f0 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20  ing constructed 
22300 62 79 20 43 52 45 41 54 45 20 49 4e 44 45 58 2e  by CREATE INDEX.
22310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22320 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
22330 41 6c 73 6f 20 75 73 65 64 20 74 6f 20 68 6f 6c  Also used to hol
22340 64 20 72 65 64 75 6e 64 61 6e 74 20 55 4e 49 51  d redundant UNIQ
22350 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 0a 20  UE constraints. 
22360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22370 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 64 75             ** du
22380 72 69 6e 67 20 61 20 52 45 4e 41 4d 45 20 43 4f  ring a RENAME CO
22390 4c 55 4d 4e 20 2a 2f 0a 20 20 54 72 69 67 67 65  LUMN */.  Trigge
223a0 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20  r *pNewTrigger; 
223b0 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75      /* Trigger u
223c0 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62  nder construct b
223d0 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47  y a CREATE TRIGG
223e0 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ER */.  const ch
223f0 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
22400 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72  ; /* The 6th par
22410 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41  ameter to db->xA
22420 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f  uth callbacks */
22430 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
22440 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
22450 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20  E.  Token sArg; 
22460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22470 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f   Complete text o
22480 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d  f a module argum
22490 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ent */.  Table *
224a0 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  *apVtabLock;    
224b0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
224c0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
224d0 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20  needing locking 
224e0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c  */.#endif.  Tabl
224f0 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20  e *pZombieTab;  
22500 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
22510 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74   Table objects t
22520 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63  o delete after c
22530 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69  ode gen */.  Tri
22540 67 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65  ggerPrg *pTrigge
22550 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64  rPrg;  /* Linked
22560 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74   list of coded t
22570 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74  riggers */.  Wit
22580 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20  h *pWith;       
22590 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
225a0 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f  t WITH clause, o
225b0 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68  r NULL */.  With
225c0 20 2a 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20   *pWithToFree;  
225d0 20 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68        /* Free th
225e0 69 73 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61  is WITH object a
225f0 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
22600 20 70 61 72 73 65 20 2a 2f 0a 23 69 66 6e 64 65   parse */.#ifnde
22610 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  f SQLITE_OMIT_AL
22620 54 45 52 54 41 42 4c 45 0a 20 20 52 65 6e 61 6d  TERTABLE.  Renam
22630 65 54 6f 6b 65 6e 20 2a 70 52 65 6e 61 6d 65 3b  eToken *pRename;
22640 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 73 20 73       /* Tokens s
22650 75 62 6a 65 63 74 20 74 6f 20 72 65 6e 61 6d 69  ubject to renami
22660 6e 67 20 62 79 20 41 4c 54 45 52 20 54 41 42 4c  ng by ALTER TABL
22670 45 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a  E */.#endif.};..
22680 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f  #define PARSE_MO
22690 44 45 5f 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20  DE_NORMAL       
226a0 20 30 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45   0.#define PARSE
226b0 5f 4d 4f 44 45 5f 44 45 43 4c 41 52 45 5f 56 54  _MODE_DECLARE_VT
226c0 41 42 20 20 31 0a 23 64 65 66 69 6e 65 20 50 41  AB  1.#define PA
226d0 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f  RSE_MODE_RENAME_
226e0 43 4f 4c 55 4d 4e 20 32 0a 23 64 65 66 69 6e 65  COLUMN 2.#define
226f0 20 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41   PARSE_MODE_RENA
22700 4d 45 5f 54 41 42 4c 45 20 20 33 0a 0a 2f 2a 0a  ME_TABLE  3../*.
22710 2a 2a 20 53 69 7a 65 73 20 61 6e 64 20 70 6f 69  ** Sizes and poi
22720 6e 74 65 72 73 20 6f 66 20 76 61 72 69 6f 75 73  nters of various
22730 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 50 61   parts of the Pa
22740 72 73 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23  rse object..*/.#
22750 64 65 66 69 6e 65 20 50 41 52 53 45 5f 48 44 52  define PARSE_HDR
22760 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72  _SZ offsetof(Par
22770 73 65 2c 61 54 65 6d 70 52 65 67 29 20 2f 2a 20  se,aTempReg) /* 
22780 52 65 63 75 72 73 69 76 65 20 70 61 72 74 20 77  Recursive part w
22790 2f 6f 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a 23  /o aColCache*/.#
227a0 64 65 66 69 6e 65 20 50 41 52 53 45 5f 52 45 43  define PARSE_REC
227b0 55 52 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f 66  URSE_SZ offsetof
227c0 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65  (Parse,sLastToke
227d0 6e 29 20 20 20 20 2f 2a 20 52 65 63 75 72 73 69  n)    /* Recursi
227e0 76 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69  ve part */.#defi
227f0 6e 65 20 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a  ne PARSE_TAIL_SZ
22800 20 28 73 69 7a 65 6f 66 28 50 61 72 73 65 29 2d   (sizeof(Parse)-
22810 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a  PARSE_RECURSE_SZ
22820 29 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73 69  ) /* Non-recursi
22830 76 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69  ve part */.#defi
22840 6e 65 20 50 41 52 53 45 5f 54 41 49 4c 28 58 29  ne PARSE_TAIL(X)
22850 20 28 28 28 63 68 61 72 2a 29 28 58 29 29 2b 50   (((char*)(X))+P
22860 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29  ARSE_RECURSE_SZ)
22870 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
22880 74 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52  tail */../*.** R
22890 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63 75  eturn true if cu
228a0 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61  rrently inside a
228b0 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  n sqlite3_declar
228c0 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a  e_vtab() call..*
228d0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
228e0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
228f0 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  E.  #define IN_D
22900 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65  ECLARE_VTAB 0.#e
22910 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  lse.  #define IN
22920 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70  _DECLARE_VTAB (p
22930 50 61 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64  Parse->eParseMod
22940 65 3d 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45  e==PARSE_MODE_DE
22950 43 4c 41 52 45 5f 56 54 41 42 29 0a 23 65 6e 64  CLARE_VTAB).#end
22960 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
22970 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45  SQLITE_OMIT_ALTE
22980 52 54 41 42 4c 45 29 0a 20 20 23 64 65 66 69 6e  RTABLE).  #defin
22990 65 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45  e IN_RENAME_OBJE
229a0 43 54 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65  CT 0.#else.  #de
229b0 66 69 6e 65 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f  fine IN_RENAME_O
229c0 42 4a 45 43 54 20 28 70 50 61 72 73 65 2d 3e 65  BJECT (pParse->e
229d0 50 61 72 73 65 4d 6f 64 65 3e 3d 50 41 52 53 45  ParseMode>=PARSE
229e0 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c  _MODE_RENAME_COL
229f0 55 4d 4e 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  UMN).#endif..#if
22a00 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
22a10 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
22a20 45 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  E) && defined(SQ
22a30 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
22a40 41 42 4c 45 29 0a 20 20 23 64 65 66 69 6e 65 20  ABLE).  #define 
22a50 49 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52 53 45  IN_SPECIAL_PARSE
22a60 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69   0.#else.  #defi
22a70 6e 65 20 49 4e 5f 53 50 45 43 49 41 4c 5f 50 41  ne IN_SPECIAL_PA
22a80 52 53 45 20 28 70 50 61 72 73 65 2d 3e 65 50 61  RSE (pParse->ePa
22a90 72 73 65 4d 6f 64 65 21 3d 50 41 52 53 45 5f 4d  rseMode!=PARSE_M
22aa0 4f 44 45 5f 4e 4f 52 4d 41 4c 29 0a 23 65 6e 64  ODE_NORMAL).#end
22ab0 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
22ac0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
22ad0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
22ae0 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64   can be declared
22af0 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20   on a stack and 
22b00 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20  used.** to save 
22b10 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43  the Parse.zAuthC
22b20 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20  ontext value so 
22b30 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
22b40 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a  estored later..*
22b50 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  /.struct AuthCon
22b60 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63  text {.  const c
22b70 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
22b80 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65  t;   /* Put save
22b90 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  d Parse.zAuthCon
22ba0 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50  text here */.  P
22bb0 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
22bc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
22bd0 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  e Parse structur
22be0 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42  e */.};../*.** B
22bf0 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f  itfield flags fo
22c00 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61  r P5 value in va
22c10 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a  rious opcodes..*
22c20 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
22c30 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64  raints (enforced
22c40 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
22c50 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e  **    OPFLAG_LEN
22c60 47 54 48 41 52 47 20 20 20 20 3d 3d 20 53 51 4c  GTHARG    == SQL
22c70 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a  ITE_FUNC_LENGTH.
22c80 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 54 59 50  **    OPFLAG_TYP
22c90 45 4f 46 41 52 47 20 20 20 20 3d 3d 20 53 51 4c  EOFARG    == SQL
22ca0 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a  ITE_FUNC_TYPEOF.
22cb0 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c  **    OPFLAG_BUL
22cc0 4b 43 53 52 20 20 20 20 20 20 3d 3d 20 42 54 52  KCSR      == BTR
22cd0 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20  EE_BULKLOAD.**  
22ce0 20 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20    OPFLAG_SEEKEQ 
22cf0 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 53        == BTREE_S
22d00 45 45 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46  EEK_EQ.**    OPF
22d10 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20  LAG_FORDELETE   
22d20 20 3d 3d 20 42 54 52 45 45 5f 46 4f 52 44 45 4c   == BTREE_FORDEL
22d30 45 54 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  ETE.**    OPFLAG
22d40 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d  _SAVEPOSITION ==
22d50 20 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54   BTREE_SAVEPOSIT
22d60 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  ION.**    OPFLAG
22d70 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20 3d 3d  _AUXDELETE    ==
22d80 20 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45   BTREE_AUXDELETE
22d90 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c  .*/.#define OPFL
22da0 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20  AG_NCHANGE      
22db0 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49   0x01    /* OP_I
22dc0 6e 73 65 72 74 3a 20 53 65 74 20 74 6f 20 75 70  nsert: Set to up
22dd0 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65  date db->nChange
22de0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
22df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e00 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f           /* Also
22e10 20 75 73 65 64 20 69 6e 20 50 32 20 28 6e 6f 74   used in P2 (not
22e20 20 50 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74   P5) of OP_Delet
22e30 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  e */.#define OPF
22e40 4c 41 47 5f 4e 4f 43 48 4e 47 20 20 20 20 20 20  LAG_NOCHNG      
22e50 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
22e60 56 43 6f 6c 75 6d 6e 20 6e 6f 63 68 61 6e 67 65  VColumn nochange
22e70 20 66 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23   for UPDATE */.#
22e80 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50  define OPFLAG_EP
22e90 48 45 4d 20 20 20 20 20 20 20 20 20 30 78 30 31  HEM         0x01
22ea0 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
22eb0 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70  : Ephemeral outp
22ec0 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66  ut is ok */.#def
22ed0 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  ine OPFLAG_LASTR
22ee0 4f 57 49 44 20 20 20 20 20 30 78 32 30 20 20 20  OWID     0x20   
22ef0 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74   /* Set to updat
22f00 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20  e db->lastRowid 
22f10 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22f20 47 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20  G_ISUPDATE      
22f30 30 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20  0x04    /* This 
22f40 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20  OP_Insert is an 
22f50 73 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64  sql UPDATE */.#d
22f60 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50  efine OPFLAG_APP
22f70 45 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20  END        0x08 
22f80 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69     /* This is li
22f90 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
22fa0 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  pend */.#define 
22fb0 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
22fc0 53 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20  SULT 0x10    /* 
22fd0 54 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73  Try to avoid a s
22fe0 65 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65  eek in BtreeInse
22ff0 72 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rt() */.#define 
23000 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20  OPFLAG_ISNOOP   
23010 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20       0x40    /* 
23020 4f 50 5f 44 65 6c 65 74 65 20 64 6f 65 73 20 70  OP_Delete does p
23030 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f  re-update-hook o
23040 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  nly */.#define O
23050 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
23060 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f      0x40    /* O
23070 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
23080 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20  ed for length() 
23090 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
230a0 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20  G_TYPEOFARG     
230b0 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x80    /* OP_Co
230c0 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
230d0 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23  or typeof() */.#
230e0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55  define OPFLAG_BU
230f0 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31  LKCSR       0x01
23100 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a      /* OP_Open**
23110 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75   used to open bu
23120 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65  lk cursor */.#de
23130 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b  fine OPFLAG_SEEK
23140 45 51 20 20 20 20 20 20 20 20 30 78 30 32 20 20  EQ        0x02  
23150 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63    /* OP_Open** c
23160 75 72 73 6f 72 20 75 73 65 73 20 45 51 20 73 65  ursor uses EQ se
23170 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  ek only */.#defi
23180 6e 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c  ne OPFLAG_FORDEL
23190 45 54 45 20 20 20 20 20 30 78 30 38 20 20 20 20  ETE     0x08    
231a0 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c  /* OP_Open shoul
231b0 64 20 75 73 65 20 42 54 52 45 45 5f 46 4f 52 44  d use BTREE_FORD
231c0 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  ELETE */.#define
231d0 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20   OPFLAG_P2ISREG 
231e0 20 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a        0x10    /*
231f0 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a   P2 to OP_Open**
23200 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e   is a register n
23210 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  umber */.#define
23220 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
23230 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
23240 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65   OP_Compare: use
23250 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   the permutation
23260 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
23270 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20  AG_SAVEPOSITION 
23280 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44   0x02    /* OP_D
23290 65 6c 65 74 65 2f 49 6e 73 65 72 74 3a 20 73 61  elete/Insert: sa
232a0 76 65 20 63 75 72 73 6f 72 20 70 6f 73 20 2a 2f  ve cursor pos */
232b0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
232c0 41 55 58 44 45 4c 45 54 45 20 20 20 20 20 30 78  AUXDELETE     0x
232d0 30 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65  04    /* OP_Dele
232e0 74 65 3a 20 69 6e 64 65 78 20 69 6e 20 61 20 44  te: index in a D
232f0 45 4c 45 54 45 20 6f 70 20 2a 2f 0a 23 64 65 66  ELETE op */.#def
23300 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e  ine OPFLAG_NOCHN
23310 47 5f 4d 41 47 49 43 20 20 30 78 36 64 20 20 20  G_MAGIC  0x6d   
23320 20 2f 2a 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72   /* OP_MakeRecor
23330 64 3a 20 73 65 72 69 61 6c 74 79 70 65 20 31 30  d: serialtype 10
23340 20 69 73 20 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a   is ok */../*. *
23350 20 45 61 63 68 20 74 72 69 67 67 65 72 20 70 72   Each trigger pr
23360 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
23370 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
23380 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73  stored as an ins
23390 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75  tance of. * stru
233a0 63 74 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20  ct Trigger.. *. 
233b0 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e  * Pointers to in
233c0 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
233d0 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74  t Trigger are st
233e0 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73  ored in two ways
233f0 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22  .. * 1. In the "
23400 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74  trigHash" hash t
23410 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68  able (part of th
23420 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20  e sqlite3* that 
23430 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 0a 20  represents the. 
23440 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20  *    database). 
23450 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67  This allows Trig
23460 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74  ger structures t
23470 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62  o be retrieved b
23480 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c  y name.. * 2. Al
23490 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63  l triggers assoc
234a0 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e  iated with a sin
234b0 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61  gle table form a
234c0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73   linked list, us
234d0 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e  ing the. *    pN
234e0 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74  ext member of st
234f0 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20  ruct Trigger. A 
23500 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66  pointer to the f
23510 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
23520 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64  the. *    linked
23530 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20   list is stored 
23540 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72  as the "pTrigger
23550 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  " member of the 
23560 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20  associated. *   
23570 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20   struct Table.. 
23580 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c  *. * The "step_l
23590 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e  ist" member poin
235a0 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
235b0 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e  element of a lin
235c0 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74  ked list. * cont
235d0 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73  aining the SQL s
235e0 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
235f0 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67  ied as the trigg
23600 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a  er program.. */.
23610 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b  struct Trigger {
23620 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
23630 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
23640 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72  e name of the tr
23650 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20  igger           
23660 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
23670 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20    char *table;  
23680 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
23690 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74   table or view t
236a0 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
236b0 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20  ger applies */. 
236c0 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
236d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
236e0 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
236f0 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
23700 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  RT         */.  
23710 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20  u8 tr_tm;       
23720 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
23730 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45  f TRIGGER_BEFORE
23740 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  , TRIGGER_AFTER 
23750 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e  */.  Expr *pWhen
23760 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
23770 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  The WHEN clause 
23780 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
23790 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20  n (may be NULL) 
237a0 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f  */.  IdList *pCo
237b0 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20  lumns;       /* 
237c0 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50  If this is an UP
237d0 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d  DATE OF <column-
237e0 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20  list> trigger,. 
237f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23800 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
23810 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73  <column-list> is
23820 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
23830 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
23840 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  a;        /* Sch
23850 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
23860 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  he trigger */.  
23870 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65  Schema *pTabSche
23880 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  ma;     /* Schem
23890 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
238a0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67   table */.  Trig
238b0 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69  gerStep *step_li
238c0 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74  st; /* Link list
238d0 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67   of trigger prog
238e0 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20  ram steps       
238f0 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67        */.  Trigg
23900 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  er *pNext;      
23910 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67     /* Next trigg
23920 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
23930 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  th the table */.
23940 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
23950 41 42 4c 45 5f 53 48 41 52 45 44 5f 53 43 48 45  ABLE_SHARED_SCHE
23960 4d 41 0a 20 20 63 68 61 72 20 2a 7a 54 61 62 53  MA.  char *zTabS
23970 63 68 65 6d 61 3b 20 20 20 20 20 20 20 2f 2a 20  chema;       /* 
23980 54 65 6d 70 20 74 72 69 67 67 65 72 73 20 69 6e  Temp triggers in
23990 20 49 73 53 68 61 72 65 64 53 63 68 65 6d 61 28   IsSharedSchema(
239a0 29 20 64 62 73 20 6f 6e 6c 79 20 2a 2f 0a 23 65  ) dbs only */.#e
239b0 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ndif.};../*.** A
239c0 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68   trigger is eith
239d0 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61  er a BEFORE or a
239e0 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e  n AFTER trigger.
239f0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
23a00 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74  constants.** det
23a10 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a  ermine which..**
23a20 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65  .** If there are
23a30 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65   multiple trigge
23a40 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66  rs, you might of
23a50 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64   some BEFORE and
23a60 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20   some AFTER..** 
23a70 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74  In that cases, t
23a80 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c  he constants bel
23a90 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74  ow can be ORed t
23aa0 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  ogether..*/.#def
23ab0 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f  ine TRIGGER_BEFO
23ac0 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52  RE  1.#define TR
23ad0 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a  IGGER_AFTER   2.
23ae0 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*. * An instan
23af0 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  ce of struct Tri
23b00 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64  ggerStep is used
23b10 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67   to store a sing
23b20 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
23b30 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61  . * that is a pa
23b40 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d  rt of a trigger-
23b50 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49  program.. *. * I
23b60 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
23b70 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61  ct TriggerStep a
23b80 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73  re stored in a s
23b90 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73  ingly linked lis
23ba0 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69  t (linked. * usi
23bb0 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d  ng the "pNext" m
23bc0 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65  ember) reference
23bd0 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c  d by the "step_l
23be0 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ist" member of t
23bf0 68 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64  he. * associated
23c00 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
23c10 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69  instance. The fi
23c20 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
23c30 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69  he linked list i
23c40 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73  s. * the first s
23c50 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67  tep of the trigg
23c60 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20  er-program.. *. 
23c70 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65  * The "op" membe
23c80 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74  r indicates whet
23c90 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44  her this is a "D
23ca0 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22  ELETE", "INSERT"
23cb0 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a  , "UPDATE" or. *
23cc0 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d   "SELECT" statem
23cd0 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67  ent. The meaning
23ce0 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d  s of the other m
23cf0 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d  embers is determ
23d00 69 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76  ined by the. * v
23d10 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20  alue of "op" as 
23d20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28  follows:. *. * (
23d30 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29  op == TK_INSERT)
23d40 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e  . * orconf    ->
23d50 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43   stores the ON C
23d60 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
23d70 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d  m. * pSelect   -
23d80 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
23d90 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
23da0 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65  SELECT ... state
23db0 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
23dc0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
23dd0 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72  stores a pointer
23de0 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73   to the SELECT s
23df0 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77  tatement. Otherw
23e00 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61  ise NULL.. * zTa
23e10 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74  rget   -> Dequot
23e20 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
23e30 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69  able to insert i
23e40 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  nto.. * pExprLis
23e50 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20  t -> If this is 
23e60 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
23e70 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74  .. VALUES ... st
23e80 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
23e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
23ea0 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73  is stores values
23eb0 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e   to be inserted.
23ec0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
23ed0 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e  . * pIdList   ->
23ee0 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
23ef0 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28  NSERT INTO ... (
23f00 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20  <column-names>) 
23f10 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20  VALUES .... *   
23f20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
23f30 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20  ment, then this 
23f40 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d  stores the colum
23f50 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a  n-names to be. *
23f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
23f70 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a  serted into.. *.
23f80 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c   * (op == TK_DEL
23f90 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20  ETE). * zTarget 
23fa0 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
23fb0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
23fc0 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a  to delete from..
23fd0 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
23fe0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
23ff0 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73   of the DELETE s
24000 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
24010 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
24020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
24030 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
24040 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50  . * (op == TK_UP
24050 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74  DATE). * zTarget
24060 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
24070 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
24080 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70   to update.. * p
24090 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
240a0 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
240b0 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
240c0 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
240d0 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
240e0 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
240f0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78  ise NULL.. * pEx
24100 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74  prList -> A list
24110 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
24120 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68  to update and th
24130 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f  e expressions to
24140 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20   update. *      
24150 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e          them to.
24160 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61   See sqlite3Upda
24170 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69  te() documentati
24180 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22  on of "pChanges"
24190 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
241a0 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a   argument.. *. *
241b0 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
241c0 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Step {.  u8 op; 
241d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
241e0 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
241f0 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
24200 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45  _INSERT, TK_SELE
24210 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e  CT */.  u8 orcon
24220 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
24230 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e  OE_Rollback etc.
24240 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
24250 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68  Trig;      /* Th
24260 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74  e trigger that t
24270 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61  his step is a pa
24280 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63  rt of */.  Selec
24290 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
242a0 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  /* SELECT statem
242b0 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e  ent or RHS of IN
242c0 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54  SERT INTO SELECT
242d0 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a   ... */.  char *
242e0 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f  zTarget;       /
242f0 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66  * Target table f
24300 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54  or DELETE, UPDAT
24310 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45  E, INSERT */.  E
24320 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
24330 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
24340 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45   clause for DELE
24350 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65  TE or UPDATE ste
24360 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ps */.  ExprList
24370 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20   *pExprList; /* 
24380 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55  SET clause for U
24390 50 44 41 54 45 20 2a 2f 0a 20 20 49 64 4c 69 73  PDATE */.  IdLis
243a0 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20  t *pIdList;     
243b0 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  /* Column names 
243c0 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  for INSERT */.  
243d0 55 70 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b  Upsert *pUpsert;
243e0 20 20 20 20 20 2f 2a 20 55 70 73 65 72 74 20 63       /* Upsert c
243f0 6c 61 75 73 65 73 20 6f 6e 20 61 6e 20 49 4e 53  lauses on an INS
24400 45 52 54 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ERT */.  char *z
24410 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  Span;         /*
24420 20 4f 72 69 67 69 6e 61 6c 20 53 51 4c 20 74 65   Original SQL te
24430 78 74 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61  xt of this comma
24440 6e 64 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  nd */.  TriggerS
24450 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  tep *pNext;  /* 
24460 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b  Next in the link
24470 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67  -list */.  Trigg
24480 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20  erStep *pLast;  
24490 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20  /* Last element 
244a0 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61  in link-list. Va
244b0 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d  lid for 1st elem
244c0 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   only */.};../*.
244d0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
244e0 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
244f0 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
24500 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  used by the sqli
24510 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74  teFix....** rout
24520 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c  ines as they wal
24530 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  k the parse tree
24540 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73   to make databas
24550 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20  e references.** 
24560 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70  explicit..*/.typ
24570 65 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69  edef struct DbFi
24580 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72  xer DbFixer;.str
24590 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20  uct DbFixer {.  
245a0 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
245b0 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69      /* The parsi
245c0 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72  ng context.  Err
245d0 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74  or messages writ
245e0 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  ten here */.  Sc
245f0 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
24600 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74    /* Fix items t
24610 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  o this schema */
24620 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b  .  int bVarOnly;
24630 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20         /* Check 
24640 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66  for variable ref
24650 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a  erences only */.
24660 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
24670 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75  b;    /* Make su
24680 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61  re all objects a
24690 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  re contained in 
246a0 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
246b0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
246c0 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f  Type;  /* Type o
246d0 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
246e0 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
246f0 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63   messages */.  c
24700 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d  onst Token *pNam
24710 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  e; /* Name of th
24720 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73  e container - us
24730 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73  ed for error mes
24740 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  sages */.};../*.
24750 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75  ** An objected u
24760 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74  sed to accumulat
24770 65 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20  e the text of a 
24780 73 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a  string where we.
24790 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73  ** do not necess
247a0 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62  arily know how b
247b0 69 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69  ig the string wi
247c0 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64  ll be in the end
247d0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69  ..*/.struct sqli
247e0 74 65 33 5f 73 74 72 20 7b 0a 20 20 73 71 6c 69  te3_str {.  sqli
247f0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
24800 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74   /* Optional dat
24810 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73  abase for lookas
24820 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c  ide.  Can be NUL
24830 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65  L */.  char *zTe
24840 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  xt;         /* T
24850 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63  he string collec
24860 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ted so far */.  
24870 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20  u32  nAlloc;    
24880 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f       /* Amount o
24890 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  f space allocate
248a0 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20  d in zText */.  
248b0 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20  u32  mxAlloc;   
248c0 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
248d0 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69  allowed allocati
248e0 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61  on.  0 for no ma
248f0 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20  lloc usage */.  
24900 75 33 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20  u32  nChar;     
24910 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
24920 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20  f the string so 
24930 66 61 72 20 2a 2f 0a 20 20 75 38 20 20 20 61 63  far */.  u8   ac
24940 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a  cError;       /*
24950 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 6f 72   SQLITE_NOMEM or
24960 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 2a   SQLITE_TOOBIG *
24970 2f 0a 20 20 75 38 20 20 20 70 72 69 6e 74 66 46  /.  u8   printfF
24980 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c 49  lags;    /* SQLI
24990 54 45 5f 50 52 49 4e 54 46 20 66 6c 61 67 73 20  TE_PRINTF flags 
249a0 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66  below */.};.#def
249b0 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
249c0 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20  F_INTERNAL 0x01 
249d0 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65   /* Internal-use
249e0 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73  -only converters
249f0 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66   allowed */.#def
24a00 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
24a10 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20  F_SQLFUNC  0x02 
24a20 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   /* SQL function
24a30 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58   arguments to VX
24a40 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e  Printf */.#defin
24a50 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
24a60 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f  MALLOCED 0x04  /
24a70 2a 20 54 72 75 65 20 69 66 20 78 54 65 78 74 20  * True if xText 
24a80 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  is allocated spa
24a90 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69  ce */..#define i
24aa0 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28  sMalloced(X)  ((
24ab0 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73  (X)->printfFlags
24ac0 20 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46   & SQLITE_PRINTF
24ad0 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a  _MALLOCED)!=0)..
24ae0 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72  ./*.** A pointer
24af0 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
24b00 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  re is used to co
24b10 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d  mmunicate inform
24b20 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71  ation.** from sq
24b30 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50  lite3Init and OP
24b40 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74  _ParseSchema int
24b50 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69  o the sqlite3Ini
24b60 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79  tCallback..*/.ty
24b70 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20  pedef struct {. 
24b80 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
24b90 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
24ba0 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69  base being initi
24bb0 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72  alized */.  char
24bc0 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20   **pzErrMsg;    
24bd0 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
24be0 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
24bf0 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
24c00 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d        /* 0 for m
24c10 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31  ain database.  1
24c20 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66   for TEMP, 2.. f
24c30 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20  or ATTACHed */. 
24c40 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
24c50 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63       /* Result c
24c60 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  ode stored here 
24c70 2a 2f 0a 20 20 75 33 32 20 6d 49 6e 69 74 46 6c  */.  u32 mInitFl
24c80 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67  ags;     /* Flag
24c90 73 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 65 72  s controlling er
24ca0 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
24cb0 20 20 75 33 32 20 6e 49 6e 69 74 52 6f 77 3b 20    u32 nInitRow; 
24cc0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
24cd0 6f 66 20 72 6f 77 73 20 70 72 6f 63 65 73 73 65  of rows processe
24ce0 64 20 2a 2f 0a 20 20 75 36 34 20 63 6b 73 75 6d  d */.  u64 cksum
24cf0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63  ;          /* Sc
24d00 68 65 6d 61 20 63 68 65 63 6b 73 75 6d 20 66 6f  hema checksum fo
24d10 72 20 52 45 55 53 45 5f 53 43 48 45 4d 41 20 6d  r REUSE_SCHEMA m
24d20 6f 64 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74  ode */.} InitDat
24d30 61 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  a;../*.** Allowe
24d40 64 20 76 61 6c 75 65 73 20 66 6f 72 20 6d 49 6e  d values for mIn
24d50 69 74 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  itFlags.*/.#defi
24d60 6e 65 20 49 4e 49 54 46 4c 41 47 5f 41 6c 74 65  ne INITFLAG_Alte
24d70 72 54 61 62 6c 65 20 20 20 30 78 30 30 30 31 20  rTable   0x0001 
24d80 20 2f 2a 20 54 68 69 73 20 69 73 20 61 20 72 65   /* This is a re
24d90 70 61 72 73 65 20 61 66 74 65 72 20 41 4c 54 45  parse after ALTE
24da0 52 20 54 41 42 4c 45 20 2a 2f 0a 0a 2f 2a 0a 2a  R TABLE */../*.*
24db0 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74  * Structure cont
24dc0 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f  aining global co
24dd0 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61  nfiguration data
24de0 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite 
24df0 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  library..**.** T
24e00 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c  his structure al
24e10 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65  so contains some
24e20 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69   state informati
24e30 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71  on..*/.struct Sq
24e40 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20  lite3Config {.  
24e50 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20  int bMemstat;   
24e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e70 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
24e80 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75  ble memory statu
24e90 73 20 2a 2f 0a 20 20 75 38 20 62 43 6f 72 65 4d  s */.  u8 bCoreM
24ea0 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
24eb0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
24ec0 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20   to enable core 
24ed0 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 75 38  mutexing */.  u8
24ee0 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20   bFullMutex;    
24ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f00 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
24f10 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20  e full mutexing 
24f20 2a 2f 0a 20 20 75 38 20 62 4f 70 65 6e 55 72 69  */.  u8 bOpenUri
24f30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24f40 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
24f50 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65  o interpret file
24f60 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f  names as URIs */
24f70 0a 20 20 75 38 20 62 55 73 65 43 69 73 3b 20 20  .  u8 bUseCis;  
24f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f90 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65       /* Use cove
24fa0 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72  ring indices for
24fb0 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20   full-scans */. 
24fc0 20 75 38 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f 63   u8 bSmallMalloc
24fd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24fe0 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c 61 72 67     /* Avoid larg
24ff0 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
25000 69 6f 6e 73 20 69 66 20 74 72 75 65 20 2a 2f 0a  ions if true */.
25010 20 20 75 38 20 62 45 78 74 72 61 53 63 68 65 6d    u8 bExtraSchem
25020 61 43 68 65 63 6b 73 3b 20 20 20 20 20 20 20 20  aChecks;        
25030 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74 79      /* Verify ty
25040 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65  pe,name,tbl_name
25050 20 69 6e 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20   in schema */.  
25060 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20  int mxStrlen;   
25070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25080 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72    /* Maximum str
25090 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20  ing length */.  
250a0 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74  int neverCorrupt
250b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
250c0 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
250d0 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72   always well-for
250e0 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c  med */.  int szL
250f0 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
25100 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
25110 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
25120 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20  buffer size */. 
25130 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b   int nLookaside;
25140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25150 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
25160 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63  okaside buffer c
25170 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ount */.  int nS
25180 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20 20 20  tmtSpill;       
25190 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
251a0 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c  tmt-journal spil
251b0 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65 73 68  l-to-disk thresh
251c0 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  old */.  sqlite3
251d0 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20  _mem_methods m; 
251e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
251f0 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61  w-level memory a
25200 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66  llocation interf
25210 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
25220 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d  _mutex_methods m
25230 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f  utex;      /* Lo
25240 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e  w-level mutex in
25250 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
25260 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68  ite3_pcache_meth
25270 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f  ods2 pcache2;  /
25280 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65  * Low-level page
25290 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65  -cache interface
252a0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61   */.  void *pHea
252b0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
252c0 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20          /* Heap 
252d0 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f  storage space */
252e0 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20  .  int nHeap;   
252f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25300 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
25310 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pHeap[] */.  int
25320 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20   mnReq, mxReq;  
25330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25340 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65  * Min and max he
25350 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65  ap requests size
25360 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  s */.  sqlite3_i
25370 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20  nt64 szMmap;    
25380 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70           /* mmap
25390 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65  () space per ope
253a0 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69  n file */.  sqli
253b0 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70  te3_int64 mxMmap
253c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
253d0 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66   Maximum value f
253e0 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76  or szMmap */.  v
253f0 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20  oid *pPage;     
25400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25410 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d   /* Page cache m
25420 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
25430 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  zPage;          
25440 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25450 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67  Size of each pag
25460 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  e in pPage[] */.
25470 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20    int nPage;    
25480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25490 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
254a0 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b   pages in pPage[
254b0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72  ] */.  int mxPar
254c0 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20  serStack;       
254d0 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69           /* maxi
254e0 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65  mum depth of the
254f0 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f   parser stack */
25500 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63  .  int sharedCac
25510 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20  heEnabled;      
25520 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20       /* true if 
25530 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
25540 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75  e enabled */.  u
25550 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20  32 szPma;       
25560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25570 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74   /* Maximum Sort
25580 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20  er PMA size */. 
25590 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69   /* The above mi
255a0 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ght be initializ
255b0 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  ed to non-zero. 
255c0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e   The following n
255d0 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20  eed to always.  
255e0 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20  ** initially be 
255f0 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a  zero, however. *
25600 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20  /.  int isInit; 
25610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25620 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
25630 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ter initializati
25640 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20  on has finished 
25650 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72  */.  int inProgr
25660 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ess;            
25670 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77         /* True w
25680 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  hile initializat
25690 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
256a0 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78  */.  int isMutex
256b0 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
256c0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
256d0 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65  fter mutexes are
256e0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
256f0 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e    int isMallocIn
25700 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
25710 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
25720 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
25730 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
25740 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20   isPCacheInit;  
25750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25760 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
25770 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
25780 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ed */.  int nRef
25790 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
257a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
257b0 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20  ber of users of 
257c0 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20  pInitMutex */.  
257d0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70  sqlite3_mutex *p
257e0 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
257f0 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20    /* Mutex used 
25800 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  by sqlite3_initi
25810 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69  alize() */.  voi
25820 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c  d (*xLog)(void*,
25830 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
25840 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f  ; /* Function fo
25850 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76  r logging */.  v
25860 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20  oid *pLogArg;   
25870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25880 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
25890 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20  ument to xLog() 
258a0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
258b0 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20  _ENABLE_SQLLOG. 
258c0 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28   void(*xSqllog)(
258d0 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
258e0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
258f0 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f  ;.  void *pSqllo
25900 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66  gArg;.#endif.#if
25910 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f  def SQLITE_VDBE_
25920 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68  COVERAGE.  /* Th
25930 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
25940 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c  back (if not NUL
25950 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e  L) is invoked on
25960 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61 6e   every VDBE bran
25970 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f  ch.  ** operatio
25980 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c  n.  Set the call
25990 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54  back using SQLIT
259a0 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f  E_TESTCTRL_VDBE_
259b0 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20  COVERAGE..  */. 
259c0 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61   void (*xVdbeBra
259d0 6e 63 68 29 28 76 6f 69 64 2a 2c 75 6e 73 69 67  nch)(void*,unsig
259e0 6e 65 64 20 69 53 72 63 4c 69 6e 65 2c 75 38 20  ned iSrcLine,u8 
259f0 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20  eThis,u8 eMx);  
25a00 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  /* Callback */. 
25a10 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e   void *pVdbeBran
25a20 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  chArg;          
25a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
25a50 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65  t argument */.#e
25a60 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
25a70 54 45 5f 45 4e 41 42 4c 45 5f 44 45 53 45 52 49  TE_ENABLE_DESERI
25a80 41 4c 49 5a 45 0a 20 20 73 71 6c 69 74 65 33 5f  ALIZE.  sqlite3_
25a90 69 6e 74 36 34 20 6d 78 4d 65 6d 64 62 53 69 7a  int64 mxMemdbSiz
25aa0 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66  e;        /* Def
25ab0 61 75 6c 74 20 6d 61 78 20 6d 65 6d 64 62 20 73  ault max memdb s
25ac0 69 7a 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ize */.#endif.#i
25ad0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
25ae0 45 53 54 41 42 4c 45 0a 20 20 69 6e 74 20 28 2a  ESTABLE.  int (*
25af0 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69  xTestCallback)(i
25b00 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49  nt);        /* I
25b10 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65  nvoked by sqlite
25b20 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23  3FaultSim() */.#
25b30 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63  endif.  int bLoc
25b40 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20  altimeFault;    
25b50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
25b60 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74  e to fail localt
25b70 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 20  ime() calls */. 
25b80 20 69 6e 74 20 62 49 6e 74 65 72 6e 61 6c 46 75   int bInternalFu
25b90 6e 63 74 69 6f 6e 73 3b 20 20 20 20 20 20 20 20  nctions;        
25ba0 20 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 20 53     /* Internal S
25bb0 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  QL functions are
25bc0 20 76 69 73 69 62 6c 65 20 2a 2f 0a 20 20 69 6e   visible */.  in
25bd0 74 20 69 4f 6e 63 65 52 65 73 65 74 54 68 72 65  t iOnceResetThre
25be0 73 68 6f 6c 64 3b 20 20 20 20 20 20 20 20 20 20  shold;          
25bf0 2f 2a 20 57 68 65 6e 20 74 6f 20 72 65 73 65 74  /* When to reset
25c00 20 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e 74 65 72   OP_Once counter
25c10 73 20 2a 2f 0a 20 20 75 33 32 20 73 7a 53 6f 72  s */.  u32 szSor
25c20 74 65 72 52 65 66 3b 20 20 20 20 20 20 20 20 20  terRef;         
25c30 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20           /* Min 
25c40 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 74 6f  size in bytes to
25c50 20 75 73 65 20 73 6f 72 74 65 72 2d 72 65 66 73   use sorter-refs
25c60 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
25c70 6e 74 20 69 50 72 6e 67 53 65 65 64 3b 20 20 20  nt iPrngSeed;   
25c80 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 74 65 72          /* Alter
25c90 6e 61 74 69 76 65 20 66 69 78 65 64 20 73 65 65  native fixed see
25ca0 64 20 66 6f 72 20 74 68 65 20 50 52 4e 47 20 2a  d for the PRNG *
25cb0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  /.};../*.** This
25cc0 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69   macro is used i
25cd0 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72 74 28  nside of assert(
25ce0 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  ) statements to 
25cf0 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a  indicate that.**
25d00 20 74 68 65 20 61 73 73 65 72 74 20 69 73 20 6f   the assert is o
25d10 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77  nly valid on a w
25d20 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62  ell-formed datab
25d30 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66  ase.  Instead of
25d40 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
25d50 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f  rt( X );.**.** O
25d60 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a  ne writes:.**.**
25d70 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20 7c       assert( X |
25d80 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a  | CORRUPT_DB );.
25d90 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42  **.** CORRUPT_DB
25da0 20 69 73 20 74 72 75 65 20 64 75 72 69 6e 67 20   is true during 
25db0 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e  normal operation
25dc0 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f  .  CORRUPT_DB do
25dd0 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a  es not indicate.
25de0 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61  ** that the data
25df0 62 61 73 65 20 69 73 20 64 65 66 69 6e 69 74 65  base is definite
25e00 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79  ly corrupt, only
25e10 20 74 68 61 74 20 69 74 20 6d 69 67 68 74 20 62   that it might b
25e20 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f  e corrupt..** Fo
25e30 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65  r most test case
25e40 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  s, CORRUPT_DB is
25e50 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73   set to false us
25e60 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a  ing a special.**
25e70 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
25e80 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65  ntrol().  This e
25e90 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28 29 20  nables assert() 
25ea0 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72  statements to pr
25eb0 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68  ove.** things th
25ec0 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 74 72  at are always tr
25ed0 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d  ue for well-form
25ee0 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f  ed databases..*/
25ef0 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54  .#define CORRUPT
25f00 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e  _DB  (sqlite3Con
25f10 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74  fig.neverCorrupt
25f20 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74  ==0)../*.** Cont
25f30 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73  ext pointer pass
25f40 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20  ed down through 
25f50 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a  the tree-walk..*
25f60 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20  /.struct Walker 
25f70 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
25f80 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
25f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25fa0 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   Parser context.
25fb0 20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78    */.  int (*xEx
25fc0 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  prCallback)(Walk
25fd0 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20  er*, Expr*);    
25fe0 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
25ff0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
26000 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43    int (*xSelectC
26010 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
26020 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43  ,Select*);  /* C
26030 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45  allback for SELE
26040 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  CTs */.  void (*
26050 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32  xSelectCallback2
26060 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74  )(Walker*,Select
26070 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c  *);/* Second cal
26080 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
26090 73 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65  s */.  int walke
260a0 72 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20  rDepth;         
260b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75   /* Number of su
260d0 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38  bqueries */.  u8
260e0 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20   eCode;         
260f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26100 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61          /* A sma
26110 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f  ll processing co
26120 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20  de */.  union { 
26130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26150 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20    /* Extra data 
26160 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  for callback */.
26170 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20      NameContext 
26180 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20  *pNC;           
26190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
261a0 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20   Naming context 
261b0 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20  */.    int n;   
261c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261e0 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f   /* A counter */
261f0 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20  .    int iCur;  
26200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26220 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  * A cursor numbe
26230 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74  r */.    SrcList
26240 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20   *pSrcList;     
26250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26260 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73     /* FROM claus
26270 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
26280 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f  SrcCount *pSrcCo
26290 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  unt;            
262a0 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63     /* Counting c
262b0 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73  olumn references
262c0 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 43   */.    struct C
262d0 43 75 72 48 69 6e 74 20 2a 70 43 43 75 72 48 69  CurHint *pCCurHi
262e0 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
262f0 20 20 2f 2a 20 55 73 65 64 20 62 79 20 63 6f 64    /* Used by cod
26300 65 43 75 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f  eCursorHint() */
26310 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b  .    int *aiCol;
26320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26340 2a 20 61 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d  * array of colum
26350 6e 20 69 6e 64 65 78 65 73 20 2a 2f 0a 20 20 20  n indexes */.   
26360 20 73 74 72 75 63 74 20 49 64 78 43 6f 76 65 72   struct IdxCover
26370 20 2a 70 49 64 78 43 6f 76 65 72 3b 20 20 20 20   *pIdxCover;    
26380 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68             /* Ch
26390 65 63 6b 20 66 6f 72 20 69 6e 64 65 78 20 63 6f  eck for index co
263a0 76 65 72 61 67 65 20 2a 2f 0a 20 20 20 20 73 74  verage */.    st
263b0 72 75 63 74 20 49 64 78 45 78 70 72 54 72 61 6e  ruct IdxExprTran
263c0 73 20 2a 70 49 64 78 54 72 61 6e 73 3b 20 20 20  s *pIdxTrans;   
263d0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65          /* Conve
263e0 72 74 20 69 64 78 65 64 20 65 78 70 72 20 74 6f  rt idxed expr to
263f0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20 45   column */.    E
26400 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
26410 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y;              
26420 20 20 20 20 20 20 20 20 20 2f 2a 20 47 52 4f 55           /* GROU
26430 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  P BY clause */. 
26440 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
26450 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ct;             
26460 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26470 48 41 56 49 4e 47 20 74 6f 20 57 48 45 52 45 20  HAVING to WHERE 
26480 63 6c 61 75 73 65 20 63 74 78 20 2a 2f 0a 20 20  clause ctx */.  
26490 20 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77 52    struct WindowR
264a0 65 77 72 69 74 65 20 2a 70 52 65 77 72 69 74 65  ewrite *pRewrite
264b0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
264c0 69 6e 64 6f 77 20 72 65 77 72 69 74 65 20 63 6f  indow rewrite co
264d0 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 73 74 72  ntext */.    str
264e0 75 63 74 20 57 68 65 72 65 43 6f 6e 73 74 20 2a  uct WhereConst *
264f0 70 43 6f 6e 73 74 3b 20 20 20 20 20 20 20 20 20  pConst;         
26500 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20         /* WHERE 
26510 63 6c 61 75 73 65 20 63 6f 6e 73 74 61 6e 74 73  clause constants
26520 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 52   */.    struct R
26530 65 6e 61 6d 65 43 74 78 20 2a 70 52 65 6e 61 6d  enameCtx *pRenam
26540 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
26550 20 20 2f 2a 20 52 45 4e 41 4d 45 20 43 4f 4c 55    /* RENAME COLU
26560 4d 4e 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  MN context */.  
26570 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77  } u;.};../* Forw
26580 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  ard declarations
26590 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57   */.int sqlite3W
265a0 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  alkExpr(Walker*,
265b0 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
265c0 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74  ite3WalkExprList
265d0 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69  (Walker*, ExprLi
265e0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
265f0 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b  3WalkSelect(Walk
26600 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
26610 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
26620 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a  lectExpr(Walker*
26630 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
26640 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
26650 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53  tFrom(Walker*, S
26660 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
26670 69 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70  ite3ExprWalkNoop
26680 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
26690 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
266a0 65 63 74 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b  ectWalkNoop(Walk
266b0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
266c0 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
266d0 57 61 6c 6b 46 61 69 6c 28 57 61 6c 6b 65 72 2a  WalkFail(Walker*
266e0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 69 66 64  , Select*);.#ifd
266f0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
26700 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
26710 63 74 57 61 6c 6b 41 73 73 65 72 74 32 28 57 61  ctWalkAssert2(Wa
26720 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
26730 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52  .#endif../*.** R
26740 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20  eturn code from 
26750 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77  the parse-tree w
26760 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65  alking primitive
26770 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63  s and their.** c
26780 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65  allbacks..*/.#de
26790 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75  fine WRC_Continu
267a0 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74  e    0   /* Cont
267b0 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63  inue down into c
267c0 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69  hildren */.#defi
267d0 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20  ne WRC_Prune    
267e0 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63     1   /* Omit c
267f0 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74  hildren but cont
26800 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62  inue walking sib
26810 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65  lings */.#define
26820 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20   WRC_Abort      
26830 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20   2   /* Abandon 
26840 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f  the tree walk */
26850 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
26860 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
26870 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73  cture represents
26880 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72   a set of one or
26890 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63   more CTEs.** (c
268a0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
268b0 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64  essions) created
268c0 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54   by a single WIT
268d0 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72  H clause..*/.str
268e0 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74  uct With {.  int
268f0 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20   nCte;          
26900 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26910 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69  Number of CTEs i
26920 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73  n the WITH claus
26930 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75  e */.  With *pOu
26940 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ter;            
26950 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69         /* Contai
26960 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65  ning WITH clause
26970 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73  , or NULL */.  s
26980 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20  truct Cte {     
26990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
269a0 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69  * For each CTE i
269b0 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73  n the WITH claus
269c0 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61  e.... */.    cha
269d0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
269e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
269f0 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45  Name of this CTE
26a00 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74   */.    ExprList
26a10 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20   *pCols;        
26a20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
26a30 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75  of explicit colu
26a40 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c  mn names, or NUL
26a50 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  L */.    Select 
26a60 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20  *pSelect;       
26a70 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
26a80 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68  definition of th
26a90 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f  is CTE */.    co
26aa0 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72  nst char *zCteEr
26ab0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
26ac0 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66   Error message f
26ad0 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65  or circular refe
26ae0 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b  rences */.  } a[
26af0 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53  1];.};..#ifdef S
26b00 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
26b10 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
26b20 20 74 68 65 20 54 72 65 65 56 69 65 77 20 6f 62   the TreeView ob
26b30 6a 65 63 74 20 69 73 20 75 73 65 64 20 66 6f 72  ject is used for
26b40 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f   printing the co
26b50 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61  ntent of.** data
26b60 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73   structures on s
26b70 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
26b80 66 28 29 20 75 73 69 6e 67 20 61 20 74 72 65 65  f() using a tree
26b90 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73  -like view..*/.s
26ba0 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20 7b  truct TreeView {
26bb0 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20  .  int iLevel;  
26bc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
26bd0 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65  ich level of the
26be0 20 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20   tree we are on 
26bf0 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31  */.  u8  bLine[1
26c00 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  00];         /* 
26c10 44 72 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e  Draw vertical in
26c20 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69   column i if bLi
26c30 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f  ne[i] is true */
26c40 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  .};.#endif /* SQ
26c50 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f  LITE_DEBUG */../
26c60 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74  *.** This object
26c70 20 69 73 20 75 73 65 64 20 69 6e 20 76 61 72 69   is used in vari
26c80 6f 75 73 20 77 61 79 73 2c 20 6d 6f 73 74 20 28  ous ways, most (
26c90 62 75 74 20 6e 6f 74 20 61 6c 6c 29 20 72 65 6c  but not all) rel
26ca0 61 74 65 64 20 74 6f 20 77 69 6e 64 6f 77 0a 2a  ated to window.*
26cb0 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  * functions..**.
26cc0 2a 2a 20 20 20 28 31 29 20 41 20 73 69 6e 67 6c  **   (1) A singl
26cd0 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
26ce0 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
26cf0 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 0a  attached to the.
26d00 2a 2a 20 20 20 20 20 20 20 74 68 65 20 45 78 70  **       the Exp
26d10 72 2e 79 2e 70 57 69 6e 20 66 69 65 6c 64 20 66  r.y.pWin field f
26d20 6f 72 20 65 61 63 68 20 77 69 6e 64 6f 77 20 66  or each window f
26d30 75 6e 63 74 69 6f 6e 20 69 6e 20 61 6e 20 65 78  unction in an ex
26d40 70 72 65 73 73 69 6f 6e 20 74 72 65 65 2e 0a 2a  pression tree..*
26d50 2a 20 20 20 20 20 20 20 54 68 69 73 20 6f 62 6a  *       This obj
26d60 65 63 74 20 68 6f 6c 64 73 20 74 68 65 20 69 6e  ect holds the in
26d70 66 6f 72 6d 61 74 69 6f 6e 20 63 6f 6e 74 61 69  formation contai
26d80 6e 65 64 20 69 6e 20 74 68 65 20 4f 56 45 52 20  ned in the OVER 
26d90 63 6c 61 75 73 65 2c 0a 2a 2a 20 20 20 20 20 20  clause,.**      
26da0 20 70 6c 75 73 20 61 64 64 69 74 69 6f 6e 61 6c   plus additional
26db0 20 66 69 65 6c 64 73 20 75 73 65 64 20 64 75 72   fields used dur
26dc0 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74  ing code generat
26dd0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 32 29  ion..**.**   (2)
26de0 20 41 6c 6c 20 77 69 6e 64 6f 77 20 66 75 6e 63   All window func
26df0 74 69 6f 6e 73 20 69 6e 20 61 20 73 69 6e 67 6c  tions in a singl
26e00 65 20 53 45 4c 45 43 54 20 66 6f 72 6d 20 61 20  e SELECT form a 
26e10 6c 69 6e 6b 65 64 2d 6c 69 73 74 0a 2a 2a 20 20  linked-list.**  
26e20 20 20 20 20 20 61 74 74 61 63 68 65 64 20 74 6f       attached to
26e30 20 53 65 6c 65 63 74 2e 70 57 69 6e 2e 20 20 54   Select.pWin.  T
26e40 68 65 20 57 69 6e 64 6f 77 2e 70 46 75 6e 63 20  he Window.pFunc 
26e50 61 6e 64 20 57 69 6e 64 6f 77 2e 70 45 78 70 72  and Window.pExpr
26e60 0a 2a 2a 20 20 20 20 20 20 20 66 69 65 6c 64 73  .**       fields
26e70 20 70 6f 69 6e 74 20 62 61 63 6b 20 74 6f 20 74   point back to t
26e80 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  he expression th
26e90 61 74 20 69 73 20 74 68 65 20 77 69 6e 64 6f 77  at is the window
26ea0 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a   function..**.**
26eb0 20 20 20 28 33 29 20 54 68 65 20 74 65 72 6d 73     (3) The terms
26ec0 20 6f 66 20 74 68 65 20 57 49 4e 44 4f 57 20 63   of the WINDOW c
26ed0 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
26ee0 54 20 61 72 65 20 69 6e 73 74 61 6e 63 65 73 20  T are instances 
26ef0 6f 66 20 74 68 69 73 0a 2a 2a 20 20 20 20 20 20  of this.**      
26f00 20 6f 62 6a 65 63 74 20 6f 6e 20 61 20 6c 69 6e   object on a lin
26f10 6b 65 64 20 6c 69 73 74 20 61 74 74 61 63 68 65  ked list attache
26f20 64 20 74 6f 20 53 65 6c 65 63 74 2e 70 57 69 6e  d to Select.pWin
26f30 44 65 66 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 34  Defn..**.**   (4
26f40 29 20 46 6f 72 20 61 6e 20 61 67 67 72 65 67 61  ) For an aggrega
26f50 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  te function with
26f60 20 61 20 46 49 4c 54 45 52 20 63 6c 61 75 73 65   a FILTER clause
26f70 2c 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  , an instance.**
26f80 20 20 20 20 20 20 20 6f 66 20 74 68 69 73 20 6f         of this o
26f90 62 6a 65 63 74 20 69 73 20 73 74 6f 72 65 64 20  bject is stored 
26fa0 69 6e 20 45 78 70 72 2e 79 2e 70 57 69 6e 20 77  in Expr.y.pWin w
26fb0 69 74 68 20 65 46 72 6d 54 79 70 65 20 73 65 74  ith eFrmType set
26fc0 20 74 6f 0a 2a 2a 20 20 20 20 20 20 20 54 4b 5f   to.**       TK_
26fd0 46 49 4c 54 45 52 2e 20 49 6e 20 74 68 69 73 20  FILTER. In this 
26fe0 63 61 73 65 20 74 68 65 20 6f 6e 6c 79 20 66 69  case the only fi
26ff0 65 6c 64 20 75 73 65 64 20 69 73 20 57 69 6e 64  eld used is Wind
27000 6f 77 2e 70 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a  ow.pFilter..**.*
27010 2a 20 54 68 65 20 75 73 65 73 20 28 31 29 20 61  * The uses (1) a
27020 6e 64 20 28 32 29 20 61 72 65 20 72 65 61 6c 6c  nd (2) are reall
27030 79 20 74 68 65 20 73 61 6d 65 20 57 69 6e 64 6f  y the same Windo
27040 77 20 6f 62 6a 65 63 74 20 74 68 61 74 20 6a 75  w object that ju
27050 73 74 20 68 61 70 70 65 6e 73 0a 2a 2a 20 74 6f  st happens.** to
27060 20 62 65 20 61 63 63 65 73 73 69 62 6c 65 20 69   be accessible i
27070 6e 20 74 77 6f 20 64 69 66 66 65 72 65 6e 74 20  n two different 
27080 77 61 79 73 2e 20 20 55 73 65 20 63 61 73 65 20  ways.  Use case 
27090 28 33 29 20 61 72 65 20 73 65 70 61 72 61 74 65  (3) are separate
270a0 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72   objects..*/.str
270b0 75 63 74 20 57 69 6e 64 6f 77 20 7b 0a 20 20 63  uct Window {.  c
270c0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
270d0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
270e0 66 20 77 69 6e 64 6f 77 20 28 6d 61 79 20 62 65  f window (may be
270f0 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 63 68 61 72   NULL) */.  char
27100 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20   *zBase;        
27110 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 62      /* Name of b
27120 61 73 65 20 77 69 6e 64 6f 77 20 66 6f 72 20 63  ase window for c
27130 68 61 69 6e 69 6e 67 20 28 6d 61 79 20 62 65 20  haining (may be 
27140 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45 78 70 72 4c  NULL) */.  ExprL
27150 69 73 74 20 2a 70 50 61 72 74 69 74 69 6f 6e 3b  ist *pPartition;
27160 20 20 20 2f 2a 20 50 41 52 54 49 54 49 4f 4e 20     /* PARTITION 
27170 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  BY clause */.  E
27180 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
27190 79 3b 20 20 20 20 20 2f 2a 20 4f 52 44 45 52 20  y;     /* ORDER 
271a0 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75  BY clause */.  u
271b0 38 20 65 46 72 6d 54 79 70 65 3b 20 20 20 20 20  8 eFrmType;     
271c0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 41 4e         /* TK_RAN
271d0 47 45 2c 20 54 4b 5f 47 52 4f 55 50 53 2c 20 54  GE, TK_GROUPS, T
271e0 4b 5f 52 4f 57 53 2c 20 6f 72 20 30 20 2a 2f 0a  K_ROWS, or 0 */.
271f0 20 20 75 38 20 65 53 74 61 72 74 3b 20 20 20 20    u8 eStart;    
27200 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 4e 42            /* UNB
27210 4f 55 4e 44 45 44 2c 20 43 55 52 52 45 4e 54 2c  OUNDED, CURRENT,
27220 20 50 52 45 43 45 44 49 4e 47 20 6f 72 20 46 4f   PRECEDING or FO
27230 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 75 38 20  LLOWING */.  u8 
27240 65 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  eEnd;           
27250 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44 45       /* UNBOUNDE
27260 44 2c 20 43 55 52 52 45 4e 54 2c 20 50 52 45 43  D, CURRENT, PREC
27270 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57 49  EDING or FOLLOWI
27280 4e 47 20 2a 2f 0a 20 20 75 38 20 62 49 6d 70 6c  NG */.  u8 bImpl
27290 69 63 69 74 46 72 61 6d 65 3b 20 20 20 20 20 20  icitFrame;      
272a0 2f 2a 20 54 72 75 65 20 69 66 20 66 72 61 6d 65  /* True if frame
272b0 20 77 61 73 20 69 6d 70 6c 69 63 69 74 6c 79 20   was implicitly 
272c0 73 70 65 63 69 66 69 65 64 20 2a 2f 0a 20 20 75  specified */.  u
272d0 38 20 65 45 78 63 6c 75 64 65 3b 20 20 20 20 20  8 eExclude;     
272e0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 4e 4f 2c         /* TK_NO,
272f0 20 54 4b 5f 43 55 52 52 45 4e 54 2c 20 54 4b 5f   TK_CURRENT, TK_
27300 54 49 45 53 2c 20 54 4b 5f 47 52 4f 55 50 2c 20  TIES, TK_GROUP, 
27310 6f 72 20 30 20 2a 2f 0a 20 20 45 78 70 72 20 2a  or 0 */.  Expr *
27320 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20  pStart;         
27330 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
27340 66 6f 72 20 22 3c 65 78 70 72 3e 20 50 52 45 43  for "<expr> PREC
27350 45 44 49 4e 47 22 20 2a 2f 0a 20 20 45 78 70 72  EDING" */.  Expr
27360 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
27370 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
27380 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 46 4f  n for "<expr> FO
27390 4c 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20 20 57 69  LLOWING" */.  Wi
273a0 6e 64 6f 77 20 2a 2a 70 70 54 68 69 73 3b 20 20  ndow **ppThis;  
273b0 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
273c0 20 74 6f 20 74 68 69 73 20 6f 62 6a 65 63 74 20   to this object 
273d0 69 6e 20 53 65 6c 65 63 74 2e 70 57 69 6e 20 6c  in Select.pWin l
273e0 69 73 74 20 2a 2f 0a 20 20 57 69 6e 64 6f 77 20  ist */.  Window 
273f0 2a 70 4e 65 78 74 57 69 6e 3b 20 20 20 20 20 20  *pNextWin;      
27400 20 2f 2a 20 4e 65 78 74 20 77 69 6e 64 6f 77 20   /* Next window 
27410 66 75 6e 63 74 69 6f 6e 20 62 65 6c 6f 6e 67 69  function belongi
27420 6e 67 20 74 6f 20 74 68 69 73 20 53 45 4c 45 43  ng to this SELEC
27430 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 46 69  T */.  Expr *pFi
27440 6c 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  lter;          /
27450 2a 20 54 68 65 20 46 49 4c 54 45 52 20 65 78 70  * The FILTER exp
27460 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 46 75 6e  ression */.  Fun
27470 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20  cDef *pFunc;    
27480 20 20 20 20 20 2f 2a 20 54 68 65 20 66 75 6e 63       /* The func
27490 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 45  tion */.  int iE
274a0 70 68 43 73 72 3b 20 20 20 20 20 20 20 20 20 20  phCsr;          
274b0 20 20 2f 2a 20 50 61 72 74 69 74 69 6f 6e 20 62    /* Partition b
274c0 75 66 66 65 72 20 6f 72 20 50 65 65 72 20 62 75  uffer or Peer bu
274d0 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ffer */.  int re
274e0 67 41 63 63 75 6d 3b 0a 20 20 69 6e 74 20 72 65  gAccum;.  int re
274f0 67 52 65 73 75 6c 74 3b 0a 20 20 69 6e 74 20 63  gResult;.  int c
27500 73 72 41 70 70 3b 20 20 20 20 20 20 20 20 20 20  srApp;          
27510 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 63     /* Function c
27520 75 72 73 6f 72 20 28 75 73 65 64 20 62 79 20 6d  ursor (used by m
27530 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74  in/max) */.  int
27540 20 72 65 67 41 70 70 3b 20 20 20 20 20 20 20 20   regApp;        
27550 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e       /* Function
27560 20 72 65 67 69 73 74 65 72 20 28 61 6c 73 6f 20   register (also 
27570 75 73 65 64 20 62 79 20 6d 69 6e 2f 6d 61 78 29  used by min/max)
27580 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 50 61 72   */.  int regPar
27590 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
275a0 20 41 72 72 61 79 20 6f 66 20 72 65 67 69 73 74   Array of regist
275b0 65 72 73 20 66 6f 72 20 50 41 52 54 49 54 49 4f  ers for PARTITIO
275c0 4e 20 42 59 20 76 61 6c 75 65 73 20 2a 2f 0a 20  N BY values */. 
275d0 20 45 78 70 72 20 2a 70 4f 77 6e 65 72 3b 20 20   Expr *pOwner;  
275e0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
275f0 65 73 73 69 6f 6e 20 6f 62 6a 65 63 74 20 74 68  ession object th
27600 69 73 20 77 69 6e 64 6f 77 20 69 73 20 61 74 74  is window is att
27610 61 63 68 65 64 20 74 6f 20 2a 2f 0a 20 20 69 6e  ached to */.  in
27620 74 20 6e 42 75 66 66 65 72 43 6f 6c 3b 20 20 20  t nBufferCol;   
27630 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
27640 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 62 75  of columns in bu
27650 66 66 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20  ffer table */.  
27660 69 6e 74 20 69 41 72 67 43 6f 6c 3b 20 20 20 20  int iArgCol;    
27670 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65          /* Offse
27680 74 20 6f 66 20 66 69 72 73 74 20 61 72 67 75 6d  t of first argum
27690 65 6e 74 20 66 6f 72 20 74 68 69 73 20 66 75 6e  ent for this fun
276a0 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72  ction */.  int r
276b0 65 67 4f 6e 65 3b 20 20 20 20 20 20 20 20 20 20  egOne;          
276c0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 63     /* Register c
276d0 6f 6e 74 61 69 6e 69 6e 67 20 63 6f 6e 73 74 61  ontaining consta
276e0 6e 74 20 76 61 6c 75 65 20 31 20 2a 2f 0a 20 20  nt value 1 */.  
276f0 69 6e 74 20 72 65 67 53 74 61 72 74 52 6f 77 69  int regStartRowi
27700 64 3b 0a 20 20 69 6e 74 20 72 65 67 45 6e 64 52  d;.  int regEndR
27710 6f 77 69 64 3b 0a 7d 3b 0a 0a 23 69 66 6e 64 65  owid;.};..#ifnde
27720 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49  f SQLITE_OMIT_WI
27730 4e 44 4f 57 46 55 4e 43 0a 76 6f 69 64 20 73 71  NDOWFUNC.void sq
27740 6c 69 74 65 33 57 69 6e 64 6f 77 44 65 6c 65 74  lite3WindowDelet
27750 65 28 73 71 6c 69 74 65 33 2a 2c 20 57 69 6e 64  e(sqlite3*, Wind
27760 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ow*);.void sqlit
27770 65 33 57 69 6e 64 6f 77 55 6e 6c 69 6e 6b 46 72  e3WindowUnlinkFr
27780 6f 6d 53 65 6c 65 63 74 28 57 69 6e 64 6f 77 2a  omSelect(Window*
27790 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
277a0 69 6e 64 6f 77 4c 69 73 74 44 65 6c 65 74 65 28  indowListDelete(
277b0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e  sqlite3 *db, Win
277c0 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64 6f 77 20  dow *p);.Window 
277d0 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 6c  *sqlite3WindowAl
277e0 6c 6f 63 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  loc(Parse*, int,
277f0 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 69 6e 74   int, Expr*, int
27800 20 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 76   , Expr*, u8);.v
27810 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  oid sqlite3Windo
27820 77 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20  wAttach(Parse*, 
27830 45 78 70 72 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b  Expr*, Window*);
27840 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64  .int sqlite3Wind
27850 6f 77 43 6f 6d 70 61 72 65 28 50 61 72 73 65 2a  owCompare(Parse*
27860 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f  , Window*, Windo
27870 77 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  w*, int);.void s
27880 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 64 65  qlite3WindowCode
27890 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 57 69 6e  Init(Parse*, Win
278a0 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dow*);.void sqli
278b0 74 65 33 57 69 6e 64 6f 77 43 6f 64 65 53 74 65  te3WindowCodeSte
278c0 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
278d0 2a 2c 20 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69  *, WhereInfo*, i
278e0 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
278f0 6c 69 74 65 33 57 69 6e 64 6f 77 52 65 77 72 69  lite3WindowRewri
27900 74 65 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  te(Parse*, Selec
27910 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
27920 45 78 70 61 6e 64 53 75 62 71 75 65 72 79 28 50  ExpandSubquery(P
27930 61 72 73 65 2a 2c 20 73 74 72 75 63 74 20 53 72  arse*, struct Sr
27940 63 4c 69 73 74 5f 69 74 65 6d 2a 29 3b 0a 76 6f  cList_item*);.vo
27950 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
27960 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 57  Update(Parse*, W
27970 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 2c  indow*, Window*,
27980 20 46 75 6e 63 44 65 66 2a 29 3b 0a 57 69 6e 64   FuncDef*);.Wind
27990 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f  ow *sqlite3Windo
279a0 77 44 75 70 28 73 71 6c 69 74 65 33 20 2a 64 62  wDup(sqlite3 *db
279b0 2c 20 45 78 70 72 20 2a 70 4f 77 6e 65 72 2c 20  , Expr *pOwner, 
279c0 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64  Window *p);.Wind
279d0 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f  ow *sqlite3Windo
279e0 77 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  wListDup(sqlite3
279f0 20 2a 64 62 2c 20 57 69 6e 64 6f 77 20 2a 70 29   *db, Window *p)
27a00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69  ;.void sqlite3Wi
27a10 6e 64 6f 77 46 75 6e 63 74 69 6f 6e 73 28 76 6f  ndowFunctions(vo
27a20 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
27a30 33 57 69 6e 64 6f 77 43 68 61 69 6e 28 50 61 72  3WindowChain(Par
27a40 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69  se*, Window*, Wi
27a50 6e 64 6f 77 2a 29 3b 0a 57 69 6e 64 6f 77 20 2a  ndow*);.Window *
27a60 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 73 73  sqlite3WindowAss
27a70 65 6d 62 6c 65 28 50 61 72 73 65 2a 2c 20 57 69  emble(Parse*, Wi
27a80 6e 64 6f 77 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ndow*, ExprList*
27a90 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b  , ExprList*, Tok
27aa0 65 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  en*);.#else.# de
27ab0 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 6e 64  fine sqlite3Wind
27ac0 6f 77 44 65 6c 65 74 65 28 61 2c 62 29 0a 23 20  owDelete(a,b).# 
27ad0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
27ae0 6e 64 6f 77 46 75 6e 63 74 69 6f 6e 73 28 29 0a  ndowFunctions().
27af0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27b00 57 69 6e 64 6f 77 41 74 74 61 63 68 28 61 2c 62  WindowAttach(a,b
27b10 2c 63 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ,c).#endif../*.*
27b20 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70  * Assuming zIn p
27b30 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
27b40 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46  st byte of a UTF
27b50 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a  -8 character,.**
27b60 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20   advance zIn to 
27b70 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72  point to the fir
27b80 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e  st byte of the n
27b90 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63  ext UTF-8 charac
27ba0 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
27bb0 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38  SQLITE_SKIP_UTF8
27bc0 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20  (zIn) {         
27bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
27be0 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29  .  if( (*(zIn++)
27bf0 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20  )>=0xc0 ){      
27c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c10 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68          \.    wh
27c20 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63  ile( (*zIn & 0xc
27c30 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b  0)==0x80 ){ zIn+
27c40 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  +; }            
27c50 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20   \.  }          
27c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c80 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f            \.}../
27c90 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
27ca0 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72  *_BKPT macros ar
27cb0 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f  e substitutes fo
27cc0 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  r the error code
27cd0 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61  s with.** the sa
27ce0 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68  me name but with
27cf0 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75  out the _BKPT su
27d00 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63  ffix.  These mac
27d10 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f  ros invoke.** ro
27d20 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f  utines that repo
27d30 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62  rt the line-numb
27d40 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  er on which the 
27d50 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64  error originated
27d60 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65  .** using sqlite
27d70 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f  3_log().  The ro
27d80 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76  utines also prov
27d90 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74  ide a convenient
27da0 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74   place.** to set
27db0 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61   a debugger brea
27dc0 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  kpoint..*/.int s
27dd0 71 6c 69 74 65 33 52 65 70 6f 72 74 45 72 72 6f  qlite3ReportErro
27de0 72 28 69 6e 74 20 69 45 72 72 2c 20 69 6e 74 20  r(int iErr, int 
27df0 6c 69 6e 65 6e 6f 2c 20 63 6f 6e 73 74 20 63 68  lineno, const ch
27e00 61 72 20 2a 7a 54 79 70 65 29 3b 0a 69 6e 74 20  ar *zType);.int 
27e10 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
27e20 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
27e30 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
27e40 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
27e50 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
27e60 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51  int);.#define SQ
27e70 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
27e80 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  T sqlite3Corrupt
27e90 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
27ea0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
27eb0 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74  ISUSE_BKPT sqlit
27ec0 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f  e3MisuseError(__
27ed0 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
27ee0 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f  SQLITE_CANTOPEN_
27ef0 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74  BKPT sqlite3Cant
27f00 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  openError(__LINE
27f10 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54  __).#ifdef SQLIT
27f20 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73 71  E_DEBUG.  int sq
27f30 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28  lite3NomemError(
27f40 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
27f50 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72  te3IoerrnomemErr
27f60 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  or(int);.  int s
27f70 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e  qlite3CorruptPgn
27f80 6f 45 72 72 6f 72 28 69 6e 74 2c 50 67 6e 6f 29  oError(int,Pgno)
27f90 3b 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ;.# define SQLIT
27fa0 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c  E_NOMEM_BKPT sql
27fb0 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f  ite3NomemError(_
27fc0 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e  _LINE__).# defin
27fd0 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  e SQLITE_IOERR_N
27fe0 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65  OMEM_BKPT sqlite
27ff0 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72  3IoerrnomemError
28000 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66  (__LINE__).# def
28010 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
28020 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74  PT_PGNO(P) sqlit
28030 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72 72  e3CorruptPgnoErr
28040 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28 50 29 29  or(__LINE__,(P))
28050 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
28060 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50  SQLITE_NOMEM_BKP
28070 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23  T SQLITE_NOMEM.#
28080 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
28090 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  OERR_NOMEM_BKPT 
280a0 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
280b0 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  EM.# define SQLI
280c0 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28  TE_CORRUPT_PGNO(
280d0 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  P) sqlite3Corrup
280e0 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  tError(__LINE__)
280f0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
28100 54 53 33 20 61 6e 64 20 46 54 53 34 20 62 6f 74  TS3 and FTS4 bot
28110 68 20 72 65 71 75 69 72 65 20 76 69 72 74 75 61  h require virtua
28120 6c 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 0a  l table support.
28130 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
28140 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
28150 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64 65 66  ALTABLE).# undef
28160 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
28170 54 53 33 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  TS3.# undef SQLI
28180 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a 23  TE_ENABLE_FTS4.#
28190 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53  endif../*.** FTS
281a0 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65  4 is really an e
281b0 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53  xtension for FTS
281c0 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65  3.  It is enable
281d0 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53  d using the.** S
281e0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
281f0 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f  3 macro.  But to
28200 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e   avoid confusion
28210 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a   we also call.**
28220 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
28230 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f  LE_FTS4 macro to
28240 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69   serve as an ali
28250 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e  as for SQLITE_EN
28260 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69  ABLE_FTS3..*/.#i
28270 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
28280 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26  _ENABLE_FTS4) &&
28290 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
282a0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20  _ENABLE_FTS3).# 
282b0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
282c0 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64  ABLE_FTS3 1.#end
282d0 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74  if../*.** The ct
282e0 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20  ype.h header is 
282f0 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41  needed for non-A
28300 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49  SCII systems.  I
28310 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65  t is also.** nee
28320 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e  ded by FTS3 when
28330 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65   FTS3 is include
28340 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d  d in the amalgam
28350 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64  ation..*/.#if !d
28360 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53  efined(SQLITE_AS
28370 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64  CII) || \.    (d
28380 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
28390 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65  ABLE_FTS3) && de
283a0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41  fined(SQLITE_AMA
283b0 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e  LGAMATION)).# in
283c0 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a  clude <ctype.h>.
283d0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
283e0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
283f0 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61  os mimic the sta
28400 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75  ndard library fu
28410 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28  nctions toupper(
28420 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c  ),.** isspace(),
28430 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69   isalnum(), isdi
28440 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67  git() and isxdig
28450 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65  it(), respective
28460 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74  ly. The.** sqlit
28470 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20  e versions only 
28480 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63  work for ASCII c
28490 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72  haracters, regar
284a0 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e  dless of locale.
284b0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
284c0 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65  E_ASCII.# define
284d0 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
284e0 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74  x)  ((x)&~(sqlit
284f0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
28500 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
28510 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73  x20)).# define s
28520 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
28530 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
28540 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
28550 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20  ar)(x)]&0x01).# 
28560 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
28570 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69  alnum(x)   (sqli
28580 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
28590 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
285a0 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73  0x06).# define s
285b0 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
285c0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
285d0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
285e0 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20  ar)(x)]&0x02).# 
285f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
28600 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69  digit(x)   (sqli
28610 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
28620 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
28630 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73  0x04).# define s
28640 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
28650 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65  )  (sqlite3Ctype
28660 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
28670 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20  ar)(x)]&0x08).# 
28680 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
28690 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69  lower(x)   (sqli
286a0 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
286b0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
286c0 78 29 5d 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x)]).# define sq
286d0 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20  lite3Isquote(x) 
286e0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
286f0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
28700 72 29 28 78 29 5d 26 30 78 38 30 29 0a 23 65 6c  r)(x)]&0x80).#el
28710 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
28720 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20  te3Toupper(x)   
28730 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65  toupper((unsigne
28740 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
28750 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
28760 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65  ace(x)   isspace
28770 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
28780 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
28790 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
287a0 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67    isalnum((unsig
287b0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
287c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
287d0 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70  alpha(x)   isalp
287e0 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ha((unsigned cha
287f0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
28800 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
28810 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73  )   isdigit((uns
28820 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
28830 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28840 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78  Isxdigit(x)  isx
28850 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
28860 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
28870 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
28880 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28  r(x)   tolower((
28890 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
288a0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
288b0 74 65 33 49 73 71 75 6f 74 65 28 78 29 20 20 20  te3Isquote(x)   
288c0 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29 3d 3d  ((x)=='"'||(x)==
288d0 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27 7c 7c  '\''||(x)=='['||
288e0 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64 69 66  (x)=='`').#endif
288f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 49 64  .int sqlite3IsId
28900 43 68 61 72 28 75 38 29 3b 0a 0a 2f 2a 0a 2a 2a  Char(u8);../*.**
28910 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69   Internal functi
28920 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f  on prototypes.*/
28930 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 49  .int sqlite3StrI
28940 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  Cmp(const char*,
28950 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
28960 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  t sqlite3Strlen3
28970 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  0(const char*);.
28980 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
28990 74 72 6c 65 6e 33 30 4e 4e 28 43 29 20 28 73 74  trlen30NN(C) (st
289a0 72 6c 65 6e 28 43 29 26 30 78 33 66 66 66 66 66  rlen(C)&0x3fffff
289b0 66 66 29 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  ff).char *sqlite
289c0 33 43 6f 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75  3ColumnType(Colu
289d0 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66  mn*,char*);.#def
289e0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49  ine sqlite3StrNI
289f0 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e  Cmp sqlite3_strn
28a00 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65  icmp..int sqlite
28a10 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64  3MallocInit(void
28a20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
28a30 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a  allocEnd(void);.
28a40 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
28a50 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a  loc(u64);.void *
28a60 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72  sqlite3MallocZer
28a70 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  o(u64);.void *sq
28a80 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
28a90 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  o(sqlite3*, u64)
28aa0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
28ab0 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74  bMallocRaw(sqlit
28ac0 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  e3*, u64);.void 
28ad0 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
28ae0 52 61 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20  RawNN(sqlite3*, 
28af0 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  u64);.char *sqli
28b00 74 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69  te3DbStrDup(sqli
28b10 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
28b20 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
28b30 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65  DbStrNDup(sqlite
28b40 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
28b50 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  u64);.char *sqli
28b60 74 65 33 44 62 53 70 61 6e 44 75 70 28 73 71 6c  te3DbSpanDup(sql
28b70 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
28b80 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
28b90 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61  void *sqlite3Rea
28ba0 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34 29  lloc(void*, u64)
28bb0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
28bc0 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73  bReallocOrFree(s
28bd0 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a  qlite3 *, void *
28be0 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
28bf0 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73  lite3DbRealloc(s
28c00 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a  qlite3 *, void *
28c10 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c  , u64);.void sql
28c20 69 74 65 33 44 62 46 72 65 65 28 73 71 6c 69 74  ite3DbFree(sqlit
28c30 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  e3*, void*);.voi
28c40 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e  d sqlite3DbFreeN
28c50 4e 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  N(sqlite3*, void
28c60 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  *);.int sqlite3M
28c70 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29  allocSize(void*)
28c80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d  ;.int sqlite3DbM
28c90 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65  allocSize(sqlite
28ca0 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  3*, void*);.void
28cb0 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c   *sqlite3PageMal
28cc0 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  loc(int);.void s
28cd0 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76  qlite3PageFree(v
28ce0 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
28cf0 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74  te3MemSetDefault
28d00 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66 20  (void);.#ifndef 
28d10 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
28d20 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  E.void sqlite3Be
28d30 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28  nignMallocHooks(
28d40 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20  void (*)(void), 
28d50 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b  void (*)(void));
28d60 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
28d70 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c  te3HeapNearlyFul
28d80 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20  l(void);../*.** 
28d90 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  On systems with 
28da0 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63  ample stack spac
28db0 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f  e and that suppo
28dc0 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b  rt alloca(), mak
28dd0 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f  e.** use of allo
28de0 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73  ca() to obtain s
28df0 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61  pace for large a
28e00 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73  utomatic objects
28e10 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a  .  By default,.*
28e20 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  * obtain space f
28e30 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a  rom malloc()..**
28e40 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29  .** The alloca()
28e50 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72   routine never r
28e60 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68  eturns NULL.  Th
28e70 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f  is will cause co
28e80 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74  de paths.** that
28e90 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74   deal with sqlit
28ea0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66  e3StackAlloc() f
28eb0 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e  ailures to be un
28ec0 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69  reachable..*/.#i
28ed0 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f  fdef SQLITE_USE_
28ee0 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20  ALLOCA.# define 
28ef0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
28f00 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f  cRaw(D,N)   allo
28f10 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  ca(N).# define s
28f20 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
28f30 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65  Zero(D,N)  memse
28f40 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20  t(alloca(N), 0, 
28f50 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
28f60 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50  te3StackFree(D,P
28f70 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
28f80 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
28f90 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c  ocRaw(D,N)   sql
28fa0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
28fb0 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  D,N).# define sq
28fc0 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a  lite3StackAllocZ
28fd0 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65  ero(D,N)  sqlite
28fe0 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c  3DbMallocZero(D,
28ff0 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
29000 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50  te3StackFree(D,P
29010 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  )       sqlite3D
29020 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69  bFree(D,P).#endi
29030 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c  f../* Do not all
29040 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59 53 35 20  ow both MEMSYS5 
29050 61 6e 64 20 4d 45 4d 53 59 53 33 20 74 6f 20 62  and MEMSYS3 to b
29060 65 20 64 65 66 69 6e 65 64 20 74 6f 67 65 74 68  e defined togeth
29070 65 72 2e 20 20 49 66 20 74 68 65 79 0a 2a 2a 20  er.  If they.** 
29080 61 72 65 2c 20 64 69 73 61 62 6c 65 20 4d 45 4d  are, disable MEM
29090 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65 66 20 53  SYS3.*/.#ifdef S
290a0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
290b0 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS5.const sqlit
290c0 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
290d0 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
290e0 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 75 6e 64  sys5(void);.#und
290f0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
29100 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64 69 66 0a  _MEMSYS3.#endif.
29110 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
29120 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e  ABLE_MEMSYS3.con
29130 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
29140 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
29150 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69  emGetMemsys3(voi
29160 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66  d);.#endif...#if
29170 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45  ndef SQLITE_MUTE
29180 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33  X_OMIT.  sqlite3
29190 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
291a0 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66  onst *sqlite3Def
291b0 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b  aultMutex(void);
291c0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
291d0 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
291e0 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78  sqlite3NoopMutex
291f0 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
29200 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
29210 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b  MutexAlloc(int);
29220 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
29230 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20  texInit(void);. 
29240 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65   int sqlite3Mute
29250 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64  xEnd(void);.#end
29260 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
29270 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49  SQLITE_MUTEX_OMI
29280 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
29290 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50  QLITE_MUTEX_NOOP
292a0 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
292b0 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 76 6f  MemoryBarrier(vo
292c0 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  id);.#else.# def
292d0 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72  ine sqlite3Memor
292e0 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e 64 69  yBarrier().#endi
292f0 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  f..sqlite3_int64
29300 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61   sqlite3StatusVa
29310 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  lue(int);.void s
29320 71 6c 69 74 65 33 53 74 61 74 75 73 55 70 28 69  qlite3StatusUp(i
29330 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
29340 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77 6e  qlite3StatusDown
29350 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  (int, int);.void
29360 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 48 69   sqlite3StatusHi
29370 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69 6e 74  ghwater(int, int
29380 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4c 6f  );.int sqlite3Lo
29390 6f 6b 61 73 69 64 65 55 73 65 64 28 73 71 6c 69  okasideUsed(sqli
293a0 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a 0a 2f 2a 20  te3*,int*);../* 
293b0 41 63 63 65 73 73 20 74 6f 20 6d 75 74 65 78 65  Access to mutexe
293c0 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  s used by sqlite
293d0 33 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 73 71  3_status() */.sq
293e0 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
293f0 69 74 65 33 50 63 61 63 68 65 31 4d 75 74 65 78  ite3Pcache1Mutex
29400 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f  (void);.sqlite3_
29410 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 61  mutex *sqlite3Ma
29420 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64 29 3b  llocMutex(void);
29430 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
29440 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54  LITE_ENABLE_MULT
29450 49 54 48 52 45 41 44 45 44 5f 43 48 45 43 4b 53  ITHREADED_CHECKS
29460 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
29470 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29  LITE_MUTEX_OMIT)
29480 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 74  .void sqlite3Mut
29490 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69  exWarnOnContenti
294a0 6f 6e 28 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  on(sqlite3_mutex
294b0 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
294c0 6e 65 20 73 71 6c 69 74 65 33 4d 75 74 65 78 57  ne sqlite3MutexW
294d0 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28  arnOnContention(
294e0 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  x).#endif..#ifnd
294f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
29500 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
29510 64 65 66 69 6e 65 20 45 58 50 37 35 34 20 28 28  define EXP754 ((
29520 28 75 36 34 29 30 78 37 66 66 29 3c 3c 35 32 29  (u64)0x7ff)<<52)
29530 0a 23 20 64 65 66 69 6e 65 20 4d 41 4e 37 35 34  .# define MAN754
29540 20 28 28 28 28 75 36 34 29 31 29 3c 3c 35 32 29   ((((u64)1)<<52)
29550 2d 31 29 0a 23 20 64 65 66 69 6e 65 20 49 73 4e  -1).# define IsN
29560 61 4e 28 58 29 20 28 28 28 58 29 26 45 58 50 37  aN(X) (((X)&EXP7
29570 35 34 29 3d 3d 45 58 50 37 35 34 20 26 26 20 28  54)==EXP754 && (
29580 28 58 29 26 4d 41 4e 37 35 34 29 21 3d 30 29 0a  (X)&MAN754)!=0).
29590 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e    int sqlite3IsN
295a0 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73  aN(double);.#els
295b0 65 0a 23 20 64 65 66 69 6e 65 20 49 73 4e 61 4e  e.# define IsNaN
295c0 28 58 29 20 20 20 20 20 20 20 20 20 30 0a 23 20  (X)         0.# 
295d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
295e0 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66  NaN(X)  0.#endif
295f0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
29600 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
29610 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68  wing structure h
29620 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  olds information
29630 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75   about SQL.** fu
29640 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74  nctions argument
29650 73 20 74 68 61 74 20 61 72 65 20 74 68 65 20 70  s that are the p
29660 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65  arameters to the
29670 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69   printf() functi
29680 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72  on..*/.struct Pr
29690 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a  intfArguments {.
296a0 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20    int nArg;     
296b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
296c0 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  tal number of ar
296d0 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  guments */.  int
296e0 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20 20   nUsed;         
296f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
29700 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65  of arguments use
29710 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71  d so far */.  sq
29720 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70  lite3_value **ap
29730 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72  Arg;   /* The ar
29740 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f  gument values */
29750 0a 7d 3b 0a 0a 63 68 61 72 20 2a 73 71 6c 69 74  .};..char *sqlit
29760 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  e3MPrintf(sqlite
29770 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
29780 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ...);.char *sqli
29790 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69  te3VMPrintf(sqli
297a0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
297b0 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20  , va_list);.#if 
297c0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
297d0 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
297e0 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f  (SQLITE_HAVE_OS_
297f0 54 52 41 43 45 29 0a 20 20 76 6f 69 64 20 73 71  TRACE).  void sq
29800 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
29810 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  (const char*, ..
29820 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  .);.#endif.#if d
29830 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
29840 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  ST).  void *sqli
29850 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72  te3TestTextToPtr
29860 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
29870 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
29880 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
29890 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
298a0 72 65 65 56 69 65 77 45 78 70 72 28 54 72 65 65  reeViewExpr(Tree
298b0 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70  View*, const Exp
298c0 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20  r*, u8);.  void 
298d0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 42  sqlite3TreeViewB
298e0 61 72 65 45 78 70 72 4c 69 73 74 28 54 72 65 65  areExprList(Tree
298f0 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70  View*, const Exp
29900 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
29910 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
29920 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
29930 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20  List(TreeView*, 
29940 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c  const ExprList*,
29950 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a   u8, const char*
29960 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
29970 33 54 72 65 65 56 69 65 77 53 72 63 4c 69 73 74  3TreeViewSrcList
29980 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
29990 74 20 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 76  t SrcList*);.  v
299a0 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
299b0 69 65 77 53 65 6c 65 63 74 28 54 72 65 65 56 69  iewSelect(TreeVi
299c0 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63  ew*, const Selec
299d0 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20  t*, u8);.  void 
299e0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57  sqlite3TreeViewW
299f0 69 74 68 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ith(TreeView*, c
29a00 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75 38 29 3b  onst With*, u8);
29a10 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29a20 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a  OMIT_WINDOWFUNC.
29a30 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
29a40 65 65 56 69 65 77 57 69 6e 64 6f 77 28 54 72 65  eeViewWindow(Tre
29a50 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69  eView*, const Wi
29a60 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a 20 20 76 6f  ndow*, u8);.  vo
29a70 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
29a80 65 77 57 69 6e 46 75 6e 63 28 54 72 65 65 56 69  ewWinFunc(TreeVi
29a90 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 6e 64 6f  ew*, const Windo
29aa0 77 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a  w*, u8);.#endif.
29ab0 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71  #endif...void sq
29ac0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63  lite3SetString(c
29ad0 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  har **, sqlite3*
29ae0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
29af0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
29b00 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rMsg(Parse*, con
29b10 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
29b20 69 6e 74 20 73 71 6c 69 74 65 33 45 72 72 6f 72  int sqlite3Error
29b30 54 6f 50 61 72 73 65 72 28 73 71 6c 69 74 65 33  ToParser(sqlite3
29b40 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
29b50 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72  ite3Dequote(char
29b60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29b70 44 65 71 75 6f 74 65 45 78 70 72 28 45 78 70 72  DequoteExpr(Expr
29b80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29b90 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a  TokenInit(Token*
29ba0 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  ,char*);.int sql
29bb0 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28  ite3KeywordCode(
29bc0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
29bd0 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
29be0 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72  sqlite3RunParser
29bf0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
29c00 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  har*, char **);.
29c10 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
29c20 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29  shCoding(Parse*)
29c30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
29c40 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b  TempReg(Parse*);
29c50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
29c60 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73  easeTempReg(Pars
29c70 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  e*,int);.int sql
29c80 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65  ite3GetTempRange
29c90 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
29ca0 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
29cb0 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  eTempRange(Parse
29cc0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
29cd0 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d   sqlite3ClearTem
29ce0 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a  pRegCache(Parse*
29cf0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
29d00 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74  _DEBUG.int sqlit
29d10 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65  e3NoTempsInRange
29d20 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29  (Parse*,int,int)
29d30 3b 0a 23 65 6e 64 69 66 0a 45 78 70 72 20 2a 73  ;.#endif.Expr *s
29d40 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28  qlite3ExprAlloc(
29d50 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
29d60 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  st Token*,int);.
29d70 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
29d80 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
29d90 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
29da0 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74  d sqlite3ExprAtt
29db0 61 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69  achSubtrees(sqli
29dc0 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  te3*,Expr*,Expr*
29dd0 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73  ,Expr*);.Expr *s
29de0 71 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73  qlite3PExpr(Pars
29df0 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20  e*, int, Expr*, 
29e00 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
29e10 69 74 65 33 50 45 78 70 72 41 64 64 53 65 6c 65  ite3PExprAddSele
29e20 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ct(Parse*, Expr*
29e30 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72  , Select*);.Expr
29e40 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64   *sqlite3ExprAnd
29e50 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45  (Parse*,Expr*, E
29e60 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
29e70 69 74 65 33 45 78 70 72 53 69 6d 70 6c 69 66 69  ite3ExprSimplifi
29e80 65 64 41 6e 64 4f 72 28 45 78 70 72 2a 29 3b 0a  edAndOr(Expr*);.
29e90 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
29ea0 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a  rFunction(Parse*
29eb0 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65  ,ExprList*, Toke
29ec0 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  n*, int);.void s
29ed0 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e  qlite3ExprAssign
29ee0 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a  VarNumber(Parse*
29ef0 2c 20 45 78 70 72 2a 2c 20 75 33 32 29 3b 0a 76  , Expr*, u32);.v
29f00 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44  oid sqlite3ExprD
29f10 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
29f20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
29f30 69 74 65 33 45 78 70 72 55 6e 6d 61 70 41 6e 64  ite3ExprUnmapAnd
29f40 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 45  Delete(Parse*, E
29f50 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20  xpr*);.ExprList 
29f60 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
29f70 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78  Append(Parse*,Ex
29f80 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  prList*,Expr*);.
29f90 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
29fa0 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 56  3ExprListAppendV
29fb0 65 63 74 6f 72 28 50 61 72 73 65 2a 2c 45 78 70  ector(Parse*,Exp
29fc0 72 4c 69 73 74 2a 2c 49 64 4c 69 73 74 2a 2c 45  rList*,IdList*,E
29fd0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
29fe0 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 6f  te3ExprListSetSo
29ff0 72 74 4f 72 64 65 72 28 45 78 70 72 4c 69 73 74  rtOrder(ExprList
2a000 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2a010 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e  ite3ExprListSetN
2a020 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ame(Parse*,ExprL
2a030 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ist*,Token*,int)
2a040 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2a050 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61  prListSetSpan(Pa
2a060 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 63  rse*,ExprList*,c
2a070 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
2a080 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2a090 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c  lite3ExprListDel
2a0a0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
2a0b0 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73 71  prList*);.u32 sq
2a0c0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c 61  lite3ExprListFla
2a0d0 67 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  gs(const ExprLis
2a0e0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2a0f0 49 6e 64 65 78 48 61 73 44 75 70 6c 69 63 61 74  IndexHasDuplicat
2a100 65 52 6f 6f 74 50 61 67 65 28 49 6e 64 65 78 2a  eRootPage(Index*
2a110 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
2a120 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61  it(sqlite3*, cha
2a130 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r**);.int sqlite
2a140 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f  3InitCallback(vo
2a150 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a  id*, int, char**
2a160 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
2a170 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65 28 73 71  qlite3InitOne(sq
2a180 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 68 61  lite3*, int, cha
2a190 72 2a 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20  r**, u32);.void 
2a1a0 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61  sqlite3Pragma(Pa
2a1b0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
2a1c0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  n*,Token*,int);.
2a1d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2a1e0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2a1f0 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33  .Module *sqlite3
2a200 50 72 61 67 6d 61 56 74 61 62 52 65 67 69 73 74  PragmaVtabRegist
2a210 65 72 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  er(sqlite3*,cons
2a220 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a  t char *zName);.
2a230 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2a240 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
2a250 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73  asOfConnection(s
2a260 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
2a270 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63  qlite3ResetOneSc
2a280 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e  hema(sqlite3*,in
2a290 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2a2a0 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65  CollapseDatabase
2a2b0 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b  Array(sqlite3*);
2a2c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
2a2d0 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67  mitInternalChang
2a2e0 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  es(sqlite3*);.vo
2a2f0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
2a300 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69  ColumnNames(sqli
2a310 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e  te3*,Table*);.in
2a320 74 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73  t sqlite3Columns
2a330 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50 61 72  FromExprList(Par
2a340 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31  se*,ExprList*,i1
2a350 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f  6*,Column**);.vo
2a360 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
2a370 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 41 6e 64  AddColumnTypeAnd
2a380 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72 73 65 2a  Collation(Parse*
2a390 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63 74 2a 2c  ,Table*,Select*,
2a3a0 63 68 61 72 29 3b 0a 54 61 62 6c 65 20 2a 73 71  char);.Table *sq
2a3b0 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66  lite3ResultSetOf
2a3c0 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65  Select(Parse*,Se
2a3d0 6c 65 63 74 2a 2c 63 68 61 72 29 3b 0a 76 6f 69  lect*,char);.voi
2a3e0 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73  d sqlite3OpenMas
2a3f0 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a  terTable(Parse *
2a400 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73  , int);.Index *s
2a410 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79  qlite3PrimaryKey
2a420 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69  Index(Table*);.i
2a430 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  16 sqlite3Column
2a440 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20  OfIndex(Index*, 
2a450 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  i16);.void sqlit
2a460 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72  e3StartTable(Par
2a470 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
2a480 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
2a490 74 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 45  t);.#if SQLITE_E
2a4a0 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c  NABLE_HIDDEN_COL
2a4b0 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c 69  UMNS.  void sqli
2a4c0 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74  te3ColumnPropert
2a4d0 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c  iesFromName(Tabl
2a4e0 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65  e*, Column*);.#e
2a4f0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2a500 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72  ite3ColumnProper
2a510 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43  tiesFromName(T,C
2a520 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65  ) /* no-op */.#e
2a530 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
2a540 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  3AddColumn(Parse
2a550 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29  *,Token*,Token*)
2a560 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
2a570 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c  dNotNull(Parse*,
2a580 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2a590 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79  te3AddPrimaryKey
2a5a0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
2a5b0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  t*, int, int, in
2a5c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2a5d0 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69  AddCheckConstrai
2a5e0 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  nt(Parse*, Expr*
2a5f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2a600 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50  ddDefaultValue(P
2a610 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73  arse*,Expr*,cons
2a620 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
2a630 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2a640 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65  e3AddCollateType
2a650 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
2a660 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e  ;.void sqlite3En
2a670 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  dTable(Parse*,To
2a680 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53  ken*,Token*,u8,S
2a690 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
2a6a0 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e  ite3ParseUri(con
2a6b0 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
2a6c0 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e  har*,unsigned in
2a6d0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
2a6e0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
2a6f0 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61  vfs**,char**,cha
2a700 72 20 2a 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  r **);.#ifdef SQ
2a710 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20  LITE_HAS_CODEC. 
2a720 20 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65   int sqlite3Code
2a730 63 51 75 65 72 79 50 61 72 61 6d 65 74 65 72 73  cQueryParameters
2a740 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
2a750 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
2a760 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2a770 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 63 51  ne sqlite3CodecQ
2a780 75 65 72 79 50 61 72 61 6d 65 74 65 72 73 28 41  ueryParameters(A
2a790 2c 42 2c 43 29 20 30 0a 23 65 6e 64 69 66 0a 42  ,B,C) 0.#endif.B
2a7a0 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e  tree *sqlite3DbN
2a7b0 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74  ameToBtree(sqlit
2a7c0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
2a7d0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
2a7e0 5f 55 4e 54 45 53 54 41 42 4c 45 0a 23 20 64 65  _UNTESTABLE.# de
2a7f0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c  fine sqlite3Faul
2a800 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f  tSim(X) SQLITE_O
2a810 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71  K.#else.  int sq
2a820 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e  lite3FaultSim(in
2a830 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76  t);.#endif..Bitv
2a840 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65  ec *sqlite3Bitve
2a850 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e  cCreate(u32);.in
2a860 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54  t sqlite3BitvecT
2a870 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  est(Bitvec*, u32
2a880 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
2a890 74 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28  tvecTestNotNull(
2a8a0 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
2a8b0 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
2a8c0 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  Set(Bitvec*, u32
2a8d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
2a8e0 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65  itvecClear(Bitve
2a8f0 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b  c*, u32, void*);
2a900 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
2a910 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65  vecDestroy(Bitve
2a920 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  c*);.u32 sqlite3
2a930 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65  BitvecSize(Bitve
2a940 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  c*);.#ifndef SQL
2a950 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69  ITE_UNTESTABLE.i
2a960 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
2a970 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c  BuiltinTest(int,
2a980 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52  int*);.#endif..R
2a990 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f  owSet *sqlite3Ro
2a9a0 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33  wSetInit(sqlite3
2a9b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a9c0 52 6f 77 53 65 74 44 65 6c 65 74 65 28 76 6f 69  RowSetDelete(voi
2a9d0 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
2a9e0 33 52 6f 77 53 65 74 43 6c 65 61 72 28 76 6f 69  3RowSetClear(voi
2a9f0 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
2aa00 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f  3RowSetInsert(Ro
2aa10 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74  wSet*, i64);.int
2aa20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
2aa30 73 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20  st(RowSet*, int 
2aa40 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e  iBatch, i64);.in
2aa50 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e  t sqlite3RowSetN
2aa60 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ext(RowSet*, i64
2aa70 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
2aa80 33 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73  3CreateView(Pars
2aa90 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
2aaa0 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
2aab0 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e  *,Select*,int,in
2aac0 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
2aad0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
2aae0 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28  EW) || !defined(
2aaf0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2ab00 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20  UALTABLE).  int 
2ab10 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
2ab20 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a  lumnNames(Parse*
2ab30 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a  ,Table*);.#else.
2ab40 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2ab50 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
2ab60 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66  es(A,B) 0.#endif
2ab70 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
2ab80 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69  _ATTACHED>30.  i
2ab90 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b  nt sqlite3DbMask
2aba0 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29  AllZero(yDbMask)
2abb0 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
2abc0 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50  lite3DropTable(P
2abd0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2abe0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2abf0 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70   sqlite3CodeDrop
2ac00 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61  Table(Parse*, Ta
2ac10 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ble*, int, int);
2ac20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
2ac30 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33  eteTable(sqlite3
2ac40 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64  *, Table*);.void
2ac50 20 73 71 6c 69 74 65 33 46 72 65 65 49 6e 64 65   sqlite3FreeInde
2ac60 78 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65  x(sqlite3*, Inde
2ac70 78 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  x*);.#ifndef SQL
2ac80 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
2ac90 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71  REMENT.  void sq
2aca0 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
2acb0 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70  ntBegin(Parse *p
2acc0 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73  Parse);.  void s
2acd0 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
2ace0 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50  entEnd(Parse *pP
2acf0 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64  arse);.#else.# d
2ad00 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
2ad10 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28  oincrementBegin(
2ad20 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  X).# define sqli
2ad30 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
2ad40 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f  End(X).#endif.vo
2ad50 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74  id sqlite3Insert
2ad60 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2ad70 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69  *, Select*, IdLi
2ad80 73 74 2a 2c 20 69 6e 74 2c 20 55 70 73 65 72 74  st*, int, Upsert
2ad90 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
2ada0 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73  3ArrayAllocate(s
2adb0 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e  qlite3*,void*,in
2adc0 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64  t,int*,int*);.Id
2add0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
2ade0 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a  istAppend(Parse*
2adf0 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  , IdList*, Token
2ae00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
2ae10 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73  dListIndex(IdLis
2ae20 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
2ae30 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
2ae40 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28  3SrcListEnlarge(
2ae50 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2ae60 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63  , int, int);.Src
2ae70 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
2ae80 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
2ae90 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
2aea0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72  en*, Token*);.Sr
2aeb0 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
2aec0 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54  cListAppendFromT
2aed0 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  erm(Parse*, SrcL
2aee0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
2aef0 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
2af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af10 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65              Toke
2af20 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  n*, Select*, Exp
2af30 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  r*, IdList*);.vo
2af40 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
2af50 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65  tIndexedBy(Parse
2af60 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54   *, SrcList *, T
2af70 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71  oken *);.void sq
2af80 6c 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e 63  lite3SrcListFunc
2af90 41 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72 63  Args(Parse*, Src
2afa0 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
2afb0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
2afc0 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61  dexedByLookup(Pa
2afd0 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72  rse *, struct Sr
2afe0 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76  cList_item *);.v
2aff0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
2b000 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
2b010 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
2b020 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73  sqlite3SrcListAs
2b030 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73  signCursors(Pars
2b040 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76  e*, SrcList*);.v
2b050 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73  oid sqlite3IdLis
2b060 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
2b070 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
2b080 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44   sqlite3SrcListD
2b090 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
2b0a0 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78  SrcList*);.Index
2b0b0 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74   *sqlite3Allocat
2b0c0 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c  eIndexObject(sql
2b0d0 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68  ite3*,i16,int,ch
2b0e0 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar**);.void sqli
2b0f0 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50  te3CreateIndex(P
2b100 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
2b110 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  en*,SrcList*,Exp
2b120 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e  rList*,int,Token
2b130 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2b140 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
2b150 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  r*, int, int, u8
2b160 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
2b170 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ropIndex(Parse*,
2b180 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
2b190 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65  .int sqlite3Sele
2b1a0 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ct(Parse*, Selec
2b1b0 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29  t*, SelectDest*)
2b1c0 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
2b1d0 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65  3SelectNew(Parse
2b1e0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c  *,ExprList*,SrcL
2b1f0 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
2b200 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
2b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
2b220 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75  xpr*,ExprList*,u
2b230 33 32 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  32,Expr*);.void 
2b240 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c  sqlite3SelectDel
2b250 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65  ete(sqlite3*, Se
2b260 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  lect*);.Table *s
2b270 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f  qlite3SrcListLoo
2b280 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  kup(Parse*, SrcL
2b290 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2b2a0 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72  e3IsReadOnly(Par
2b2b0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2b2c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
2b2d0 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  penTable(Parse*,
2b2e0 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69   int iCur, int i
2b2f0 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  Db, Table*, int)
2b300 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
2b310 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
2b320 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29  TE_DELETE_LIMIT)
2b330 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
2b340 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
2b350 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  Y).Expr *sqlite3
2b360 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65  LimitWhere(Parse
2b370 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
2b380 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
2b390 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a  ,char*);.#endif.
2b3a0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
2b3b0 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53  teFrom(Parse*, S
2b3c0 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  rcList*, Expr*, 
2b3d0 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
2b3e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
2b3f0 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72  pdate(Parse*, Sr
2b400 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
2b410 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 45 78 70 72  *,Expr*,int,Expr
2b420 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 0a 20 20 20  List*,Expr*,.   
2b430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b440 55 70 73 65 72 74 2a 29 3b 0a 57 68 65 72 65 49  Upsert*);.WhereI
2b450 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72  nfo *sqlite3Wher
2b460 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72  eBegin(Parse*,Sr
2b470 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
2b480 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  rList*,ExprList*
2b490 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,u16,int);.void 
2b4a0 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28  sqlite3WhereEnd(
2b4b0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67  WhereInfo*);.Log
2b4c0 45 73 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  Est sqlite3Where
2b4d0 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57  OutputRowCount(W
2b4e0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
2b4f0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
2b500 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f  stinct(WhereInfo
2b510 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
2b520 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68  hereIsOrdered(Wh
2b530 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
2b540 71 6c 69 74 65 33 57 68 65 72 65 4f 72 64 65 72  qlite3WhereOrder
2b550 42 79 4c 69 6d 69 74 4f 70 74 4c 61 62 65 6c 28  ByLimitOptLabel(
2b560 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
2b570 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53   sqlite3WhereIsS
2b580 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  orted(WhereInfo*
2b590 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
2b5a0 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c  ereContinueLabel
2b5b0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
2b5c0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 72  t sqlite3WhereBr
2b5d0 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e  eakLabel(WhereIn
2b5e0 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
2b5f0 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28  3WhereOkOnePass(
2b600 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a  WhereInfo*, int*
2b610 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  );.#define ONEPA
2b620 53 53 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20  SS_OFF      0   
2b630 20 20 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f       /* Use of O
2b640 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77  NEPASS not allow
2b650 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e  ed */.#define ON
2b660 45 50 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31  EPASS_SINGLE   1
2b670 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41          /* ONEPA
2b680 53 53 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73  SS valid for a s
2b690 69 6e 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65  ingle row update
2b6a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50   */.#define ONEP
2b6b0 41 53 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20  ASS_MULTI    2  
2b6c0 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53        /* ONEPASS
2b6d0 20 69 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75   is valid for mu
2b6e0 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76  ltiple rows */.v
2b6f0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
2b700 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75  odeLoadIndexColu
2b710 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78  mn(Parse*, Index
2b720 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2b730 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2b740 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28  prCodeGetColumn(
2b750 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2b760 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  int, int, int, u
2b770 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
2b780 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
2b790 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20  nOfTable(Vdbe*, 
2b7a0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
2b7b0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2b7c0 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65  ite3ExprCodeMove
2b7d0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
2b7e0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2b7f0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61  lite3ExprCode(Pa
2b800 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2b810 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2b820 78 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72 73  xprCodeCopy(Pars
2b830 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
2b840 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2b850 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28  rCodeFactorable(
2b860 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2b870 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2b880 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50  ExprCodeAtInit(P
2b890 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2b8a0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2b8b0 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73  xprCodeTemp(Pars
2b8c0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29  e*, Expr*, int*)
2b8d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2b8e0 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73  rCodeTarget(Pars
2b8f0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
2b900 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2b910 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61  rCodeAndCache(Pa
2b920 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2b930 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2b940 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50  prCodeExprList(P
2b950 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
2b960 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
2b970 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2b980 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78  ECEL_DUP      0x
2b990 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74  01  /* Deep, not
2b9a0 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20   shallow copies 
2b9b0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
2b9c0 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20  E_ECEL_FACTOR   
2b9d0 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20  0x02  /* Factor 
2b9e0 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72  out constant ter
2b9f0 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ms */.#define SQ
2ba00 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20  LITE_ECEL_REF   
2ba10 20 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20     0x04  /* Use 
2ba20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72  ExprList.u.x.iOr
2ba30 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66  derByCol */.#def
2ba40 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
2ba50 4f 4d 49 54 52 45 46 20 20 30 78 30 38 20 20 2f  OMITREF  0x08  /
2ba60 2a 20 4f 6d 69 74 20 69 66 20 45 78 70 72 4c 69  * Omit if ExprLi
2ba70 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43  st.u.x.iOrderByC
2ba80 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  ol */.void sqlit
2ba90 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72  e3ExprIfTrue(Par
2baa0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
2bab0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2bac0 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50  te3ExprIfFalse(P
2bad0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2bae0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2baf0 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
2bb00 44 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Dup(Parse*, Expr
2bb10 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61  *, int, int);.Ta
2bb20 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  ble *sqlite3Find
2bb30 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63  Table(sqlite3*,c
2bb40 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2bb50 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  t char*);.#defin
2bb60 65 20 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20  e LOCATE_VIEW   
2bb70 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f   0x01.#define LO
2bb80 43 41 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30  CATE_NOERR   0x0
2bb90 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  2.Table *sqlite3
2bba0 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73  LocateTable(Pars
2bbb0 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e  e*,u32 flags,con
2bbc0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2bbd0 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  char*);.Table *s
2bbe0 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
2bbf0 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32  eItem(Parse*,u32
2bc00 20 66 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72   flags,struct Sr
2bc10 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49  cList_item *);.I
2bc20 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e  ndex *sqlite3Fin
2bc30 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  dIndex(sqlite3*,
2bc40 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2bc50 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2bc60 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2bc70 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
2bc80 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
2bc90 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2bca0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
2bcb0 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  teIndex(sqlite3*
2bcc0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
2bcd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2bce0 61 63 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b  acuum(Parse*,Tok
2bcf0 65 6e 2a 2c 45 78 70 72 2a 29 3b 0a 69 6e 74 20  en*,Expr*);.int 
2bd00 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d  sqlite3RunVacuum
2bd10 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33  (char**, sqlite3
2bd20 2a 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f  *, int, sqlite3_
2bd30 76 61 6c 75 65 2a 29 3b 0a 63 68 61 72 20 2a 73  value*);.char *s
2bd40 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f  qlite3NameFromTo
2bd50 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f  ken(sqlite3*, To
2bd60 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2bd70 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 50 61  e3ExprCompare(Pa
2bd80 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  rse*,Expr*, Expr
2bd90 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2bda0 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 53  ite3ExprCompareS
2bdb0 6b 69 70 28 45 78 70 72 2a 2c 20 45 78 70 72 2a  kip(Expr*, Expr*
2bdc0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2bdd0 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61  te3ExprListCompa
2bde0 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  re(ExprList*, Ex
2bdf0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69  prList*, int);.i
2be00 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d  nt sqlite3ExprIm
2be10 70 6c 69 65 73 45 78 70 72 28 50 61 72 73 65 2a  pliesExpr(Parse*
2be20 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  ,Expr*, Expr*, i
2be30 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2be40 45 78 70 72 49 6d 70 6c 69 65 73 4e 6f 6e 4e 75  ExprImpliesNonNu
2be50 6c 6c 52 6f 77 28 45 78 70 72 2a 2c 69 6e 74 29  llRow(Expr*,int)
2be60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2be70 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61  prAnalyzeAggrega
2be80 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  tes(NameContext*
2be90 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
2bea0 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
2beb0 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e  eAggList(NameCon
2bec0 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29  text*,ExprList*)
2bed0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2bee0 72 43 6f 76 65 72 65 64 42 79 49 6e 64 65 78 28  rCoveredByIndex(
2bef0 45 78 70 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c  Expr*, int iCur,
2bf00 20 49 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a 69   Index *pIdx);.i
2bf10 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69  nt sqlite3Functi
2bf20 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78  onUsesThisSrc(Ex
2bf30 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  pr*, SrcList*);.
2bf40 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74  Vdbe *sqlite3Get
2bf50 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69  Vdbe(Parse*);.#i
2bf60 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
2bf70 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c  ESTABLE.void sql
2bf80 69 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74  ite3PrngSaveStat
2bf90 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  e(void);.void sq
2bfa0 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65  lite3PrngRestore
2bfb0 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e  State(void);.#en
2bfc0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2bfd0 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69  RollbackAll(sqli
2bfe0 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
2bff0 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
2c000 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  ySchema(Parse*, 
2c010 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2c020 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65  e3CodeVerifyName
2c030 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  dSchema(Parse*, 
2c040 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29  const char *zDb)
2c050 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
2c060 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  ginTransaction(P
2c070 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
2c080 64 20 73 71 6c 69 74 65 33 45 6e 64 54 72 61 6e  d sqlite3EndTran
2c090 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69  saction(Parse*,i
2c0a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2c0b0 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65  3Savepoint(Parse
2c0c0 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b  *, int, Token*);
2c0d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f  .void sqlite3Clo
2c0e0 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c  seSavepoints(sql
2c0f0 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ite3 *);.void sq
2c100 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41  lite3LeaveMutexA
2c110 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71  ndCloseZombie(sq
2c120 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
2c130 69 74 65 33 45 78 70 72 49 64 54 6f 54 72 75 65  ite3ExprIdToTrue
2c140 46 61 6c 73 65 28 45 78 70 72 2a 29 3b 0a 69 6e  False(Expr*);.in
2c150 74 20 73 71 6c 69 74 65 33 45 78 70 72 54 72 75  t sqlite3ExprTru
2c160 74 68 56 61 6c 75 65 28 63 6f 6e 73 74 20 45 78  thValue(const Ex
2c170 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2c180 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28  3ExprIsConstant(
2c190 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2c1a0 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
2c1b0 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b  tNotJoin(Expr*);
2c1c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2c1d0 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63  IsConstantOrFunc
2c1e0 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b  tion(Expr*, u8);
2c1f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2c200 49 73 43 6f 6e 73 74 61 6e 74 4f 72 47 72 6f 75  IsConstantOrGrou
2c210 70 42 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  pBy(Parse*, Expr
2c220 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
2c230 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
2c240 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78  TableConstant(Ex
2c250 70 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66  pr*,int);.#ifdef
2c260 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
2c270 55 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20  URSOR_HINTS.int 
2c280 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61  sqlite3ExprConta
2c290 69 6e 73 53 75 62 71 75 65 72 79 28 45 78 70 72  insSubquery(Expr
2c2a0 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  *);.#endif.int s
2c2b0 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65  qlite3ExprIsInte
2c2c0 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29  ger(Expr*, int*)
2c2d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2c2e0 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74  rCanBeNull(const
2c2f0 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
2c300 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41  ite3ExprNeedsNoA
2c310 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f  ffinityChange(co
2c320 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29  nst Expr*, char)
2c330 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52  ;.int sqlite3IsR
2c340 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a  owid(const char*
2c350 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
2c360 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65  enerateRowDelete
2c370 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62  (.    Parse*,Tab
2c380 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74  le*,Trigger*,int
2c390 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c  ,int,int,i16,u8,
2c3a0 75 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64  u8,u8,int);.void
2c3b0 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
2c3c0 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50  RowIndexDelete(P
2c3d0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
2c3e0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
2c3f0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2c400 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79  GenerateIndexKey
2c410 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
2c420 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20   int, int, int, 
2c430 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29  int*,Index*,int)
2c440 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2c450 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65  solvePartIdxLabe
2c460 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69  l(Parse*,int);.i
2c470 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 52 65  nt sqlite3ExprRe
2c480 66 65 72 65 6e 63 65 73 55 70 64 61 74 65 64 43  ferencesUpdatedC
2c490 6f 6c 75 6d 6e 28 45 78 70 72 2a 2c 69 6e 74 2a  olumn(Expr*,int*
2c4a0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2c4b0 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74  te3GenerateConst
2c4c0 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73  raintChecks(Pars
2c4d0 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69  e*,Table*,int*,i
2c4e0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a  nt,int,int,int,.
2c4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c510 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69       u8,u8,int,i
2c520 6e 74 2a 2c 69 6e 74 2a 2c 55 70 73 65 72 74 2a  nt*,int*,Upsert*
2c530 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2c540 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49  _ENABLE_NULL_TRI
2c550 4d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  M.  void sqlite3
2c560 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28  SetMakeRecordP5(
2c570 56 64 62 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23  Vdbe*,Table*);.#
2c580 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2c590 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f  lite3SetMakeReco
2c5a0 72 64 50 35 28 41 2c 42 29 0a 23 65 6e 64 69 66  rdP5(A,B).#endif
2c5b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
2c5c0 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50  pleteInsertion(P
2c5d0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
2c5e0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  ,int,int,int*,in
2c5f0 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20  t,int,int);.int 
2c600 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
2c610 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65  AndIndices(Parse
2c620 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
2c630 75 38 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e  u8, int, u8*, in
2c640 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20  t*, int*);.void 
2c650 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74  sqlite3BeginWrit
2c660 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65  eOperation(Parse
2c670 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
2c680 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57  id sqlite3MultiW
2c690 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f  rite(Parse*);.vo
2c6a0 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f  id sqlite3MayAbo
2c6b0 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  rt(Parse*);.void
2c6c0 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73   sqlite3HaltCons
2c6d0 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
2c6e0 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20  nt, int, char*, 
2c6f0 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  i8, u8);.void sq
2c700 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74  lite3UniqueConst
2c710 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
2c720 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  t, Index*);.void
2c730 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e   sqlite3RowidCon
2c740 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
2c750 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78  int, Table*);.Ex
2c760 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44  pr *sqlite3ExprD
2c770 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
2c780 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74  *,int);.ExprList
2c790 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
2c7a0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78  tDup(sqlite3*,Ex
2c7b0 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72  prList*,int);.Sr
2c7c0 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
2c7d0 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  cListDup(sqlite3
2c7e0 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b  *,SrcList*,int);
2c7f0 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
2c800 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  IdListDup(sqlite
2c810 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c  3*,IdList*);.Sel
2c820 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
2c830 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53  ctDup(sqlite3*,S
2c840 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 46 75 6e  elect*,int);.Fun
2c850 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 75 6e  cDef *sqlite3Fun
2c860 63 74 69 6f 6e 53 65 61 72 63 68 28 69 6e 74 2c  ctionSearch(int,
2c870 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
2c880 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74  id sqlite3Insert
2c890 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e  BuiltinFuncs(Fun
2c8a0 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63  cDef*,int);.Func
2c8b0 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Def *sqlite3Find
2c8c0 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
2c8d0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
2c8e0 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73  t,u8,u8);.void s
2c8f0 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75  qlite3RegisterBu
2c900 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76  iltinFunctions(v
2c910 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
2c920 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69  e3RegisterDateTi
2c930 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  meFunctions(void
2c940 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2c950 65 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63  egisterPerConnec
2c960 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74  tionBuiltinFunct
2c970 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
2c980 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
2c990 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33  yCheckOk(sqlite3
2c9a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2c9b0 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72  afetyCheckSickOr
2c9c0 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  Ok(sqlite3*);.vo
2c9d0 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65  id sqlite3Change
2c9e0 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69  Cookie(Parse*, i
2c9f0 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
2ca00 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
2ca10 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64  IEW) && !defined
2ca20 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
2ca30 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74  GGER).void sqlit
2ca40 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65  e3MaterializeVie
2ca50 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  w(Parse*, Table*
2ca60 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73  , Expr*, ExprLis
2ca70 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23  t*,Expr*,int);.#
2ca80 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
2ca90 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
2caa0 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ER.  void sqlite
2cab0 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61  3BeginTrigger(Pa
2cac0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b  rse*, Token*,Tok
2cad0 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69  en*,int,int,IdLi
2cae0 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20  st*,SrcList*,.  
2caf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb00 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69           Expr*,i
2cb10 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
2cb20 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72   sqlite3FinishTr
2cb30 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
2cb40 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65  iggerStep*, Toke
2cb50 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  n*);.  void sqli
2cb60 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50  te3DropTrigger(P
2cb70 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2cb80 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2cb90 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
2cba0 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  Ptr(Parse*, Trig
2cbb0 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  ger*);.  Trigger
2cbc0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
2cbd0 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20  sExist(Parse *, 
2cbe0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Table*, int, Exp
2cbf0 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61  rList*, int *pMa
2cc00 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  sk);.  Trigger *
2cc10 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
2cc20 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
2cc30 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  e *);.  void sql
2cc40 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
2cc50 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
2cc60 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  er *, int, ExprL
2cc70 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  ist*, int, Table
2cc80 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   *,.            
2cc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cca0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
2ccb0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
2ccc0 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
2ccd0 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67  ct(Parse *, Trig
2cce0 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  ger *, Table *, 
2ccf0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
2cd00 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65    void sqliteVie
2cd10 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a  wTriggers(Parse*
2cd20 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
2cd30 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29   int, ExprList*)
2cd40 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2cd50 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65  DeleteTriggerSte
2cd60 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  p(sqlite3*, Trig
2cd70 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69  gerStep*);.  Tri
2cd80 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
2cd90 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74  3TriggerSelectSt
2cda0 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  ep(sqlite3*,Sele
2cdb0 63 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ct*,.           
2cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2cde0 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
2cdf0 68 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  har*);.  Trigger
2ce00 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
2ce10 67 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 50  ggerInsertStep(P
2ce20 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64  arse*,Token*, Id
2ce30 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
2ce40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
2ce60 65 6c 65 63 74 2a 2c 75 38 2c 55 70 73 65 72 74  elect*,u8,Upsert
2ce70 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce90 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
2cea0 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
2ceb0 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  r*);.  TriggerSt
2cec0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
2ced0 65 72 55 70 64 61 74 65 53 74 65 70 28 50 61 72  erUpdateStep(Par
2cee0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  se*,Token*,ExprL
2cef0 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c  ist*, Expr*, u8,
2cf00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
2cf30 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
2cf40 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
2cf50 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
2cf60 44 65 6c 65 74 65 53 74 65 70 28 50 61 72 73 65  DeleteStep(Parse
2cf70 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c  *,Token*, Expr*,
2cf80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfa0 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
2cfb0 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
2cfc0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2cfd0 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  3DeleteTrigger(s
2cfe0 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
2cff0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2d000 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2d010 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
2d020 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
2d030 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  *);.  u32 sqlite
2d040 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
2d050 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Parse*,Trigger*,
2d060 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e  ExprList*,int,in
2d070 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23  t,Table*,int);.#
2d080 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
2d090 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
2d0a0 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20  ((p)->pToplevel 
2d0b0 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c  ? (p)->pToplevel
2d0c0 20 3a 20 28 70 29 29 0a 23 20 64 65 66 69 6e 65   : (p)).# define
2d0d0 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76   sqlite3IsToplev
2d0e0 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70  el(p) ((p)->pTop
2d0f0 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a  level==0).#else.
2d100 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2d110 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c  TriggersExist(B,
2d120 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66  C,D,E,F) 0.# def
2d130 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74  ine sqlite3Delet
2d140 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20  eTrigger(A,B).# 
2d150 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72  define sqlite3Dr
2d160 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42  opTriggerPtr(A,B
2d170 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2d180 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2d190 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a  eTrigger(A,B,C).
2d1a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2d1b0 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41  CodeRowTrigger(A
2d1c0 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49  ,B,C,D,E,F,G,H,I
2d1d0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2d1e0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
2d1f0 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45  Direct(A,B,C,D,E
2d200 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,F).# define sql
2d210 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
2d220 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65  X, Y) 0.# define
2d230 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
2d240 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66  level(p) p.# def
2d250 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70  ine sqlite3IsTop
2d260 6c 65 76 65 6c 28 70 29 20 31 0a 23 20 64 65 66  level(p) 1.# def
2d270 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
2d280 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c  erColmask(A,B,C,
2d290 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69  D,E,F,G) 0.#endi
2d2a0 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  f..int sqlite3Jo
2d2b0 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  inType(Parse*, T
2d2c0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
2d2d0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2d2e0 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67  ite3CreateForeig
2d2f0 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  nKey(Parse*, Exp
2d300 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  rList*, Token*, 
2d310 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  ExprList*, int);
2d320 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
2d330 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  erForeignKey(Par
2d340 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64  se*, int);.#ifnd
2d350 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
2d360 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76  UTHORIZATION.  v
2d370 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52  oid sqlite3AuthR
2d380 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ead(Parse*,Expr*
2d390 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74  ,Schema*,SrcList
2d3a0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
2d3b0 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65  3AuthCheck(Parse
2d3c0 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
2d3d0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
2d3e0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
2d3f0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
2d400 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72  hContextPush(Par
2d410 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74  se*, AuthContext
2d420 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2d430 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
2d440 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75  uthContextPop(Au
2d450 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69  thContext*);.  i
2d460 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  nt sqlite3AuthRe
2d470 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f  adCol(Parse*, co
2d480 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73  nst char *, cons
2d490 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
2d4a0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2d4b0 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61  qlite3AuthRead(a
2d4c0 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65  ,b,c,d).# define
2d4d0 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
2d4e0 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20  k(a,b,c,d,e)    
2d4f0 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69  SQLITE_OK.# defi
2d500 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
2d510 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29  ntextPush(a,b,c)
2d520 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2d530 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
2d540 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a  a)  ((void)(a)).
2d550 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2d560 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a  te3Attach(Parse*
2d570 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  , Expr*, Expr*, 
2d580 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2d590 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65  ite3Detach(Parse
2d5a0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
2d5b0 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44  sqlite3FixInit(D
2d5c0 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c  bFixer*, Parse*,
2d5d0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2d5e0 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
2d5f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
2d600 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a  SrcList(DbFixer*
2d610 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74  , SrcList*);.int
2d620 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63   sqlite3FixSelec
2d630 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65  t(DbFixer*, Sele
2d640 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
2d650 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72  3FixExpr(DbFixer
2d660 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
2d670 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73  qlite3FixExprLis
2d680 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  t(DbFixer*, Expr
2d690 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2d6a0 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65  te3FixTriggerSte
2d6b0 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67  p(DbFixer*, Trig
2d6c0 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73  gerStep*);.int s
2d6d0 71 6c 69 74 65 33 52 65 61 6c 53 61 6d 65 41 73  qlite3RealSameAs
2d6e0 49 6e 74 28 64 6f 75 62 6c 65 2c 73 71 6c 69 74  Int(double,sqlit
2d6f0 65 33 5f 69 6e 74 36 34 29 3b 0a 69 6e 74 20 73  e3_int64);.int s
2d700 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74  qlite3AtoF(const
2d710 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65   char *z, double
2d720 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
2d730 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32   sqlite3GetInt32
2d740 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69  (const char *, i
2d750 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2d760 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72  3Atoi(const char
2d770 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2d780 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e  TE_OMIT_UTF16.in
2d790 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79  t sqlite3Utf16By
2d7a0 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64  teLen(const void
2d7b0 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68   *pData, int nCh
2d7c0 61 72 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  ar);.#endif.int 
2d7d0 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c  sqlite3Utf8CharL
2d7e0 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  en(const char *p
2d7f0 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29  Data, int nByte)
2d800 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66  ;.u32 sqlite3Utf
2d810 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a  8Read(const u8**
2d820 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
2d830 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f  3LogEst(u64);.Lo
2d840 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
2d850 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67  stAdd(LogEst,Log
2d860 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  Est);.#ifndef SQ
2d870 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2d880 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71  LTABLE.LogEst sq
2d890 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44  lite3LogEstFromD
2d8a0 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23  ouble(double);.#
2d8b0 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
2d8c0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2d8d0 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 29  STMT_SCANSTATUS)
2d8e0 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   || \.    define
2d8f0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2d900 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20 20 20  STAT4) || \.    
2d910 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
2d920 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54 45 44  XPLAIN_ESTIMATED
2d930 5f 52 4f 57 53 29 0a 75 36 34 20 73 71 6c 69 74  _ROWS).u64 sqlit
2d940 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f  e3LogEstToInt(Lo
2d950 67 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a 56 4c  gEst);.#endif.VL
2d960 69 73 74 20 2a 73 71 6c 69 74 65 33 56 4c 69 73  ist *sqlite3VLis
2d970 74 41 64 64 28 73 71 6c 69 74 65 33 2a 2c 56 4c  tAdd(sqlite3*,VL
2d980 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
2d990 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f 6e 73 74  ,int,int);.const
2d9a0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4c   char *sqlite3VL
2d9b0 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 56 4c 69  istNumToName(VLi
2d9c0 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  st*,int);.int sq
2d9d0 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d 65 54 6f  lite3VListNameTo
2d9e0 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f 6e 73 74  Num(VList*,const
2d9f0 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a   char*,int);../*
2da00 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20  .** Routines to 
2da10 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76  read and write v
2da20 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
2da30 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20  ntegers.  These 
2da40 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65  used to.** be de
2da50 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62  fined locally, b
2da60 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68  ut now we use th
2da70 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65  e varint routine
2da80 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a  s in the util.c.
2da90 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20  ** file..*/.int 
2daa0 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
2dab0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
2dac0 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65   u64);.u8 sqlite
2dad0 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74  3GetVarint(const
2dae0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
2daf0 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c  , u64 *);.u8 sql
2db00 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
2db10 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2db20 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69  har *, u32 *);.i
2db30 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt sqlite3Varint
2db40 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a  Len(u64 v);../*.
2db50 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  ** The common ca
2db60 73 65 20 69 73 20 66 6f 72 20 61 20 76 61 72 69  se is for a vari
2db70 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c  nt to be a singl
2db80 65 20 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f  e byte.  They fo
2db90 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f  llowing.** macro
2dba0 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d  s handle the com
2dbb0 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74  mon case without
2dbc0 20 61 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c   a procedure cal
2dbd0 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c  l, but then call
2dbe0 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72  .** the procedur
2dbf0 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72  e for larger var
2dc00 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ints..*/.#define
2dc10 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42   getVarint32(A,B
2dc20 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41  )  \.  (u8)((*(A
2dc30 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42 29  )<(u8)0x80)?((B)
2dc40 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71  =(u32)*(A)),1:sq
2dc50 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
2dc60 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29  ((A),(u32 *)&(B)
2dc70 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  )).#define putVa
2dc80 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
2dc90 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29 3c   (u8)(((u32)(B)<
2dca0 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29  (u32)0x80)?(*(A)
2dcb0 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  =(unsigned char)
2dcc0 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74  (B)),1:\.  sqlit
2dcd0 65 33 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c  e3PutVarint((A),
2dce0 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65  (B))).#define ge
2dcf0 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
2dd00 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66  e3GetVarint.#def
2dd10 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20  ine putVarint   
2dd20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
2dd30 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  t...const char *
2dd40 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
2dd50 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65 33 2a  nityStr(sqlite3*
2dd60 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  , Index*);.void 
2dd70 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69  sqlite3TableAffi
2dd80 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c  nity(Vdbe*, Tabl
2dd90 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73  e*, int);.char s
2dda0 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66  qlite3CompareAff
2ddb0 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
2ddc0 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69  r, char aff2);.i
2ddd0 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41  nt sqlite3IndexA
2dde0 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a  ffinityOk(Expr *
2ddf0 70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f  pExpr, char idx_
2de00 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20  affinity);.char 
2de10 73 71 6c 69 74 65 33 54 61 62 6c 65 43 6f 6c 75  sqlite3TableColu
2de20 6d 6e 41 66 66 69 6e 69 74 79 28 54 61 62 6c 65  mnAffinity(Table
2de30 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c  *,int);.char sql
2de40 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74 79  ite3ExprAffinity
2de50 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69  (Expr *pExpr);.i
2de60 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34  nt sqlite3Atoi64
2de70 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36  (const char*, i6
2de80 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  4*, int, u8);.in
2de90 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65  t sqlite3DecOrHe
2dea0 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61  xToI64(const cha
2deb0 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20  r*, i64*);.void 
2dec0 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68  sqlite3ErrorWith
2ded0 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  Msg(sqlite3*, in
2dee0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  t, const char*,.
2def0 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
2df00 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c  3Error(sqlite3*,
2df10 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2df20 65 33 53 79 73 74 65 6d 45 72 72 6f 72 28 73 71  e3SystemError(sq
2df30 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
2df40 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42  d *sqlite3HexToB
2df50 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  lob(sqlite3*, co
2df60 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
2df70 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48   n);.u8 sqlite3H
2df80 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a  exToInt(int h);.
2df90 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61  int sqlite3TwoPa
2dfa0 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  rtName(Parse *, 
2dfb0 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
2dfc0 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69  , Token **);..#i
2dfd0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2dfe0 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a  _NEED_ERR_NAME).
2dff0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2e000 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b  te3ErrName(int);
2e010 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2e020 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 45  SQLITE_ENABLE_DE
2e030 53 45 52 49 41 4c 49 5a 45 0a 69 6e 74 20 73 71  SERIALIZE.int sq
2e040 6c 69 74 65 33 4d 65 6d 64 62 49 6e 69 74 28 76  lite3MemdbInit(v
2e050 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f  oid);.#endif..co
2e060 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2e070 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e  3ErrStr(int);.in
2e080 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  t sqlite3ReadSch
2e090 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73  ema(Parse *pPars
2e0a0 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
2e0b0 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28  ite3FindCollSeq(
2e0c0 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c  sqlite3*,u8 enc,
2e0d0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74   const char*,int
2e0e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
2e0f0 42 69 6e 61 72 79 28 63 6f 6e 73 74 20 43 6f 6c  Binary(const Col
2e100 6c 53 65 71 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  lSeq*);.CollSeq 
2e110 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f  *sqlite3LocateCo
2e120 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
2e130 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  rse, const char*
2e140 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  zName);.CollSeq 
2e150 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c  *sqlite3ExprColl
2e160 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
2e170 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b  e, Expr *pExpr);
2e180 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2e190 33 45 78 70 72 4e 4e 43 6f 6c 6c 53 65 71 28 50  3ExprNNCollSeq(P
2e1a0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
2e1b0 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
2e1c0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53  sqlite3ExprCollS
2e1d0 65 71 4d 61 74 63 68 28 50 61 72 73 65 2a 2c 45  eqMatch(Parse*,E
2e1e0 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  xpr*,Expr*);.Exp
2e1f0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
2e200 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61  dCollateToken(Pa
2e210 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
2e220 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
2e230 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  , int);.Expr *sq
2e240 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
2e250 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a  ateString(Parse*
2e260 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,Expr*,const cha
2e270 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
2e280 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74  e3ExprSkipCollat
2e290 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  e(Expr*);.int sq
2e2a0 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65  lite3CheckCollSe
2e2b0 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53  q(Parse *, CollS
2e2c0 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  eq *);.int sqlit
2e2d0 65 33 57 72 69 74 61 62 6c 65 53 63 68 65 6d 61  e3WritableSchema
2e2e0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
2e2f0 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65  sqlite3CheckObje
2e300 63 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 20 63  ctName(Parse*, c
2e310 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
2e320 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
2e330 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2e340 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
2e350 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b  sqlite3 *, int);
2e360 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49  .int sqlite3AddI
2e370 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
2e380 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e  int sqlite3SubIn
2e390 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
2e3a0 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74  nt sqlite3MulInt
2e3b0 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
2e3c0 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33  t sqlite3AbsInt3
2e3d0 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53  2(int);.#ifdef S
2e3e0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33  QLITE_ENABLE_8_3
2e3f0 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69  _NAMES.void sqli
2e400 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 63  te3FileSuffix3(c
2e410 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
2e420 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2e430 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75  ne sqlite3FileSu
2e440 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69  ffix3(X,Y).#endi
2e450 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 42  f.u8 sqlite3GetB
2e460 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61  oolean(const cha
2e470 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74  r *z,u8);..const
2e480 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61   void *sqlite3Va
2e490 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f  lueText(sqlite3_
2e4a0 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74  value*, u8);.int
2e4b0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74   sqlite3ValueByt
2e4c0 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  es(sqlite3_value
2e4d0 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  *, u8);.void sql
2e4e0 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
2e4f0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2e500 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  int, const void 
2e510 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20  *,u8,.          
2e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f                vo
2e530 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
2e540 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2e550 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f  SetNull(sqlite3_
2e560 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71  value*);.void sq
2e570 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 73  lite3ValueFree(s
2e580 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
2e590 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55  #ifndef SQLITE_U
2e5a0 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73  NTESTABLE.void s
2e5b0 71 6c 69 74 65 33 52 65 73 75 6c 74 49 6e 74 52  qlite3ResultIntR
2e5c0 65 61 6c 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  eal(sqlite3_cont
2e5d0 65 78 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 73 71  ext*);.#endif.sq
2e5e0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c  lite3_value *sql
2e5f0 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c  ite3ValueNew(sql
2e600 69 74 65 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66  ite3 *);.#ifndef
2e610 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
2e620 31 36 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  16.char *sqlite3
2e630 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33  Utf16to8(sqlite3
2e640 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c   *, const void*,
2e650 20 69 6e 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69   int, u8);.#endi
2e660 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  f.int sqlite3Val
2e670 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74  ueFromExpr(sqlit
2e680 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38  e3 *, Expr *, u8
2e690 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61  , u8, sqlite3_va
2e6a0 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  lue **);.void sq
2e6b0 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41  lite3ValueApplyA
2e6c0 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f  ffinity(sqlite3_
2e6d0 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29  value *, u8, u8)
2e6e0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2e6f0 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78  _AMALGAMATION.ex
2e700 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
2e710 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
2e720 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  OpcodeProperty[]
2e730 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63  ;.extern const c
2e740 68 61 72 20 73 71 6c 69 74 65 33 53 74 72 42 49  har sqlite3StrBI
2e750 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  NARY[];.extern c
2e760 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2e770 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54  ar sqlite3UpperT
2e780 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e  oLower[];.extern
2e790 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
2e7a0 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70  char sqlite3Ctyp
2e7b0 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  eMap[];.extern c
2e7c0 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74  onst Token sqlit
2e7d0 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65  e3IntTokens[];.e
2e7e0 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
2e7f0 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43   struct Sqlite3C
2e800 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
2e810 66 69 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63  fig;.extern Func
2e820 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 42  DefHash sqlite3B
2e830 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b  uiltinFunctions;
2e840 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2e850 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20  OMIT_WSD.extern 
2e860 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69  int sqlite3Pendi
2e870 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23  ngByte;.#endif.#
2e880 65 6e 64 69 66 0a 23 69 66 64 65 66 20 56 44 42  endif.#ifdef VDB
2e890 45 5f 50 52 4f 46 49 4c 45 0a 65 78 74 65 72 6e  E_PROFILE.extern
2e8a0 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20   sqlite3_uint64 
2e8b0 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65 43  sqlite3NProfileC
2e8c0 6e 74 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  nt;.#endif.void 
2e8d0 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
2e8e0 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69  oved(sqlite3*, i
2e8f0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
2e900 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64  oid sqlite3Reind
2e910 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ex(Parse*, Token
2e920 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
2e930 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e   sqlite3AlterFun
2e940 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
2e950 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52  id sqlite3AlterR
2e960 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65  enameTable(Parse
2e970 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
2e980 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2e990 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 43 6f 6c  e3AlterRenameCol
2e9a0 75 6d 6e 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  umn(Parse*, SrcL
2e9b0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
2e9c0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2e9d0 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74  e3GetToken(const
2e9e0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
2e9f0 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73  , int *);.void s
2ea00 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73  qlite3NestedPars
2ea10 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  e(Parse*, const 
2ea20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
2ea30 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50  d sqlite3ExpireP
2ea40 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
2ea50 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  s(sqlite3*, int)
2ea60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
2ea70 64 65 52 68 73 4f 66 49 4e 28 50 61 72 73 65 2a  deRhsOfIN(Parse*
2ea80 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
2ea90 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75  nt sqlite3CodeSu
2eaa0 62 73 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20  bselect(Parse*, 
2eab0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2eac0 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50  ite3SelectPrep(P
2ead0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
2eae0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
2eaf0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
2eb00 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72  tWrongNumTermsEr
2eb10 72 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72 73  ror(Parse *pPars
2eb20 65 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69  e, Select *p);.i
2eb30 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53  nt sqlite3MatchS
2eb40 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68  panName(const ch
2eb50 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2eb60 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2eb70 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
2eb80 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
2eb90 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  xprNames(NameCon
2eba0 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  text*, Expr*);.i
2ebb0 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
2ebc0 65 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e  eExprListNames(N
2ebd0 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
2ebe0 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  rList*);.void sq
2ebf0 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65  lite3ResolveSele
2ec00 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20  ctNames(Parse*, 
2ec10 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
2ec20 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  text*);.int sqli
2ec30 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65  te3ResolveSelfRe
2ec40 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54  ference(Parse*,T
2ec50 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c  able*,int,Expr*,
2ec60 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
2ec70 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72  sqlite3ResolveOr
2ec80 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73 65  derGroupBy(Parse
2ec90 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72  *, Select*, Expr
2eca0 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
2ecb0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2ecc0 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56  3ColumnDefault(V
2ecd0 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  dbe *, Table *, 
2ece0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2ecf0 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69  sqlite3AlterFini
2ed00 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  shAddColumn(Pars
2ed10 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76  e *, Token *);.v
2ed20 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
2ed30 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50  BeginAddColumn(P
2ed40 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20  arse *, SrcList 
2ed50 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
2ed60 33 52 65 6e 61 6d 65 54 6f 6b 65 6e 4d 61 70 28  3RenameTokenMap(
2ed70 50 61 72 73 65 2a 2c 20 76 6f 69 64 2a 2c 20 54  Parse*, void*, T
2ed80 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2ed90 69 74 65 33 52 65 6e 61 6d 65 54 6f 6b 65 6e 52  ite3RenameTokenR
2eda0 65 6d 61 70 28 50 61 72 73 65 2a 2c 20 76 6f 69  emap(Parse*, voi
2edb0 64 20 2a 70 54 6f 2c 20 76 6f 69 64 20 2a 70 46  d *pTo, void *pF
2edc0 72 6f 6d 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  rom);.void sqlit
2edd0 65 33 52 65 6e 61 6d 65 45 78 70 72 55 6e 6d 61  e3RenameExprUnma
2ede0 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  p(Parse*, Expr*)
2edf0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2ee00 6e 61 6d 65 45 78 70 72 6c 69 73 74 55 6e 6d 61  nameExprlistUnma
2ee10 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  p(Parse*, ExprLi
2ee20 73 74 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  st*);.CollSeq *s
2ee30 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71  qlite3GetCollSeq
2ee40 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c  (Parse*, u8, Col
2ee50 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68  lSeq *, const ch
2ee60 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  ar*);.char sqlit
2ee70 65 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63  e3AffinityType(c
2ee80 6f 6e 73 74 20 63 68 61 72 2a 2c 20 43 6f 6c 75  onst char*, Colu
2ee90 6d 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  mn*);.void sqlit
2eea0 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a  e3Analyze(Parse*
2eeb0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2eec0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
2eed0 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28  vokeBusyHandler(
2eee0 42 75 73 79 48 61 6e 64 6c 65 72 2a 2c 20 73 71  BusyHandler*, sq
2eef0 6c 69 74 65 33 5f 66 69 6c 65 2a 29 3b 0a 69 6e  lite3_file*);.in
2ef00 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28  t sqlite3FindDb(
2ef10 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
2ef20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2ef30 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33  ndDbName(sqlite3
2ef40 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2ef50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e  );.int sqlite3An
2ef60 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74  alysisLoad(sqlit
2ef70 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f  e3*,int iDB);.vo
2ef80 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
2ef90 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c  IndexSamples(sql
2efa0 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76  ite3*,Index*);.v
2efb0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75  oid sqlite3Defau
2efc0 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29  ltRowEst(Index*)
2efd0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2efe0 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69  gisterLikeFuncti
2eff0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ons(sqlite3*, in
2f000 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  t);.int sqlite3I
2f010 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71  sLikeFunction(sq
2f020 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
2f030 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  *,char*);.void s
2f040 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61  qlite3SchemaClea
2f050 72 28 76 6f 69 64 20 2a 29 3b 0a 76 6f 69 64 20  r(void *);.void 
2f060 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65  sqlite3SchemaCle
2f070 61 72 4f 72 44 69 73 63 6f 6e 6e 65 63 74 28 73  arOrDisconnect(s
2f080 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 0a  qlite3*, int);..
2f090 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2f0a0 41 42 4c 45 5f 53 48 41 52 45 44 5f 53 43 48 45  ABLE_SHARED_SCHE
2f0b0 4d 41 20 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  MA .int sqlite3S
2f0c0 63 68 65 6d 61 43 6f 6e 6e 65 63 74 28 73 71 6c  chemaConnect(sql
2f0d0 69 74 65 33 2a 2c 20 69 6e 74 2c 20 75 36 34 29  ite3*, int, u64)
2f0e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68  ;.int sqlite3Sch
2f0f0 65 6d 61 44 69 73 63 6f 6e 6e 65 63 74 28 73 71  emaDisconnect(sq
2f100 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e  lite3 *, int, in
2f110 74 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69  t);.Schema *sqli
2f120 74 65 33 53 63 68 65 6d 61 45 78 74 72 61 63 74  te3SchemaExtract
2f130 28 53 63 68 65 6d 61 50 6f 6f 6c 2a 29 3b 0a 69  (SchemaPool*);.i
2f140 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  nt sqlite3Schema
2f150 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 20 69  Load(sqlite3*, i
2f160 6e 74 2c 20 69 6e 74 2a 2c 20 63 68 61 72 2a 2a  nt, int*, char**
2f170 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2f180 63 68 65 6d 61 52 65 6c 65 61 73 65 41 6c 6c 28  chemaReleaseAll(
2f190 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
2f1a0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 52 65 6c  sqlite3SchemaRel
2f1b0 65 61 73 65 28 73 71 6c 69 74 65 33 2a 2c 20 69  ease(sqlite3*, i
2f1c0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2f1d0 33 53 63 68 65 6d 61 41 64 6a 75 73 74 55 73 65  3SchemaAdjustUse
2f1e0 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  d(sqlite3*, int,
2f1f0 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69   int, int*);.voi
2f200 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 57  d sqlite3SchemaW
2f210 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  ritable(Parse*, 
2f220 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2f230 65 33 55 6e 6c 6f 63 6b 52 65 75 73 61 62 6c 65  e3UnlockReusable
2f240 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 20 2a  Schema(sqlite3 *
2f250 64 62 2c 20 69 6e 74 20 62 52 65 6c 65 61 73 65  db, int bRelease
2f260 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4c 6f  );.int sqlite3Lo
2f270 63 6b 52 65 75 73 61 62 6c 65 53 63 68 65 6d 61  ckReusableSchema
2f280 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23  (sqlite3 *db);.#
2f290 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2f2a0 6c 69 74 65 33 53 63 68 65 6d 61 57 72 69 74 61  lite3SchemaWrita
2f2b0 62 6c 65 28 78 2c 79 29 0a 23 20 64 65 66 69 6e  ble(x,y).# defin
2f2c0 65 20 73 71 6c 69 74 65 33 55 6e 6c 6f 63 6b 52  e sqlite3UnlockR
2f2d0 65 75 73 61 62 6c 65 53 63 68 65 6d 61 28 78 2c  eusableSchema(x,
2f2e0 79 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  y).# define sqli
2f2f0 74 65 33 4c 6f 63 6b 52 65 75 73 61 62 6c 65 53  te3LockReusableS
2f300 63 68 65 6d 61 28 78 29 20 30 0a 23 20 64 65 66  chema(x) 0.# def
2f310 69 6e 65 20 73 71 6c 69 74 65 33 53 63 68 65 6d  ine sqlite3Schem
2f320 61 44 69 73 63 6f 6e 6e 65 63 74 28 78 2c 79 2c  aDisconnect(x,y,
2f330 7a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64  z) SQLITE_OK.# d
2f340 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 63 68  efine sqlite3Sch
2f350 65 6d 61 4c 6f 61 64 28 77 2c 78 2c 79 2c 7a 29  emaLoad(w,x,y,z)
2f360 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66   SQLITE_OK.# def
2f370 69 6e 65 20 73 71 6c 69 74 65 33 53 63 68 65 6d  ine sqlite3Schem
2f380 61 52 65 6c 65 61 73 65 28 79 2c 7a 29 0a 23 20  aRelease(y,z).# 
2f390 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 63  define sqlite3Sc
2f3a0 68 65 6d 61 43 6f 6e 6e 65 63 74 28 78 2c 79 2c  hemaConnect(x,y,
2f3b0 7a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e  z) SQLITE_OK.#en
2f3c0 64 69 66 0a 0a 53 63 68 65 6d 61 20 2a 73 71 6c  dif..Schema *sql
2f3d0 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73 71  ite3SchemaGet(sq
2f3e0 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a  lite3 *, Btree *
2f3f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63  );.int sqlite3Sc
2f400 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69  hemaToIndex(sqli
2f410 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20  te3 *db, Schema 
2f420 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
2f430 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63  ite3KeyInfoAlloc
2f440 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e  (sqlite3*,int,in
2f450 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2f460 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79  KeyInfoUnref(Key
2f470 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  Info*);.KeyInfo 
2f480 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52  *sqlite3KeyInfoR
2f490 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65  ef(KeyInfo*);.Ke
2f4a0 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
2f4b0 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72  yInfoOfIndex(Par
2f4c0 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 4b 65  se*, Index*);.Ke
2f4d0 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
2f4e0 79 49 6e 66 6f 46 72 6f 6d 45 78 70 72 4c 69 73  yInfoFromExprLis
2f4f0 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  t(Parse*, ExprLi
2f500 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
2f510 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2f520 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65  DEBUG.int sqlite
2f530 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61  3KeyInfoIsWritea
2f540 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23  ble(KeyInfo*);.#
2f550 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2f560 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69  3CreateFunc(sqli
2f570 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
2f580 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76  r *, int, int, v
2f590 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a  oid *,.  void (*
2f5a0 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2f5b0 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2f5c0 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64  alue **),.  void
2f5d0 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2f5e0 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2f5f0 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20  3_value **), .  
2f600 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2f610 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f  _context*),.  vo
2f620 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
2f630 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64  ontext*),.  void
2f640 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2f650 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2f660 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20  3_value **), .  
2f670 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
2f680 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76  pDestructor.);.v
2f690 6f 69 64 20 73 71 6c 69 74 65 33 4e 6f 6f 70 44  oid sqlite3NoopD
2f6a0 65 73 74 72 75 63 74 6f 72 28 76 6f 69 64 2a 29  estructor(void*)
2f6b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f  ;.void sqlite3Oo
2f6c0 6d 46 61 75 6c 74 28 73 71 6c 69 74 65 33 2a 29  mFault(sqlite3*)
2f6d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f  ;.void sqlite3Oo
2f6e0 6d 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 29  mClear(sqlite3*)
2f6f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69  ;.int sqlite3Api
2f700 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  Exit(sqlite3 *db
2f710 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2f720 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62  te3OpenTempDatab
2f730 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76  ase(Parse *);..v
2f740 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
2f750 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d  cumInit(StrAccum
2f760 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61  *, sqlite3*, cha
2f770 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 63  r*, int, int);.c
2f780 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
2f790 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
2f7a0 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
2f7b0 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69  te3SelectDestIni
2f7c0 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e  t(SelectDest*,in
2f7d0 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  t,int);.Expr *sq
2f7e0 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d  lite3CreateColum
2f7f0 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  nExpr(sqlite3 *,
2f800 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c   SrcList *, int,
2f810 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c   int);..void sql
2f820 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72  ite3BackupRestar
2f830 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  t(sqlite3_backup
2f840 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2f850 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71  3BackupUpdate(sq
2f860 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20  lite3_backup *, 
2f870 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a  Pgno, const u8 *
2f880 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
2f890 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
2f8a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2f8b0 43 68 65 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20  CheckIN(Parse*, 
2f8c0 45 78 70 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  Expr*);.#else.# 
2f8d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
2f8e0 70 72 43 68 65 63 6b 49 4e 28 78 2c 79 29 20 53  prCheckIN(x,y) S
2f8f0 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a  QLITE_OK.#endif.
2f900 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2f910 4e 41 42 4c 45 5f 53 54 41 54 34 0a 69 6e 74 20  NABLE_STAT4.int 
2f920 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
2f930 65 53 65 74 56 61 6c 75 65 28 0a 20 20 20 20 50  eSetValue(.    P
2f940 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70  arse*,Index*,Unp
2f950 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78  ackedRecord**,Ex
2f960 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a  pr*,int,int,int*
2f970 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
2f980 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  at4ValueFromExpr
2f990 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2f9a0 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
2f9b0 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e**);.void sqlit
2f9c0 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65 65  e3Stat4ProbeFree
2f9d0 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  (UnpackedRecord*
2f9e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
2f9f0 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65  at4Column(sqlite
2fa00 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  3*, const void*,
2fa10 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74   int, int, sqlit
2fa20 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 63 68 61  e3_value**);.cha
2fa30 72 20 73 71 6c 69 74 65 33 49 6e 64 65 78 43 6f  r sqlite3IndexCo
2fa40 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 71 6c  lumnAffinity(sql
2fa50 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  ite3*, Index*, i
2fa60 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  nt);.#endif../*.
2fa70 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
2fa80 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65   to the LEMON-ge
2fa90 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a  nerated parser.*
2faa0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
2fab0 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20  _AMALGAMATION.  
2fac0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72  void *sqlite3Par
2fad0 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a  serAlloc(void*(*
2fae0 29 28 75 36 34 29 2c 20 50 61 72 73 65 2a 29 3b  )(u64), Parse*);
2faf0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
2fb00 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c  arserFree(void*,
2fb10 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
2fb20 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
2fb30 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64  lite3Parser(void
2fb40 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 29 3b 0a  *, int, Token);.
2fb50 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
2fb60 72 46 61 6c 6c 62 61 63 6b 28 69 6e 74 29 3b 0a  rFallback(int);.
2fb70 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41  #ifdef YYTRACKMA
2fb80 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e  XSTACKDEPTH.  in
2fb90 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 53  t sqlite3ParserS
2fba0 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b  tackPeak(void*);
2fbb0 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
2fbc0 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74  lite3AutoLoadExt
2fbd0 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
2fbe0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2fbf0 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45  E_OMIT_LOAD_EXTE
2fc00 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  NSION.  void sql
2fc10 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69  ite3CloseExtensi
2fc20 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
2fc30 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2fc40 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
2fc50 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ions(X).#endif..
2fc60 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2fc70 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
2fc80 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
2fc90 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a  ableLock(Parse *
2fca0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20  , int, int, u8, 
2fcb0 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23  const char *);.#
2fcc0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2fcd0 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
2fce0 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69  v,w,x,y,z).#endi
2fcf0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
2fd00 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69  _TEST.  int sqli
2fd10 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67  te3Utf8To8(unsig
2fd20 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  ned char*);.#end
2fd30 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
2fd40 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2fd50 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71  BLE.#  define sq
2fd60 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 59  lite3VtabClear(Y
2fd70 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2fd80 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29  te3VtabSync(X,Y)
2fd90 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
2fda0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2fdb0 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64  Rollback(X).#  d
2fdc0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2fdd0 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65  bCommit(X).#  de
2fde0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2fdf0 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20  InSync(db) 0.#  
2fe00 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2fe10 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66  abLock(X).#  def
2fe20 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
2fe30 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69  nlock(X).#  defi
2fe40 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  ne sqlite3VtabUn
2fe50 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64  lockList(X).#  d
2fe60 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2fe70 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c  bSavepoint(X, Y,
2fe80 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20   Z) SQLITE_OK.# 
2fe90 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47   define sqlite3G
2fea0 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28  etVTable(X,Y)  (
2feb0 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73  (VTable*)0).#els
2fec0 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  e.   void sqlite
2fed0 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74  3VtabClear(sqlit
2fee0 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b  e3 *db, Table*);
2fef0 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
2ff00 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73  VtabDisconnect(s
2ff10 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
2ff20 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71  e *p);.   int sq
2ff30 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73 71  lite3VtabSync(sq
2ff40 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a  lite3 *db, Vdbe*
2ff50 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
2ff60 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71  3VtabRollback(sq
2ff70 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69  lite3 *db);.   i
2ff80 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  nt sqlite3VtabCo
2ff90 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  mmit(sqlite3 *db
2ffa0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2ffb0 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c  e3VtabLock(VTabl
2ffc0 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
2ffd0 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
2ffe0 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f  VTable *);.   vo
2fff0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  id sqlite3VtabUn
30000 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33  lockList(sqlite3
30010 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
30020 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
30030 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20  sqlite3 *, int, 
30040 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  int);.   void sq
30050 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
30060 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c  rrmsg(Vdbe*, sql
30070 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20  ite3_vtab*);.   
30080 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47  VTable *sqlite3G
30090 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33  etVTable(sqlite3
300a0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 4d  *, Table*);.   M
300b0 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 56 74  odule *sqlite3Vt
300c0 61 62 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 0a  abCreateModule(.
300d0 20 20 20 20 20 73 71 6c 69 74 65 33 2a 2c 0a 20       sqlite3*,. 
300e0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
300f0 0a 20 20 20 20 20 63 6f 6e 73 74 20 73 71 6c 69  .     const sqli
30100 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a 20 20 20  te3_module*,.   
30110 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20 20 76 6f    void*,.     vo
30120 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a 20 20 20  id(*)(void*).   
30130 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  );.#  define sql
30140 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64  ite3VtabInSync(d
30150 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e  b) ((db)->nVTran
30160 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54  s>0 && (db)->aVT
30170 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  rans==0).#endif.
30180 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 45  int sqlite3VtabE
30190 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e 69  ponymousTableIni
301a0 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a  t(Parse*,Module*
301b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
301c0 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c  tabEponymousTabl
301d0 65 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 2c  eClear(sqlite3*,
301e0 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  Module*);.void s
301f0 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72  qlite3VtabMakeWr
30200 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61  itable(Parse*,Ta
30210 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ble*);.void sqli
30220 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72 73  te3VtabBeginPars
30230 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
30240 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
30250 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
30260 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50 61  ite3VtabFinishPa
30270 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  rse(Parse*, Toke
30280 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
30290 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61 72  3VtabArgInit(Par
302a0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
302b0 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64 28  e3VtabArgExtend(
302c0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
302d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
302e0 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74  CallCreate(sqlit
302f0 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
30300 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29  char *, char **)
30310 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
30320 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72  bCallConnect(Par
30330 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e  se*, Table*);.in
30340 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
30350 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33  lDestroy(sqlite3
30360 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
30370 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar *);.int sqlit
30380 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69  e3VtabBegin(sqli
30390 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29  te3 *, VTable *)
303a0 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  ;.FuncDef *sqlit
303b0 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75  e3VtabOverloadFu
303c0 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a  nction(sqlite3 *
303d0 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e  ,FuncDef*, int n
303e0 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 73 71 6c  Arg, Expr*);.sql
303f0 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74  ite3_int64 sqlit
30400 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d  e3StmtCurrentTim
30410 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e(sqlite3_contex
30420 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
30430 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64  VdbeParameterInd
30440 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20  ex(Vdbe*, const 
30450 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  char*, int);.int
30460 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72   sqlite3Transfer
30470 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33  Bindings(sqlite3
30480 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33  _stmt *, sqlite3
30490 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73  _stmt *);.void s
304a0 71 6c 69 74 65 33 50 61 72 73 65 72 52 65 73 65  qlite3ParserRese
304b0 74 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65  t(Parse*);.#ifde
304c0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
304d0 4e 4f 52 4d 41 4c 49 5a 45 0a 63 68 61 72 20 2a  NORMALIZE.char *
304e0 73 71 6c 69 74 65 33 4e 6f 72 6d 61 6c 69 7a 65  sqlite3Normalize
304f0 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68  (Vdbe*, const ch
30500 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  ar*);.#endif.int
30510 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72   sqlite3Reprepar
30520 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73  e(Vdbe*);.void s
30530 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 68  qlite3ExprListCh
30540 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a  eckLength(Parse*
30550 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
30560 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53  st char*);.CollS
30570 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72  eq *sqlite3Binar
30580 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28  yCompareCollSeq(
30590 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
305a0 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71   Expr *);.int sq
305b0 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72  lite3TempInMemor
305c0 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a  y(const sqlite3*
305d0 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  );.const char *s
305e0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64  qlite3JournalMod
305f0 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e  ename(int);.#ifn
30600 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
30610 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  WAL.  int sqlite
30620 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69  3Checkpoint(sqli
30630 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  te3*, int, int, 
30640 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69  int*, int*);.  i
30650 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66  nt sqlite3WalDef
30660 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73  aultHook(void*,s
30670 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
30680 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ar*,int);.#endif
30690 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
306a0 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74 68 20  OMIT_CTE.  With 
306b0 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64 64 28  *sqlite3WithAdd(
306c0 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b  Parse*,With*,Tok
306d0 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65  en*,ExprList*,Se
306e0 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  lect*);.  void s
306f0 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65  qlite3WithDelete
30700 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29  (sqlite3*,With*)
30710 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
30720 57 69 74 68 50 75 73 68 28 50 61 72 73 65 2a 2c  WithPush(Parse*,
30730 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c   With*, u8);.#el
30740 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  se.#define sqlit
30750 65 33 57 69 74 68 50 75 73 68 28 78 2c 79 2c 7a  e3WithPush(x,y,z
30760 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ).#define sqlite
30770 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c 79 29  3WithDelete(x,y)
30780 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
30790 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 50 53 45  SQLITE_OMIT_UPSE
307a0 52 54 0a 20 20 55 70 73 65 72 74 20 2a 73 71 6c  RT.  Upsert *sql
307b0 69 74 65 33 55 70 73 65 72 74 4e 65 77 28 73 71  ite3UpsertNew(sq
307c0 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a  lite3*,ExprList*
307d0 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
307e0 2c 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20  ,Expr*);.  void 
307f0 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 65 6c  sqlite3UpsertDel
30800 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 55 70 73  ete(sqlite3*,Ups
30810 65 72 74 2a 29 3b 0a 20 20 55 70 73 65 72 74 20  ert*);.  Upsert 
30820 2a 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 75  *sqlite3UpsertDu
30830 70 28 73 71 6c 69 74 65 33 2a 2c 55 70 73 65 72  p(sqlite3*,Upser
30840 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
30850 65 33 55 70 73 65 72 74 41 6e 61 6c 79 7a 65 54  e3UpsertAnalyzeT
30860 61 72 67 65 74 28 50 61 72 73 65 2a 2c 53 72 63  arget(Parse*,Src
30870 4c 69 73 74 2a 2c 55 70 73 65 72 74 2a 29 3b 0a  List*,Upsert*);.
30880 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70    void sqlite3Up
30890 73 65 72 74 44 6f 55 70 64 61 74 65 28 50 61 72  sertDoUpdate(Par
308a0 73 65 2a 2c 55 70 73 65 72 74 2a 2c 54 61 62 6c  se*,Upsert*,Tabl
308b0 65 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a  e*,Index*,int);.
308c0 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71  #else.#define sq
308d0 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77 28 76  lite3UpsertNew(v
308e0 2c 77 2c 78 2c 79 2c 7a 29 20 28 28 55 70 73 65  ,w,x,y,z) ((Upse
308f0 72 74 2a 29 30 29 0a 23 64 65 66 69 6e 65 20 73  rt*)0).#define s
30900 71 6c 69 74 65 33 55 70 73 65 72 74 44 65 6c 65  qlite3UpsertDele
30910 74 65 28 78 2c 79 29 0a 23 64 65 66 69 6e 65 20  te(x,y).#define 
30920 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 75 70  sqlite3UpsertDup
30930 28 78 2c 79 29 20 20 20 20 20 20 20 28 28 55 70  (x,y)       ((Up
30940 73 65 72 74 2a 29 30 29 0a 23 65 6e 64 69 66 0a  sert*)0).#endif.
30950 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e  ../* Declaration
30960 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  s for functions 
30970 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f  in fkey.c. All o
30980 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c  f these are repl
30990 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70  aced by.** no-op
309a0 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f   macros if OMIT_
309b0 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64  FOREIGN_KEY is d
309c0 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20  efined. In this 
309d0 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a  case no foreign.
309e0 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61  ** key functiona
309f0 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c  lity is availabl
30a00 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47  e. If OMIT_TRIGG
30a10 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75  ER is defined bu
30a20 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47  t.** OMIT_FOREIG
30a30 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e  N_KEY is not, on
30a40 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66  ly some of the f
30a50 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d  unctions are no-
30a60 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73  oped. In.** this
30a70 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65   case foreign ke
30a80 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62  ys are parsed, b
30a90 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63  ut no other func
30aa0 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a 2a 20  tionality is.** 
30ab0 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63  provided (enforc
30ac0 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73  ement of FK cons
30ad0 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73  traints requires
30ae0 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75   the triggers su
30af0 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69  b-system)..*/.#i
30b00 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
30b10 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
30b20 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EY) && !defined(
30b30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
30b40 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  GER).  void sqli
30b50 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65  te3FkCheck(Parse
30b60 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
30b70 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
30b80 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
30b90 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  kDropTable(Parse
30ba0 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61  *, SrcList *, Ta
30bb0 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ble*);.  void sq
30bc0 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50  lite3FkActions(P
30bd0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
30be0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
30bf0 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74  nt*, int);.  int
30c00 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72   sqlite3FkRequir
30c10 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ed(Parse*, Table
30c20 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  *, int*, int);. 
30c30 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c   u32 sqlite3FkOl
30c40 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61  dmask(Parse*, Ta
30c50 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73  ble*);.  FKey *s
30c60 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63  qlite3FkReferenc
30c70 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c  es(Table *);.#el
30c80 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
30c90 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c  ite3FkActions(a,
30ca0 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
30cb0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68  fine sqlite3FkCh
30cc0 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29  eck(a,b,c,d,e,f)
30cd0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
30ce0 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c  e3FkDropTable(a,
30cf0 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73  b,c).  #define s
30d00 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
30d10 61 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20  a,b)         0. 
30d20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
30d30 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63  FkRequired(a,b,c
30d40 2c 64 29 20 20 20 20 30 0a 20 20 23 64 65 66 69  ,d)    0.  #defi
30d50 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 66 65  ne sqlite3FkRefe
30d60 72 65 6e 63 65 73 28 61 29 20 20 20 20 20 20 20  rences(a)       
30d70 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
30d80 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
30d90 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64  REIGN_KEY.  void
30da0 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
30db0 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c  (sqlite3 *, Tabl
30dc0 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  e*);.  int sqlit
30dd0 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
30de0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b  Parse*,Table*,FK
30df0 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a  ey*,Index**,int*
30e00 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
30e10 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  ine sqlite3FkDel
30e20 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69  ete(a,b).  #defi
30e30 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  ne sqlite3FkLoca
30e40 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c  teIndex(a,b,c,d,
30e50 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  e).#endif.../*.*
30e60 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c  * Available faul
30e70 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68  t injectors.  Sh
30e80 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64  ould be numbered
30e90 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
30ea0 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  0..*/.#define SQ
30eb0 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
30ec0 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a  OR_MALLOC     0.
30ed0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
30ee0 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55  AULTINJECTOR_COU
30ef0 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  NT      1../*.**
30f00 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
30f10 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61  o the code in fa
30f20 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69  ult.c used for i
30f30 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69  dentifying "beni
30f40 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61  gn".** malloc fa
30f50 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20  ilures. This is 
30f60 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20  only present if 
30f70 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
30f80 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69  E.** is not defi
30f90 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ned..*/.#ifndef 
30fa0 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
30fb0 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
30fc0 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
30fd0 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20  c(void);.  void 
30fe0 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
30ff0 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65  Malloc(void);.#e
31000 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
31010 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
31020 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69  Malloc().  #defi
31030 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  ne sqlite3EndBen
31040 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64  ignMalloc().#end
31050 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  if../*.** Allowe
31060 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20  d return values 
31070 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64  from sqlite3Find
31080 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65  InIndex().*/.#de
31090 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f  fine IN_INDEX_RO
310a0 57 49 44 20 20 20 20 20 20 20 20 31 20 20 20 2f  WID        1   /
310b0 2a 20 53 65 61 72 63 68 20 74 68 65 20 72 6f 77  * Search the row
310c0 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  id of the table 
310d0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
310e0 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20  DEX_EPH         
310f0 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61   2   /* Search a
31100 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72  n ephemeral b-tr
31110 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  ee */.#define IN
31120 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43  _INDEX_INDEX_ASC
31130 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74      3   /* Exist
31140 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44  ing index ASCEND
31150 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ING */.#define I
31160 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45  N_INDEX_INDEX_DE
31170 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73  SC   4   /* Exis
31180 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45  ting index DESCE
31190 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
311a0 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20   IN_INDEX_NOOP  
311b0 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f         5   /* No
311c0 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65   table available
311d0 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e  . Use comparison
311e0 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  s */./*.** Allow
311f0 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65  ed flags for the
31200 20 33 72 64 20 70 61 72 61 6d 65 74 65 72 20 74   3rd parameter t
31210 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  o sqlite3FindInI
31220 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69  ndex()..*/.#defi
31230 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
31240 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20 20  _OK     0x0001  
31250 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20  /* OK to return 
31260 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f  IN_INDEX_NOOP */
31270 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
31280 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78  X_MEMBERSHIP  0x
31290 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72  0002  /* IN oper
312a0 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65  ator used for me
312b0 6d 62 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f  mbership test */
312c0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
312d0 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78  X_LOOP        0x
312e0 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72  0004  /* IN oper
312f0 61 74 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c  ator used as a l
31300 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  oop */.int sqlit
31310 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61  e3FindInIndex(Pa
31320 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  rse *, Expr *, u
31330 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 2c 20  32, int*, int*, 
31340 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c 69  int*);..int sqli
31350 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  te3JournalOpen(s
31360 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f  qlite3_vfs *, co
31370 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69  nst char *, sqli
31380 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c  te3_file *, int,
31390 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
313a0 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71  e3JournalSize(sq
313b0 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 23 69  lite3_vfs *);.#i
313c0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
313d0 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57  _ENABLE_ATOMIC_W
313e0 52 49 54 45 29 20 5c 0a 20 7c 7c 20 64 65 66 69  RITE) \. || defi
313f0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
31400 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57  E_BATCH_ATOMIC_W
31410 52 49 54 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  RITE).  int sqli
31420 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65  te3JournalCreate
31430 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
31440 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  ;.#endif..int sq
31450 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49 73 49 6e  lite3JournalIsIn
31460 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65 33 5f 66  Memory(sqlite3_f
31470 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71  ile *p);.void sq
31480 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f  lite3MemJournalO
31490 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  pen(sqlite3_file
314a0 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74   *);..void sqlit
314b0 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74 41  e3ExprSetHeightA
314c0 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70  ndFlags(Parse *p
314d0 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b  Parse, Expr *p);
314e0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
314f0 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
31500 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
31510 45 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63  ExprHeight(Selec
31520 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  t *);.  int sqli
31530 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67  te3ExprCheckHeig
31540 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ht(Parse*, int);
31550 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
31560 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
31570 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20  prHeight(x) 0.  
31580 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
31590 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78  xprCheckHeight(x
315a0 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20  ,y).#endif..u32 
315b0 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28  sqlite3Get4byte(
315c0 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64  const u8*);.void
315d0 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65   sqlite3Put4byte
315e0 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66  (u8*, u32);..#if
315f0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
31600 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a  E_UNLOCK_NOTIFY.
31610 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
31620 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
31630 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74  sqlite3 *, sqlit
31640 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  e3 *);.  void sq
31650 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
31660 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  nlocked(sqlite3 
31670 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  *db);.  void sql
31680 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
31690 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  osed(sqlite3 *db
316a0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
316b0 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
316c0 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29  tionBlocked(x,y)
316d0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
316e0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
316f0 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e  cked(x).  #defin
31700 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
31710 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e  ionClosed(x).#en
31720 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
31730 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20  TE_DEBUG.  void 
31740 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61  sqlite3ParserTra
31750 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a  ce(FILE*, char *
31760 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
31770 66 69 6e 65 64 28 59 59 43 4f 56 45 52 41 47 45  fined(YYCOVERAGE
31780 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50  ).  int sqlite3P
31790 61 72 73 65 72 43 6f 76 65 72 61 67 65 28 46 49  arserCoverage(FI
317a0 4c 45 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LE*);.#endif../*
317b0 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
317c0 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45  E_ENABLE IOTRACE
317d0 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65   exists then the
317e0 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
317f0 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61  .** sqlite3IoTra
31800 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ce is a pointer 
31810 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65  to a printf-like
31820 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f   routine used to
31830 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72  .** print I/O tr
31840 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 0a  acing messages..
31850 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
31860 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a  _ENABLE_IOTRACE.
31870 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45  # define IOTRACE
31880 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65 33  (A)  if( sqlite3
31890 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74  IoTrace ){ sqlit
318a0 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20  e3IoTrace A; }. 
318b0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62   void sqlite3Vdb
318c0 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65  eIOTraceSql(Vdbe
318d0 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20 53  *);.SQLITE_API S
318e0 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69  QLITE_EXTERN voi
318f0 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c 20  d (SQLITE_CDECL 
31900 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29  *sqlite3IoTrace)
31910 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  (const char*,...
31920 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
31930 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64  e IOTRACE(A).# d
31940 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62  efine sqlite3Vdb
31950 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23  eIOTraceSql(X).#
31960 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
31970 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20  se routines are 
31980 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68  available for th
31990 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69  e mem2.c debuggi
319a0 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ng memory alloca
319b0 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68  tor.** only.  Th
319c0 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20 76  ey are used to v
319d0 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66 65  erify that diffe
319e0 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20  rent "types" of 
319f0 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61  memory.** alloca
31a00 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72  tions are proper
31a10 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74 68  ly tracked by th
31a20 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20  e system..**.** 
31a30 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
31a40 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74 68  etType() sets th
31a50 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61  e "type" of an a
31a60 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65  llocation to one
31a70 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59   of.** the MEMTY
31a80 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  PE_* macros defi
31a90 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20  ned below.  The 
31aa0 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20 62  type must be a b
31ab0 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61  itmask with.** a
31ac0 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e   single bit set.
31ad0 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
31ae0 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
31af0 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  returns true if 
31b00 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73 20  any of the bits 
31b10 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
31b20 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
31b30 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
31b40 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
31b50 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
31b60 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65  ype()..** sqlite
31b70 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
31b80 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  () is intended f
31b90 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61 73  or use inside as
31ba0 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
31bb0 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  s..**.** sqlite3
31bc0 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29  MemdebugNoType()
31bd0 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
31be0 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74   none of the bit
31bf0 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
31c00 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
31c10 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
31c20 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
31c30 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
31c40 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50  tType()..**.** P
31c50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20  erhaps the most 
31c60 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20  important point 
31c70 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e 63  is the differenc
31c80 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50  e between MEMTYP
31c90 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45  E_HEAP.** and ME
31ca0 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e  MTYPE_LOOKASIDE.
31cb0 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69    If an allocati
31cc0 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f  on is MEMTYPE_LO
31cd0 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65  OKASIDE, that me
31ce0 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20  ans.** it might 
31cf0 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61  have been alloca
31d00 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ted by lookaside
31d10 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c  , except the all
31d20 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74  ocation was.** t
31d30 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b  oo large or look
31d40 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61 64  aside was alread
31d50 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69  y full.  It is i
31d60 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69  mportant to veri
31d70 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63  fy.** that alloc
31d80 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ations that migh
31d90 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74 69  t have been sati
31da0 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  sfied by lookasi
31db0 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61  de are not.** pa
31dc0 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e  ssed back to non
31dd0 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
31de0 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73  ) routines.  Ass
31df0 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68 65  erts such as the
31e00 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76  .** example abov
31e10 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20  e are placed on 
31e20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64  the non-lookasid
31e30 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
31e40 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  s to verify.** t
31e50 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a  his constraint..
31e60 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69  **.** All of thi
31e70 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61  s is no-op for a
31e80 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c   production buil
31e90 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65  d.  It only come
31ea0 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77  s into.** play w
31eb0 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  hen the SQLITE_M
31ec0 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d  EMDEBUG compile-
31ed0 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75  time option is u
31ee0 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  sed..*/.#ifdef S
31ef0 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20  QLITE_MEMDEBUG. 
31f00 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d   void sqlite3Mem
31f10 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f 69  debugSetType(voi
31f20 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71  d*,u8);.  int sq
31f30 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
31f40 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
31f50 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d    int sqlite3Mem
31f60 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64  debugNoType(void
31f70 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64  *,u8);.#else.# d
31f80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
31f90 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c 59  debugSetType(X,Y
31fa0 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23  )  /* no-op */.#
31fb0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
31fc0 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 58  emdebugHasType(X
31fd0 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20  ,Y)  1.# define 
31fe0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
31ff0 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23  oType(X,Y)   1.#
32000 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45  endif.#define ME
32010 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20 20  MTYPE_HEAP      
32020 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61   0x01  /* Genera
32030 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f  l heap allocatio
32040 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
32050 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20  MTYPE_LOOKASIDE 
32060 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20 74   0x02  /* Heap t
32070 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62  hat might have b
32080 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f  een lookaside */
32090 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
320a0 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30 34  _PCACHE     0x04
320b0 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
320c0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a  allocations */..
320d0 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67 20  /*.** Threading 
320e0 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66  interface.*/.#if
320f0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
32100 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e 74  ER_THREADS>0.int
32110 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 43 72   sqlite3ThreadCr
32120 65 61 74 65 28 53 51 4c 69 74 65 54 68 72 65 61  eate(SQLiteThrea
32130 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69  d**,void*(*)(voi
32140 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  d*),void*);.int 
32150 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a 6f 69  sqlite3ThreadJoi
32160 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2c  n(SQLiteThread*,
32170 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66   void**);.#endif
32180 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
32190 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 50 41  LITE_ENABLE_DBPA
321a0 47 45 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69  GE_VTAB) || defi
321b0 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
321c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 70 61  .int sqlite3Dbpa
321d0 67 65 52 65 67 69 73 74 65 72 28 73 71 6c 69 74  geRegister(sqlit
321e0 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  e3*);.#endif.#if
321f0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
32200 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f 56 54  ENABLE_DBSTAT_VT
32210 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  AB) || defined(S
32220 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20  QLITE_TEST).int 
32230 73 71 6c 69 74 65 33 44 62 73 74 61 74 52 65 67  sqlite3DbstatReg
32240 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b  ister(sqlite3*);
32250 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c  .#endif..int sql
32260 69 74 65 33 45 78 70 72 56 65 63 74 6f 72 53 69  ite3ExprVectorSi
32270 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  ze(Expr *pExpr);
32280 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
32290 49 73 56 65 63 74 6f 72 28 45 78 70 72 20 2a 70  IsVector(Expr *p
322a0 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c  Expr);.Expr *sql
322b0 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c 64 53  ite3VectorFieldS
322c0 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20 69 6e  ubexpr(Expr*, in
322d0 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
322e0 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72 46 69  3ExprForVectorFi
322f0 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  eld(Parse*,Expr*
32300 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
32310 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72 4d 73  te3VectorErrorMs
32320 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  g(Parse*, Expr*)
32330 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
32340 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
32350 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e 73 74  TION_DIAGS.const
32360 20 63 68 61 72 20 2a 2a 73 71 6c 69 74 65 33 43   char **sqlite3C
32370 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 28 69 6e  ompileOptions(in
32380 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e 64 69  t *pnOpt);.#endi
32390 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  f..#endif /* SQL
323a0 49 54 45 49 4e 54 5f 48 20 2a 2f 0a              ITEINT_H */.