/ Hex Artifact Content
Login

Artifact fdb9fbcdbc227b3caea58a5c01bc7935b1c56b8534da672db2d5d86ec703a1f7:


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 4f 6e 6c 79 20 6f 6e  f../*.** Only on
7a70: 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  e of SQLITE_ENAB
7a80: 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49  LE_STAT3 or SQLI
7a90: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20  TE_ENABLE_STAT4 
7aa0: 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a  can be defined..
7ab0: 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67  ** Priority is g
7ac0: 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45  iven to SQLITE_E
7ad0: 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66  NABLE_STAT4.  If
7ae0: 20 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69   either are defi
7af0: 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66  ned, also.** def
7b00: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
7b10: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
7b20: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
7b30: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23  E_ENABLE_STAT4.#
7b40: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
7b50: 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66  ABLE_STAT3.# def
7b60: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
7b70: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
7b80: 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f   1.#elif SQLITE_
7b90: 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64  ENABLE_STAT3.# d
7ba0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
7bb0: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
7bc0: 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54  T4 1.#elif SQLIT
7bd0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7be0: 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20  R_STAT4.# undef 
7bf0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7c00: 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e  AT3_OR_STAT4.#en
7c10: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43  dif../*.** SELEC
7c20: 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77  TTRACE_ENABLED w
7c30: 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20  ill be either 1 
7c40: 6f 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f  or 0 depending o
7c50: 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  n whether or not
7c60: 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71  .** the Select q
7c70: 75 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74  uery generator t
7c80: 72 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20  racing logic is 
7c90: 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69  turned on..*/.#i
7ca0: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
7cb0: 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52  _ENABLE_SELECTTR
7cc0: 41 43 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45  ACE).# define SE
7cd0: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
7ce0: 44 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  D 1.#else.# defi
7cf0: 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45  ne SELECTTRACE_E
7d00: 4e 41 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a  NABLED 0.#endif.
7d10: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
7d20: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
7d30: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
7d40: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
7d50: 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a  he busy-handler.
7d60: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  ** callback for 
7d70: 61 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68  a given sqlite h
7d80: 61 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  andle..**.** The
7d90: 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64   sqlite.busyHand
7da0: 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  ler member of th
7db0: 65 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20  e sqlite struct 
7dc0: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73  contains the bus
7dd0: 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f  y.** callback fo
7de0: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  r the database h
7df0: 61 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65  andle. Each page
7e00: 72 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65  r opened via the
7e10: 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c   sqlite.** handl
7e20: 65 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f  e is passed a po
7e30: 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e  inter to sqlite.
7e40: 62 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65  busyHandler. The
7e50: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
7e60: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72   callback is cur
7e70: 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f  rently invoked o
7e80: 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  nly from within 
7e90: 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65  pager.c..*/.type
7ea0: 64 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48  def struct BusyH
7eb0: 61 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c  andler BusyHandl
7ec0: 65 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48  er;.struct BusyH
7ed0: 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28  andler {.  int (
7ee0: 2a 78 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76  *xBusyHandler)(v
7ef0: 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20  oid *,int);  /* 
7f00: 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63  The busy callbac
7f10: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75  k */.  void *pBu
7f20: 73 79 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  syArg;          
7f30: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
7f40: 74 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61  t arg to busy ca
7f50: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20  llback */.  int 
7f60: 6e 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20  nBusy;          
7f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7f80: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
7f90: 68 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c  h each busy call
7fa0: 20 2a 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46   */.  u8 bExtraF
7fb0: 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  ileArg;         
7fc0: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75          /* Inclu
7fd0: 64 65 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  de sqlite3_file 
7fe0: 61 73 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20  as callback arg 
7ff0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d  */.};../*.** Nam
8000: 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20  e of the master 
8010: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20  database table. 
8020: 20 54 68 65 20 6d 61 73 74 65 72 20 64 61 74 61   The master data
8030: 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73  base table.** is
8040: 20 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65   a special table
8050: 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20   that holds the 
8060: 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62  names and attrib
8070: 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75  utes of all.** u
8080: 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69  ser tables and i
8090: 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  ndices..*/.#defi
80a0: 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20  ne MASTER_NAME  
80b0: 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73       "sqlite_mas
80c0: 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d  ter".#define TEM
80d0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22  P_MASTER_NAME  "
80e0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
80f0: 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72  er"../*.** The r
8100: 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20  oot-page of the 
8110: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
8120: 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  table..*/.#defin
8130: 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20  e MASTER_ROOT   
8140: 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65      1../*.** The
8150: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68   name of the sch
8160: 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64  ema table..*/.#d
8170: 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42  efine SCHEMA_TAB
8180: 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54  LE(x)  ((!OMIT_T
8190: 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54  EMPDB)&&(x==1)?T
81a0: 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a  EMP_MASTER_NAME:
81b0: 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a  MASTER_NAME)../*
81c0: 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63  .** A convenienc
81d0: 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74  e macro that ret
81e0: 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
81f0: 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a  of elements in.*
8200: 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23  * an array..*/.#
8210: 64 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65  define ArraySize
8220: 28 58 29 20 20 20 20 28 28 69 6e 74 29 28 73 69  (X)    ((int)(si
8230: 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58  zeof(X)/sizeof(X
8240: 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65  [0])))../*.** De
8250: 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61  termine if the a
8260: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77  rgument is a pow
8270: 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65  er of two.*/.#de
8280: 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77  fine IsPowerOfTw
8290: 6f 28 58 29 20 28 28 28 58 29 26 28 28 58 29 2d  o(X) (((X)&((X)-
82a0: 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  1))==0)../*.** T
82b0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c  he following val
82c0: 75 65 20 61 73 20 61 20 64 65 73 74 72 75 63 74  ue as a destruct
82d0: 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20  or means to use 
82e0: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e  sqlite3DbFree().
82f0: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44  .** The sqlite3D
8300: 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20  bFree() routine 
8310: 72 65 71 75 69 72 65 73 20 74 77 6f 20 70 61 72  requires two par
8320: 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64 20  ameters instead 
8330: 6f 66 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61  of the.** one pa
8340: 72 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73  rameter that des
8350: 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c  tructors normall
8360: 79 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68  y want.  So we h
8370: 61 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65  ave to introduce
8380: 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76  .** this magic v
8390: 61 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f  alue that the co
83a0: 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64  de knows to hand
83b0: 6c 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20  le differently. 
83c0: 20 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20   Any.** pointer 
83d0: 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61  will work here a
83e0: 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20  s long as it is 
83f0: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51  distinct from SQ
8400: 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61  LITE_STATIC.** a
8410: 6e 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  nd SQLITE_TRANSI
8420: 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ENT..*/.#define 
8430: 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20  SQLITE_DYNAMIC  
8440: 20 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72   ((sqlite3_destr
8450: 75 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74  uctor_type)sqlit
8460: 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f  e3MallocSize)../
8470: 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45  *.** When SQLITE
8480: 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66  _OMIT_WSD is def
8490: 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74  ined, it means t
84a0: 68 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70  hat the target p
84b0: 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20  latform does.** 
84c0: 6e 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74  not support Writ
84d0: 61 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61  able Static Data
84e0: 20 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67   (WSD) such as g
84f0: 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63  lobal and static
8500: 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41   variables..** A
8510: 6c 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73  ll variables mus
8520: 74 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74  t either be on t
8530: 68 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61  he stack or dyna
8540: 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
8550: 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65  d from.** the he
8560: 61 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73  ap.  When WSD is
8570: 20 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68   unsupported, th
8580: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
8590: 72 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65  rations scattere
85a0: 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20  d.** throughout 
85b0: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20  the SQLite code 
85c0: 6d 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73  must become cons
85d0: 74 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20  tants instead.  
85e0: 54 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a  The SQLITE_WSD.*
85f0: 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  * macro is used 
8600: 66 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65  for this purpose
8610: 2e 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f  .  And instead o
8620: 66 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68  f referencing th
8630: 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69  e variable.** di
8640: 72 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69  rectly, we use i
8650: 74 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61  ts constant as a
8660: 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74   key to lookup t
8670: 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f  he run-time allo
8680: 63 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20  cated.** buffer 
8690: 74 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20  that holds real 
86a0: 76 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63  variable.  The c
86b0: 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20  onstant is also 
86c0: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a  the initializer.
86d0: 2a 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74  ** for the run-t
86e0: 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75  ime allocated bu
86f0: 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  ffer..**.** In t
8700: 68 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68  he usual case wh
8710: 65 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f  ere WSD is suppo
8720: 72 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45  rted, the SQLITE
8730: 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a  _WSD and GLOBAL.
8740: 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65  ** macros become
8750: 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65   no-ops and have
8760: 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63   zero performanc
8770: 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66  e impact..*/.#if
8780: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
8790: 57 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51  WSD.  #define SQ
87a0: 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20  LITE_WSD const. 
87b0: 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28   #define GLOBAL(
87c0: 74 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74  t,v) (*(t*)sqlit
87d0: 65 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69  e3_wsd_find((voi
87e0: 64 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28  d*)&(v), sizeof(
87f0: 76 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73  v))).  #define s
8800: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
8810: 69 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74  ig GLOBAL(struct
8820: 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20   Sqlite3Config, 
8830: 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20  sqlite3Config). 
8840: 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64   int sqlite3_wsd
8850: 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74  _init(int N, int
8860: 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c   J);.  void *sql
8870: 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f  ite3_wsd_find(vo
8880: 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23  id *K, int L);.#
8890: 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53  else.  #define S
88a0: 51 4c 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66  QLITE_WSD.  #def
88b0: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
88c0: 76 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  v.  #define sqli
88d0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20  te3GlobalConfig 
88e0: 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65  sqlite3Config.#e
88f0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
8900: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
8910: 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70   are used to sup
8920: 70 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77  press compiler w
8930: 61 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a  arnings and to.*
8940: 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20  * make it clear 
8950: 74 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73  to human readers
8960: 20 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e   when a function
8970: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65   parameter is de
8980: 6c 69 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65  liberately.** le
8990: 66 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e  ft unused within
89a0: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
89b0: 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73  unction. This us
89c0: 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68  ually happens wh
89d0: 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e  en.** a function
89e0: 20 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61   is called via a
89f0: 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
8a00: 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74  r. For example t
8a10: 68 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61  he.** implementa
8a20: 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61  tion of an SQL a
8a30: 67 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61  ggregate step ca
8a40: 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75  llback may not u
8a50: 73 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65  se the.** parame
8a60: 74 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74  ter indicating t
8a70: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
8a80: 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f  uments passed to
8a90: 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a   the aggregate,.
8aa0: 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74  ** if it knows t
8ab0: 68 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f  hat this is enfo
8ac0: 72 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a  rced elsewhere..
8ad0: 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e  **.** When a fun
8ae0: 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20  ction parameter 
8af0: 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61  is not used at a
8b00: 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f  ll within the bo
8b10: 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  dy of a function
8b20: 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72  ,.** it is gener
8b30: 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55  ally named "NotU
8b40: 73 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64  sed" or "NotUsed
8b50: 32 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67  2" to make thing
8b60: 73 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a  s even clearer..
8b70: 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73  ** However, thes
8b80: 65 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73  e macros may als
8b90: 6f 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70  o be used to sup
8ba0: 70 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72  press warnings r
8bb0: 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72  elated to.** par
8bc0: 61 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79  ameters that may
8bd0: 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75   or may not be u
8be0: 73 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  sed depending on
8bf0: 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74   compilation opt
8c00: 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61  ions..** For exa
8c10: 6d 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d  mple those param
8c20: 65 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20  eters only used 
8c30: 69 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74  in assert() stat
8c40: 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65  ements. In these
8c50: 0a 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61  .** cases the pa
8c60: 72 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d  rameters are nam
8c70: 65 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73  ed as per the us
8c80: 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e  ual conventions.
8c90: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53  .*/.#define UNUS
8ca0: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20  ED_PARAMETER(x) 
8cb0: 28 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e  (void)(x).#defin
8cc0: 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54  e UNUSED_PARAMET
8cd0: 45 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f  ER2(x,y) UNUSED_
8ce0: 50 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55  PARAMETER(x),UNU
8cf0: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29  SED_PARAMETER(y)
8d00: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20  ../*.** Forward 
8d10: 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74  references to st
8d20: 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65  ructures.*/.type
8d30: 64 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e  def struct AggIn
8d40: 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65  fo AggInfo;.type
8d50: 64 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43  def struct AuthC
8d60: 6f 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65  ontext AuthConte
8d70: 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  xt;.typedef stru
8d80: 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41  ct AutoincInfo A
8d90: 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65  utoincInfo;.type
8da0: 64 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65  def struct Bitve
8db0: 63 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65  c Bitvec;.typede
8dc0: 66 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71  f struct CollSeq
8dd0: 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65   CollSeq;.typede
8de0: 66 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20  f struct Column 
8df0: 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20  Column;.typedef 
8e00: 73 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79  struct Db Db;.ty
8e10: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68  pedef struct Sch
8e20: 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65  ema Schema;.type
8e30: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20  def struct Expr 
8e40: 45 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74  Expr;.typedef st
8e50: 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78  ruct ExprList Ex
8e60: 70 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  prList;.typedef 
8e70: 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79  struct FKey FKey
8e80: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8e90: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
8ea0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a  FuncDestructor;.
8eb0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
8ec0: 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a  uncDef FuncDef;.
8ed0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
8ee0: 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44  uncDefHash FuncD
8ef0: 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20  efHash;.typedef 
8f00: 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64  struct IdList Id
8f10: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
8f20: 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78  ruct Index Index
8f30: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8f40: 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64   IndexSample Ind
8f50: 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65  exSample;.typede
8f60: 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73  f struct KeyClas
8f70: 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65  s KeyClass;.type
8f80: 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e  def struct KeyIn
8f90: 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65  fo KeyInfo;.type
8fa0: 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61  def struct Looka
8fb0: 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a  side Lookaside;.
8fc0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
8fd0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f  ookasideSlot Loo
8fe0: 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65  kasideSlot;.type
8ff0: 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c  def struct Modul
9000: 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65  e Module;.typede
9010: 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  f struct NameCon
9020: 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  text NameContext
9030: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
9040: 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79   Parse Parse;.ty
9050: 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72 65  pedef struct Pre
9060: 55 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65  Update PreUpdate
9070: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
9080: 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
9090: 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
90a0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
90b0: 20 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e   RenameToken Ren
90c0: 61 6d 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65  ameToken;.typede
90d0: 66 20 73 74 72 75 63 74 20 52 6f 77 53 65 74 20  f struct RowSet 
90e0: 52 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20  RowSet;.typedef 
90f0: 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74  struct Savepoint
9100: 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65   Savepoint;.type
9110: 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63  def struct Selec
9120: 74 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65  t Select;.typede
9130: 66 20 73 74 72 75 63 74 20 53 51 4c 69 74 65 54  f struct SQLiteT
9140: 68 72 65 61 64 20 53 51 4c 69 74 65 54 68 72 65  hread SQLiteThre
9150: 61 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ad;.typedef stru
9160: 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65  ct SelectDest Se
9170: 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65  lectDest;.typede
9180: 66 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  f struct SrcList
9190: 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65   SrcList;.typede
91a0: 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  f struct sqlite3
91b0: 5f 73 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f  _str StrAccum; /
91c0: 2a 20 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73  * Internal alias
91d0: 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72   for sqlite3_str
91e0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75   */.typedef stru
91f0: 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a  ct Table Table;.
9200: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
9210: 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f  ableLock TableLo
9220: 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ck;.typedef stru
9230: 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a  ct Token Token;.
9240: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
9250: 72 65 65 56 69 65 77 20 54 72 65 65 56 69 65 77  reeView TreeView
9260: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
9270: 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72   Trigger Trigger
9280: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
9290: 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67   TriggerPrg Trig
92a0: 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20  gerPrg;.typedef 
92b0: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
92c0: 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a  ep TriggerStep;.
92d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55  typedef struct U
92e0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e  npackedRecord Un
92f0: 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79  packedRecord;.ty
9300: 70 65 64 65 66 20 73 74 72 75 63 74 20 55 70 73  pedef struct Ups
9310: 65 72 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65  ert Upsert;.type
9320: 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c  def struct VTabl
9330: 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65  e VTable;.typede
9340: 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78  f struct VtabCtx
9350: 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65   VtabCtx;.typede
9360: 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20  f struct Walker 
9370: 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20  Walker;.typedef 
9380: 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f  struct WhereInfo
9390: 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65   WhereInfo;.type
93a0: 64 65 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f  def struct Windo
93b0: 77 20 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65  w Window;.typede
93c0: 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69  f struct With Wi
93d0: 74 68 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  th;.../*.** The 
93e0: 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65  bitmask datatype
93f0: 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69   defined below i
9400: 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f  s used for vario
9410: 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
9420: 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67  ..**.** Changing
9430: 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d   this from a 64-
9440: 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20  bit to a 32-bit 
9450: 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20  type limits the 
9460: 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62  number of.** tab
9470: 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f  les in a join to
9480: 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36   32 instead of 6
9490: 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20  4.  But it also 
94a0: 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65  reduces the size
94b0: 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61  .** of the libra
94c0: 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20  ry by 738 bytes 
94d0: 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64  on ix86..*/.#ifd
94e0: 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53  ef SQLITE_BITMAS
94f0: 4b 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65 66  K_TYPE.  typedef
9500: 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f   SQLITE_BITMASK_
9510: 54 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65  TYPE Bitmask;.#e
9520: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36  lse.  typedef u6
9530: 34 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69  4 Bitmask;.#endi
9540: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d  f../*.** The num
9550: 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61  ber of bits in a
9560: 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22   Bitmask.  "BMS"
9570: 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20   means "BitMask 
9580: 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Size"..*/.#defin
9590: 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69  e BMS  ((int)(si
95a0: 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29  zeof(Bitmask)*8)
95b0: 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69  )../*.** A bit i
95c0: 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23  n a Bitmask.*/.#
95d0: 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e  define MASKBIT(n
95e0: 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31  )   (((Bitmask)1
95f0: 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20  )<<(n)).#define 
9600: 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28  MASKBIT32(n) (((
9610: 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c  unsigned int)1)<
9620: 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c  <(n)).#define AL
9630: 4c 42 49 54 53 20 20 20 20 20 20 28 28 42 69 74  LBITS      ((Bit
9640: 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56  mask)-1)../* A V
9650: 4c 69 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f  List object reco
9660: 72 64 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65  rds a mapping be
9670: 74 77 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73  tween parameters
9680: 2f 76 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63  /variables/wildc
9690: 61 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53  ards.** in the S
96a0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75  QL statement (su
96b0: 63 68 20 61 73 20 24 61 62 63 2c 20 40 70 71 72  ch as $abc, @pqr
96c0: 2c 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74  , or :xyz) and t
96d0: 68 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61  he integer.** va
96e0: 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73  riable number as
96f0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
9700: 61 74 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53  at parameter.  S
9710: 65 65 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65  ee the format de
9720: 73 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20  scription.** on 
9730: 74 68 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74  the sqlite3VList
9740: 41 64 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f  Add() routine fo
9750: 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69  r more informati
9760: 6f 6e 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20  on.  A VList is 
9770: 72 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61  really.** just a
9780: 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67  n array of integ
9790: 65 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ers..*/.typedef 
97a0: 69 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a  int VList;../*.*
97b0: 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67  * Defer sourcing
97c0: 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65   vdbe.h and btre
97d0: 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20  e.h until after 
97e0: 74 68 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20  the "u8" and.** 
97f0: 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79  "BusyHandler" ty
9800: 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61  pedefs. vdbe.h a
9810: 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66  lso requires a f
9820: 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65  ew of the opaque
9830: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65  .** pointer type
9840: 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29  s (i.e. FuncDef)
9850: 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a   defined above..
9860: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72  */.#include "btr
9870: 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  ee.h".#include "
9880: 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  vdbe.h".#include
9890: 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c   "pager.h".#incl
98a0: 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23  ude "pcache.h".#
98b0: 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23  include "os.h".#
98c0: 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68  include "mutex.h
98d0: 22 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45  "../* The SQLITE
98e0: 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63  _EXTRA_DURABLE c
98f0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
9900: 6f 6e 20 75 73 65 64 20 74 6f 20 73 65 74 20 74  on used to set t
9910: 68 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79  he default.** sy
9920: 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e  nchronous settin
9930: 67 20 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20  g to EXTRA.  It 
9940: 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70  is no longer sup
9950: 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  ported..*/.#ifde
9960: 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  f SQLITE_EXTRA_D
9970: 55 52 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67  URABLE.# warning
9980: 20 55 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41   Use SQLITE_DEFA
9990: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d  ULT_SYNCHRONOUS=
99a0: 33 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c  3 instead of SQL
99b0: 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c  ITE_EXTRA_DURABL
99c0: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
99d0: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
99e0: 4f 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a  ONOUS 3.#endif..
99f0: 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79  /*.** Default sy
9a00: 6e 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73  nchronous levels
9a10: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  ..**.** Note tha
9a20: 74 20 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c  t (for historcal
9a30: 20 72 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41   reasons) the PA
9a40: 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f  GER_SYNCHRONOUS_
9a50: 2a 20 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a  * macros differ.
9a60: 2a 2a 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49  ** from the SQLI
9a70: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9a80: 52 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20  RONOUS value by 
9a90: 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20  1..**.**        
9aa0: 20 20 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f     PAGER_SYNCHRO
9ab0: 4e 4f 55 53 20 20 20 20 20 20 20 44 45 46 41 55  NOUS       DEFAU
9ac0: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a  LT_SYNCHRONOUS.*
9ad0: 2a 20 20 20 4f 46 46 20 20 20 20 20 20 20 20 20  *   OFF         
9ae0: 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20    1             
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a              0.**
9b00: 20 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20     NORMAL       
9b10: 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20   2              
9b20: 20 20 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20             1.** 
9b30: 20 20 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20    FULL          
9b40: 33 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  3               
9b50: 20 20 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20            2.**  
9b60: 20 45 58 54 52 41 20 20 20 20 20 20 20 20 20 34   EXTRA         4
9b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b80: 20 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a           3.**.**
9b90: 20 54 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e   The "PRAGMA syn
9ba0: 63 68 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d  chronous" statem
9bb0: 65 6e 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68  ent also uses th
9bc0: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d  e zero-based num
9bd0: 62 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  bers..** In othe
9be0: 72 20 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72  r words, the zer
9bf0: 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20  o-based numbers 
9c00: 61 72 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c  are used for all
9c10: 20 65 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66   external interf
9c20: 61 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20  aces.** and the 
9c30: 6f 6e 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73  one-based values
9c40: 20 61 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e   are used intern
9c50: 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ally..*/.#ifndef
9c60: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9c70: 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65  SYNCHRONOUS.# de
9c80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
9c90: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  ULT_SYNCHRONOUS 
9ca0: 32 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  2.#endif.#ifndef
9cb0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9cc0: 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a  WAL_SYNCHRONOUS.
9cd0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
9ce0: 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43  DEFAULT_WAL_SYNC
9cf0: 48 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44  HRONOUS SQLITE_D
9d00: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
9d10: 55 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  US.#endif../*.**
9d20: 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20 66   Each database f
9d30: 69 6c 65 20 74 6f 20 62 65 20 61 63 63 65 73 73  ile to be access
9d40: 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d  ed by the system
9d50: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   is an instance.
9d60: 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ** of the follow
9d70: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 20 20  ing structure.  
9d80: 54 68 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c  There are normal
9d90: 6c 79 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20  ly two of these 
9da0: 73 74 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e  structures.** in
9db0: 20 74 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b   the sqlite.aDb[
9dc0: 5d 20 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d  ] array.  aDb[0]
9dd0: 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
9de0: 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a  abase file and.*
9df0: 2a 20 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20  * aDb[1] is the 
9e00: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
9e10: 65 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f  ed to hold tempo
9e20: 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64  rary tables.  Ad
9e30: 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61  ditional.** data
9e40: 62 61 73 65 73 20 6d 61 79 20 62 65 20 61 74 74  bases may be att
9e50: 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  ached..*/.struct
9e60: 20 44 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44   Db {.  char *zD
9e70: 62 53 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  bSName;      /* 
9e80: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74  Name of this dat
9e90: 61 62 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e  abase. (schema n
9ea0: 61 6d 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d  ame, not filenam
9eb0: 65 29 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  e) */.  Btree *p
9ec0: 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  Bt;          /* 
9ed0: 54 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63  The B*Tree struc
9ee0: 74 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61  ture for this da
9ef0: 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20  tabase file */. 
9f00: 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c   u8 safety_level
9f10: 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67  ;     /* How agg
9f20: 72 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69  ressive at synci
9f30: 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20  ng data to disk 
9f40: 2a 2f 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74  */.  u8 bSyncSet
9f50: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ;         /* Tru
9f60: 65 20 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e  e if "PRAGMA syn
9f70: 63 68 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20  chronous=N" has 
9f80: 62 65 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63  been run */.  Sc
9f90: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
9fa0: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
9fb0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
9fc0: 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65   (possibly share
9fd0: 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  d) */.};../*.** 
9fe0: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
9ff0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
a000: 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20  ucture stores a 
a010: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
a020: 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65  .**.** Most Sche
a030: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
a040: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
a050: 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63   Btree.  The exc
a060: 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65  eption is.** the
a070: 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20   Schema for the 
a080: 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73  TEMP databaes (s
a090: 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77  qlite3.aDb[1]) w
a0a0: 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61  hich is free-sta
a0b0: 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61  nding..** In sha
a0c0: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20  red cache mode, 
a0d0: 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20  a single Schema 
a0e0: 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68  object can be sh
a0f0: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
a100: 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20  .** Btrees that 
a110: 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d  refer to the sam
a120: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53  e underlying BtS
a130: 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a  hared object..**
a140: 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  .** Schema objec
a150: 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  ts are automatic
a160: 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64  ally deallocated
a170: 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42   when the last B
a180: 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66  tree that.** ref
a190: 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20  erences them is 
a1a0: 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65  destroyed.   The
a1b0: 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20   TEMP Schema is 
a1c0: 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62  manually freed b
a1d0: 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f  y.** sqlite3_clo
a1e0: 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72  se()..*.** A thr
a1f0: 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64  ead must be hold
a200: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
a210: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
a220: 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a   Btree in order.
a230: 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68  ** to access Sch
a240: 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68  ema content.  Th
a250: 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20  is implies that 
a260: 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20  the thread must 
a270: 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69  also be.** holdi
a280: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
a290: 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63  e sqlite3 connec
a2a0: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61  tion pointer tha
a2b0: 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65  t owns the Btree
a2c0: 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20  ..** For a TEMP 
a2d0: 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65  Schema, only the
a2e0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65   connection mute
a2f0: 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  x is required..*
a300: 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20  /.struct Schema 
a310: 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63  {.  int schema_c
a320: 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61  ookie;   /* Data
a330: 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73  base schema vers
a340: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  ion number for t
a350: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e  his file */.  in
a360: 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20  t iGeneration;  
a370: 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e     /* Generation
a380: 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65   counter.  Incre
a390: 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68  mented with each
a3a0: 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73   change */.  Has
a3b0: 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20  h tblHash;      
a3c0: 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20    /* All tables 
a3d0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
a3e0: 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73  */.  Hash idxHas
a3f0: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
a400: 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73   (named) indices
a410: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
a420: 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48   */.  Hash trigH
a430: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
a440: 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78  l triggers index
a450: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
a460: 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20  Hash fkeyHash;  
a470: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65       /* All fore
a480: 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65  ign keys by refe
a490: 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d  renced table nam
a4a0: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53  e */.  Table *pS
a4b0: 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54  eqTab;      /* T
a4c0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
a4d0: 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79  ce table used by
a4e0: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
a4f0: 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d  /.  u8 file_form
a500: 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65  at;      /* Sche
a510: 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  ma format versio
a520: 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  n for this file 
a530: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
a540: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
a550: 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20  t encoding used 
a560: 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65  by this database
a570: 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61   */.  u16 schema
a580: 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c  Flags;     /* Fl
a590: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
a5a0: 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20  ith this schema 
a5b0: 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73  */.  int cache_s
a5c0: 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ize;      /* Num
a5d0: 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20  ber of pages to 
a5e0: 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65  use in the cache
a5f0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
a600: 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
a610: 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
a620: 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
a630: 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e  ts in the.** Db.
a640: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
a650: 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
a660: 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44   DbHasProperty(D
a670: 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d  ,I,P)     (((D)-
a680: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
a690: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29  >schemaFlags&(P)
a6a0: 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
a6b0: 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79  DbHasAnyProperty
a6c0: 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e  (D,I,P)  (((D)->
a6d0: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a6e0: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
a6f0: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53  !=0).#define DbS
a700: 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  etProperty(D,I,P
a710: 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49  )     (D)->aDb[I
a720: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
a730: 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  aFlags|=(P).#def
a740: 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65  ine DbClearPrope
a750: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29  rty(D,I,P)   (D)
a760: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
a770: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e  ->schemaFlags&=~
a780: 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  (P)../*.** Allow
a790: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
a7a0: 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  e DB.pSchema->fl
a7b0: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
a7c0: 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f   The DB_SchemaLo
a7d0: 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  aded flag is set
a7e0: 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62   after the datab
a7f0: 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  ase schema has b
a800: 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f  een.** read into
a810: 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74   internal hash t
a820: 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f  ables..**.** DB_
a830: 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61  UnresetViews mea
a840: 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d  ns that one or m
a850: 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63  ore views have c
a860: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
a870: 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69  .** have been fi
a880: 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68  lled out.  If th
a890: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
a8a0: 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e  , these column n
a8b0: 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68  ames might.** ch
a8c0: 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65  anges and so the
a8d0: 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20   view will need 
a8e0: 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a  to be reset..*/.
a8f0: 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d  #define DB_Schem
a900: 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30  aLoaded    0x000
a910: 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61  1  /* The schema
a920: 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64   has been loaded
a930: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55   */.#define DB_U
a940: 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30  nresetViews    0
a950: 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76  x0002  /* Some v
a960: 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65  iews have define
a970: 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a  d column names *
a980: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70  /.#define DB_Emp
a990: 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30  ty           0x0
a9a0: 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65  004  /* The file
a9b0: 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74   is empty (lengt
a9c0: 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 23 64  h 0 bytes) */.#d
a9d0: 65 66 69 6e 65 20 44 42 5f 52 65 73 65 74 57 61  efine DB_ResetWa
a9e0: 6e 74 65 64 20 20 20 20 20 30 78 30 30 30 38 20  nted     0x0008 
a9f0: 20 2f 2a 20 52 65 73 65 74 20 74 68 65 20 73 63   /* Reset the sc
aa00: 68 65 6d 61 20 77 68 65 6e 20 6e 53 63 68 65 6d  hema when nSchem
aa10: 61 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a  aLock==0 */../*.
aa20: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** The number of
aa30: 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73   different kinds
aa40: 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20   of things that 
aa50: 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a  can be limited.*
aa60: 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69  * using the sqli
aa70: 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65  te3_limit() inte
aa80: 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rface..*/.#defin
aa90: 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54  e SQLITE_N_LIMIT
aaa0: 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57   (SQLITE_LIMIT_W
aab0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29  ORKER_THREADS+1)
aac0: 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64  ../*.** Lookasid
aad0: 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65  e malloc is a se
aae0: 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20  t of fixed-size 
aaf0: 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e  buffers that can
ab00: 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73   be used.** to s
ab10: 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61  atisfy small tra
ab20: 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c  nsient memory al
ab30: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74  location request
ab40: 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a  s for objects.**
ab50: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
ab60: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
ab70: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
ab80: 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a  n.  The use of.*
ab90: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * lookaside mall
aba0: 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69  oc provides a si
abb0: 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72  gnificant perfor
abc0: 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e  mance enhancemen
abd0: 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25  t.** (approx 10%
abe0: 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75  ) by avoiding nu
abf0: 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72  merous malloc/fr
ac00: 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c  ee requests whil
ac10: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c  e parsing.** SQL
ac20: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
ac30: 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65  ** The Lookaside
ac40: 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
ac50: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69   configuration i
ac60: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
ac70: 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64   the.** lookasid
ac80: 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74  e malloc subsyst
ac90: 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61  em.  Each availa
aca0: 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ble memory alloc
acb0: 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20  ation in.** the 
acc0: 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73  lookaside subsys
acd0: 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e  tem is stored on
ace0: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
acf0: 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a  f LookasideSlot.
ad00: 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a  ** objects..**.*
ad10: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * Lookaside allo
ad20: 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79  cations are only
ad30: 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a   allowed for obj
ad40: 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73  ects that are as
ad50: 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68  sociated.** with
ad60: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
ad70: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
ad80: 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d  n.  Hence, schem
ad90: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61  a information ca
ada0: 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65  nnot.** be store
adb0: 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62  d in lookaside b
adc0: 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64  ecause in shared
add0: 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20   cache mode the 
ade0: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
adf0: 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20  on.** is shared 
ae00: 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  by multiple data
ae10: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
ae20: 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68  .  Therefore, wh
ae30: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73  ile parsing.** s
ae40: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
ae50: 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65  n, the Lookaside
ae60: 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69  .bEnabled flag i
ae70: 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61  s cleared so tha
ae80: 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61  t.** lookaside a
ae90: 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e  llocations are n
aea0: 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74  ot used to const
aeb0: 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20  ruct the schema 
aec0: 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75  objects..*/.stru
aed0: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20  ct Lookaside {. 
aee0: 20 75 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20   u32 bDisable;  
aef0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79           /* Only
af00: 20 6f 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f   operate the loo
af10: 6b 61 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f  kaside when zero
af20: 20 2a 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20   */.  u16 sz;   
af30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
af40: 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75   Size of each bu
af50: 66 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f  ffer in bytes */
af60: 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b  .  u8 bMalloced;
af70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
af80: 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74  ue if pStart obt
af90: 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74  ained from sqlit
afa0: 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20  e3_malloc() */. 
afb0: 20 75 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20 20   u32 nSlot;     
afc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
afd0: 65 72 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65 20  er of lookaside 
afe0: 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20  slots allocated 
aff0: 2a 2f 0a 20 20 75 33 32 20 61 6e 53 74 61 74 5b  */.  u32 anStat[
b000: 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  3];          /* 
b010: 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a  0: hits.  1: siz
b020: 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75  e misses.  2: fu
b030: 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c  ll misses */.  L
b040: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 49  ookasideSlot *pI
b050: 6e 69 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  nit;   /* List o
b060: 66 20 62 75 66 66 65 72 73 20 6e 6f 74 20 70 72  f buffers not pr
b070: 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 2a 2f  eviously used */
b080: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
b090: 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69   *pFree;   /* Li
b0a0: 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  st of available 
b0b0: 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
b0c0: 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20  d *pStart;      
b0d0: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
b0e0: 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  te of available 
b0f0: 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a  memory space */.
b100: 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20    void *pEnd;   
b110: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
b120: 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64  st byte past end
b130: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70   of available sp
b140: 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74  ace */.};.struct
b150: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b   LookasideSlot {
b160: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
b170: 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e   *pNext;    /* N
b180: 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68  ext buffer in th
b190: 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62  e list of free b
b1a0: 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  uffers */.};../*
b1b0: 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65  .** A hash table
b1c0: 20 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75   for built-in fu
b1d0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
b1e0: 6e 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f  ns.  (Applicatio
b1f0: 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e  n-defined.** fun
b200: 63 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67  ctions use a reg
b210: 75 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65  ular table table
b220: 20 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a   from hash.h.).*
b230: 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46  *.** Hash each F
b240: 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
b250: 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65   into one of the
b260: 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d   FuncDefHash.a[]
b270: 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69   slots..** Colli
b280: 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65  sions are on the
b290: 20 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68   FuncDef.u.pHash
b2a0: 20 63 68 61 69 6e 2e 20 20 55 73 65 20 74 68 65   chain.  Use the
b2b0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53   SQLITE_FUNC_HAS
b2c0: 48 28 29 0a 2a 2a 20 6d 61 63 72 6f 20 74 6f 20  H().** macro to 
b2d0: 63 6f 6d 70 75 74 65 20 61 20 68 61 73 68 20 6f  compute a hash o
b2e0: 6e 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 6e  n the function n
b2f0: 61 6d 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ame..*/.#define 
b300: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
b310: 5f 53 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75  _SZ 23.struct Fu
b320: 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75  ncDefHash {.  Fu
b330: 6e 63 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f  ncDef *a[SQLITE_
b340: 46 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20  FUNC_HASH_SZ];  
b350: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
b360: 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73  le for functions
b370: 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53   */.};.#define S
b380: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28  QLITE_FUNC_HASH(
b390: 43 2c 4c 29 20 28 28 28 43 29 2b 28 4c 29 29 25  C,L) (((C)+(L))%
b3a0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
b3b0: 5f 53 5a 29 0a 0a 23 69 66 64 65 66 20 53 51 4c  _SZ)..#ifdef SQL
b3c0: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
b3d0: 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e  ICATION./*.** In
b3e0: 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69  formation held i
b3f0: 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20  n the "sqlite3" 
b400: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
b410: 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75  ion object and u
b420: 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65  sed.** to manage
b430: 20 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   user authentica
b440: 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  tion..*/.typedef
b450: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f   struct sqlite3_
b460: 75 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33  userauth sqlite3
b470: 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63  _userauth;.struc
b480: 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  t sqlite3_userau
b490: 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65  th {.  u8 authLe
b4a0: 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  vel;            
b4b0: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
b4c0: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c  authentication l
b4d0: 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  evel */.  int nA
b4e0: 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20  uthPW;          
b4f0: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
b500: 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69  of the zAuthPW i
b510: 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61  n bytes */.  cha
b520: 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20  r *zAuthPW;     
b530: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
b540: 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61  ssword used to a
b550: 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20  uthenticate */. 
b560: 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72   char *zAuthUser
b570: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
b580: 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64  * User name used
b590: 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65   to authenticate
b5a0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77   */.};../* Allow
b5b0: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71  ed values for sq
b5c0: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61  lite3_userauth.a
b5d0: 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66  uthLevel */.#def
b5e0: 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77  ine UAUTH_Unknow
b5f0: 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41  n     0     /* A
b600: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f  uthentication no
b610: 74 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f  t yet checked */
b620: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46  .#define UAUTH_F
b630: 61 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20  ail        1    
b640: 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74   /* User authent
b650: 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a  ication failed *
b660: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
b670: 55 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20  User        2   
b680: 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74    /* Authenticat
b690: 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75  ed as a normal u
b6a0: 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ser */.#define U
b6b0: 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20  AUTH_Admin      
b6c0: 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e   3     /* Authen
b6d0: 74 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64  ticated as an ad
b6e0: 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a  ministrator */..
b6f0: 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65  /* Functions use
b700: 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61  d only by user a
b710: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67  uthorization log
b720: 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ic */.int sqlite
b730: 33 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63  3UserAuthTable(c
b740: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
b750: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
b760: 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74  CheckLogin(sqlit
b770: 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
b780: 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
b790: 65 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73  e3UserAuthInit(s
b7a0: 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
b7b0: 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28  qlite3CryptFunc(
b7c0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
b7d0: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
b7e0: 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f  ue**);..#endif /
b7f0: 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  * SQLITE_USER_AU
b800: 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a  THENTICATION */.
b810: 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66  ./*.** typedef f
b820: 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61  or the authoriza
b830: 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75  tion callback fu
b840: 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65  nction..*/.#ifde
b850: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
b860: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74  THENTICATION.  t
b870: 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c  ypedef int (*sql
b880: 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64  ite3_xauth)(void
b890: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
b8a0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
b8b0: 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
b8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8d0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
b8e0: 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
b8f0: 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  r*);.#else.  typ
b900: 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74  edef int (*sqlit
b910: 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c  e3_xauth)(void*,
b920: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
b930: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
b940: 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20  t char*,.       
b950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b960: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
b970: 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
b980: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
b990: 54 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 20  T_DEPRECATED./* 
b9a0: 54 68 69 73 20 69 73 20 61 6e 20 65 78 74 72 61  This is an extra
b9b0: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20 6d 61   SQLITE_TRACE ma
b9c0: 63 72 6f 20 74 68 61 74 20 69 6e 64 69 63 61 74  cro that indicat
b9d0: 65 73 20 22 6c 65 67 61 63 79 22 20 74 72 61 63  es "legacy" trac
b9e0: 69 6e 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74  ing.** in the st
b9f0: 79 6c 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 74  yle of sqlite3_t
ba00: 72 61 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  race().*/.#defin
ba10: 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c  e SQLITE_TRACE_L
ba20: 45 47 41 43 59 20 20 20 20 20 20 20 20 20 20 30  EGACY          0
ba30: 78 34 30 20 20 20 20 20 2f 2a 20 55 73 65 20 74  x40     /* Use t
ba40: 68 65 20 6c 65 67 61 63 79 20 78 54 72 61 63 65  he legacy xTrace
ba50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ba60: 54 45 5f 54 52 41 43 45 5f 58 50 52 4f 46 49 4c  TE_TRACE_XPROFIL
ba70: 45 20 20 20 20 20 20 20 20 30 78 38 30 20 20 20  E        0x80   
ba80: 20 20 2f 2a 20 55 73 65 20 74 68 65 20 6c 65 67    /* Use the leg
ba90: 61 63 79 20 78 50 72 6f 66 69 6c 65 20 2a 2f 0a  acy xProfile */.
baa0: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51  #else.#define SQ
bab0: 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43  LITE_TRACE_LEGAC
bac0: 59 20 20 20 20 20 20 20 20 20 20 30 0a 23 64 65  Y          0.#de
bad0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43  fine SQLITE_TRAC
bae0: 45 5f 58 50 52 4f 46 49 4c 45 20 20 20 20 20 20  E_XPROFILE      
baf0: 20 20 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    0.#endif /* SQ
bb00: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43  LITE_OMIT_DEPREC
bb10: 41 54 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ATED */.#define 
bb20: 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4e 4f 4e  SQLITE_TRACE_NON
bb30: 4c 45 47 41 43 59 5f 4d 41 53 4b 20 20 30 78 30  LEGACY_MASK  0x0
bb40: 66 20 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 20  f     /* Normal 
bb50: 66 6c 61 67 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  flags */.../*.**
bb60: 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20 63   Each database c
bb70: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20  onnection is an 
bb80: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
bb90: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
bba0: 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73  ure..*/.struct s
bbb0: 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74  qlite3 {.  sqlit
bbc0: 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20  e3_vfs *pVfs;   
bbd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49           /* OS I
bbe0: 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74  nterface */.  st
bbf0: 72 75 63 74 20 56 64 62 65 20 2a 70 56 64 62 65  ruct Vdbe *pVdbe
bc00: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
bc10: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 76 69  ist of active vi
bc20: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a  rtual machines *
bc30: 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66  /.  CollSeq *pDf
bc40: 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20  ltColl;         
bc50: 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74    /* The default
bc60: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
bc70: 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a  nce (BINARY) */.
bc80: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
bc90: 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  *mutex;         
bca0: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  /* Connection mu
bcb0: 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62  tex */.  Db *aDb
bcc0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bcd0: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61         /* All ba
bce0: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20  ckends */.  int 
bcf0: 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  nDb;            
bd00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
bd10: 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20  ber of backends 
bd20: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
bd30: 20 2a 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c 61   */.  u32 mDbFla
bd40: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
bd50: 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 72 65 63      /* flags rec
bd60: 6f 72 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c 20  ording internal 
bd70: 73 74 61 74 65 20 2a 2f 0a 20 20 75 36 34 20 66  state */.  u64 f
bd80: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
bd90: 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67           /* flag
bda0: 73 20 73 65 74 74 61 62 6c 65 20 62 79 20 70 72  s settable by pr
bdb0: 61 67 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f 77  agmas. See below
bdc0: 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f   */.  i64 lastRo
bdd0: 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  wid;            
bde0: 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20      /* ROWID of 
bdf0: 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65  most recent inse
be00: 72 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a  rt (see above) *
be10: 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20  /.  i64 szMmap; 
be20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be30: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61    /* Default mma
be40: 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a  p_size setting *
be50: 2f 0a 20 20 75 33 32 20 6e 53 63 68 65 6d 61 4c  /.  u32 nSchemaL
be60: 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ock;            
be70: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73 65    /* Do not rese
be80: 74 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65  t the schema whe
be90: 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20  n non-zero */.  
bea0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65  unsigned int ope
beb0: 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a  nFlags;       /*
bec0: 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
bed0: 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70   sqlite3_vfs.xOp
bee0: 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72  en() */.  int er
bef0: 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  rCode;          
bf00: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
bf10: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64  recent error cod
bf20: 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a  e (SQLITE_*) */.
bf30: 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20    int errMask;  
bf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf50: 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65  /* & result code
bf60: 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f  s with this befo
bf70: 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a  re returning */.
bf80: 20 20 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b    int iSysErrno;
bf90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfa0: 2f 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66  /* Errno value f
bfb0: 72 6f 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20  rom last system 
bfc0: 65 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64  error */.  u16 d
bfd0: 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20  bOptFlags;      
bfe0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67           /* Flag
bff0: 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61  s to enable/disa
c000: 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ble optimization
c010: 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  s */.  u8 enc;  
c020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c030: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
c040: 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75  oding */.  u8 au
c050: 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20  toCommit;       
c060: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
c070: 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
c080: 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73  . */.  u8 temp_s
c090: 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20  tore;           
c0a0: 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20       /* 1: file 
c0b0: 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66  2: memory 0: def
c0c0: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c  ault */.  u8 mal
c0d0: 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20  locFailed;      
c0e0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
c0f0: 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20  if we have seen 
c100: 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  a malloc failure
c110: 20 2a 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e   */.  u8 bBenign
c120: 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  Malloc;         
c130: 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65      /* Do not re
c140: 71 75 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72  quire OOMs if tr
c150: 75 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c  ue */.  u8 dfltL
c160: 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ockMode;        
c170: 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
c180: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f   locking-mode fo
c190: 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a  r attached dbs *
c1a0: 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20  /.  signed char 
c1b0: 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20  nextAutovac;    
c1c0: 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74    /* Autovac set
c1d0: 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55  ting after VACUU
c1e0: 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38  M if >=0 */.  u8
c1f0: 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20   suppressErr;   
c200: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
c210: 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f  o not issue erro
c220: 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72  r messages if tr
c230: 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f  ue */.  u8 vtabO
c240: 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20  nConflict;      
c250: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
c260: 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f  o return for s3_
c270: 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74  vtab_on_conflict
c280: 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61  () */.  u8 isTra
c290: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
c2a0: 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  t;    /* True if
c2b0: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73   the outermost s
c2c0: 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53  avepoint is a TS
c2d0: 20 2a 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b   */.  u8 mTrace;
c2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2f0: 20 20 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d      /* zero or m
c300: 6f 72 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ore SQLITE_TRACE
c310: 20 66 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 6e   flags */.  u8 n
c320: 6f 53 68 61 72 65 64 43 61 63 68 65 3b 20 20 20  oSharedCache;   
c330: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
c340: 65 20 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63  e if no shared-c
c350: 61 63 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f  ache backends */
c360: 0a 20 20 75 38 20 6e 53 71 6c 45 78 65 63 3b 20  .  u8 nSqlExec; 
c370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c380: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 65   /* Number of pe
c390: 6e 64 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63  nding OP_SqlExec
c3a0: 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e   opcodes */.  in
c3b0: 74 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20  t nextPagesize; 
c3c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
c3d0: 61 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41  agesize after VA
c3e0: 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20  CUUM if >0 */.  
c3f0: 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20  u32 magic;      
c400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c410: 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f   Magic number fo
c420: 72 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79  r detect library
c430: 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74   misuse */.  int
c440: 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20   nChange;       
c450: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
c460: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
c470: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
c480: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61  ) */.  int nTota
c490: 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  lChange;        
c4a0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
c4b0: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
c4c0: 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  3_total_changes(
c4d0: 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69  ) */.  int aLimi
c4e0: 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54  t[SQLITE_N_LIMIT
c4f0: 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a  ];   /* Limits *
c500: 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74  /.  int nMaxSort
c510: 65 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  erMmap;         
c520: 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a    /* Maximum siz
c530: 65 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70  e of regions map
c540: 70 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f  ped by sorter */
c550: 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  .  struct sqlite
c560: 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20  3InitInfo {     
c570: 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
c580: 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74  used during init
c590: 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20  ialization */.  
c5a0: 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20    int newTnum;  
c5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c5c0: 20 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62   Rootpage of tab
c5d0: 6c 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  le being initial
c5e0: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69  ized */.    u8 i
c5f0: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
c600: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
c610: 20 64 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e   db file is bein
c620: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
c630: 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20  .    u8 busy;   
c640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c650: 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72   /* TRUE if curr
c660: 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69  ently initializi
c670: 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ng */.    unsign
c680: 65 64 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72  ed orphanTrigger
c690: 20 3a 20 31 3b 20 2f 2a 20 4c 61 73 74 20 73 74   : 1; /* Last st
c6a0: 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61  atement is orpha
c6b0: 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72  ned TEMP trigger
c6c0: 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
c6d0: 20 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 20 3a   imposterTable :
c6e0: 20 31 3b 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20   1; /* Building 
c6f0: 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c  an imposter tabl
c700: 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  e */.    unsigne
c710: 64 20 72 65 6f 70 65 6e 4d 65 6d 64 62 20 3a 20  d reopenMemdb : 
c720: 31 3b 20 20 20 2f 2a 20 41 54 54 41 43 48 20 69  1;   /* ATTACH i
c730: 73 20 72 65 61 6c 6c 79 20 61 20 72 65 6f 70 65  s really a reope
c740: 6e 20 75 73 69 6e 67 20 4d 65 6d 44 42 20 2a 2f  n using MemDB */
c750: 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74  .  } init;.  int
c760: 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20   nVdbeActive;   
c770: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c780: 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75  mber of VDBEs cu
c790: 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20  rrently running 
c7a0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65  */.  int nVdbeRe
c7b0: 61 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ad;             
c7c0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c7d0: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
c7e0: 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  t read or write 
c7f0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72  */.  int nVdbeWr
c800: 69 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ite;            
c810: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c820: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
c830: 74 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  t read and write
c840: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45   */.  int nVdbeE
c850: 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  xec;            
c860: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c870: 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
c880: 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20   VdbeExec() */. 
c890: 20 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20   int nVDestroy; 
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c8b0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
c8c0: 76 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f  ve OP_VDestroy o
c8d0: 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69  perations */.  i
c8e0: 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20  nt nExtension;  
c8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c900: 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64  Number of loaded
c910: 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20   extensions */. 
c920: 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69   void **aExtensi
c930: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  on;            /
c940: 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65  * Array of share
c950: 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65  d library handle
c960: 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 54 72  s */.  int (*xTr
c970: 61 63 65 29 28 75 33 32 2c 76 6f 69 64 2a 2c 76  ace)(u32,void*,v
c980: 6f 69 64 2a 2c 76 6f 69 64 2a 29 3b 20 20 20 20  oid*,void*);    
c990: 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69   /* Trace functi
c9a0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54  on */.  void *pT
c9b0: 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20  raceArg;        
c9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9d0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
c9e0: 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74   the trace funct
c9f0: 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ion */.#ifndef S
ca00: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
ca10: 43 41 54 45 44 0a 20 20 76 6f 69 64 20 28 2a 78  CATED.  void (*x
ca20: 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63  Profile)(void*,c
ca30: 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b  onst char*,u64);
ca40: 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66    /* Profiling f
ca50: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
ca60: 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20  d *pProfileArg; 
ca70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca80: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
ca90: 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75  nt to profile fu
caa0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66  nction */.#endif
cab0: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74  .  void *pCommit
cac0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
cad0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
cae0: 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62   to xCommitCallb
caf0: 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28  ack() */.  int (
cb00: 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b  *xCommitCallback
cb10: 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20  )(void*);    /* 
cb20: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
cb30: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
cb40: 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67  id *pRollbackArg
cb50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
cb60: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
cb70: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
cb80: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
cb90: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
cba0: 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76  )(void*); /* Inv
cbb0: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
cbc0: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
cbd0: 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76  *pUpdateArg;.  v
cbe0: 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c  oid (*xUpdateCal
cbf0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74  lback)(void*,int
cc00: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  , const char*,co
cc10: 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65  nst char*,sqlite
cc20: 5f 69 6e 74 36 34 29 3b 0a 20 20 50 61 72 73 65  _int64);.  Parse
cc30: 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
cc40: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
cc50: 65 6e 74 20 70 61 72 73 65 20 2a 2f 0a 23 69 66  ent parse */.#if
cc60: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
cc70: 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b  E_PREUPDATE_HOOK
cc80: 0a 20 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64  .  void *pPreUpd
cc90: 61 74 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  ateArg;         
cca0: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
ccb0: 6e 74 20 74 6f 20 78 50 72 65 55 70 64 61 74 65  nt to xPreUpdate
ccc0: 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  Callback */.  vo
ccd0: 69 64 20 28 2a 78 50 72 65 55 70 64 61 74 65 43  id (*xPreUpdateC
cce0: 61 6c 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52  allback)(   /* R
ccf0: 65 67 69 73 74 65 72 65 64 20 75 73 69 6e 67 20  egistered using 
cd00: 73 71 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74  sqlite3_preupdat
cd10: 65 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20  e_hook() */.    
cd20: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
cd30: 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63  nt,char const*,c
cd40: 68 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74  har const*,sqlit
cd50: 65 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33  e3_int64,sqlite3
cd60: 5f 69 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72  _int64.  );.  Pr
cd70: 65 55 70 64 61 74 65 20 2a 70 50 72 65 55 70 64  eUpdate *pPreUpd
cd80: 61 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43  ate;        /* C
cd90: 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76  ontext for activ
cda0: 65 20 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c  e pre-update cal
cdb0: 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20  lback */.#endif 
cdc0: 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  /* SQLITE_ENABLE
cdd0: 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20  _PREUPDATE_HOOK 
cde0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
cdf0: 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
ce00: 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29   (*xWalCallback)
ce10: 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33  (void *, sqlite3
ce20: 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
ce30: 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a  , int);.  void *
ce40: 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a  pWalArg;.#endif.
ce50: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
ce60: 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  ded)(void*,sqlit
ce70: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
ce80: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
ce90: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
cea0: 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69  ed16)(void*,sqli
ceb0: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
cec0: 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a  p,const void*);.
ced0: 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65    void *pCollNee
cee0: 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65  dedArg;.  sqlite
cef0: 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20  3_value *pErr;  
cf00: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
cf10: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73  recent error mes
cf20: 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  sage */.  union 
cf30: 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69  {.    volatile i
cf40: 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64  nt isInterrupted
cf50: 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c  ; /* True if sql
cf60: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68  ite3_interrupt h
cf70: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a  as been called *
cf80: 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74  /.    double not
cf90: 55 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20  Used1;          
cfa0: 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20    /* Spacer */. 
cfb0: 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69   } u1;.  Lookasi
cfc0: 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20  de lookaside;   
cfd0: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73         /* Lookas
cfe0: 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69  ide malloc confi
cff0: 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e  guration */.#ifn
d000: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
d010: 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20  AUTHORIZATION.  
d020: 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41  sqlite3_xauth xA
d030: 75 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  uth;          /*
d040: 20 41 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a   Access authoriz
d050: 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a  ation function *
d060: 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41  /.  void *pAuthA
d070: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
d080: 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e    /* 1st argumen
d090: 74 20 74 6f 20 74 68 65 20 61 63 63 65 73 73 20  t to the access 
d0a0: 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  auth function */
d0b0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
d0c0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
d0d0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
d0e0: 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29  int (*xProgress)
d0f0: 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a  (void *);     /*
d100: 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   The progress ca
d110: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
d120: 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20   *pProgressArg; 
d130: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
d140: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f  ument to the pro
d150: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a  gress callback *
d160: 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72  /.  unsigned nPr
d170: 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20  ogressOps;      
d180: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f    /* Number of o
d190: 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72  pcodes for progr
d1a0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
d1b0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
d1c0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
d1d0: 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56  ALTABLE.  int nV
d1e0: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
d1f0: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63          /* Alloc
d200: 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54  ated size of aVT
d210: 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  rans */.  Hash a
d220: 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20  Module;         
d230: 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c          /* popul
d240: 61 74 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  ated by sqlite3_
d250: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
d260: 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56  */.  VtabCtx *pV
d270: 74 61 62 43 74 78 3b 20 20 20 20 20 20 20 20 20  tabCtx;         
d280: 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f     /* Context fo
d290: 72 20 61 63 74 69 76 65 20 76 74 61 62 20 63 6f  r active vtab co
d2a0: 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a  nnect/create */.
d2b0: 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61    VTable **aVTra
d2c0: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
d2d0: 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65  /* Virtual table
d2e0: 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e  s with open tran
d2f0: 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54  sactions */.  VT
d300: 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63  able *pDisconnec
d310: 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  t;          /* D
d320: 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20  isconnect these 
d330: 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f  in next sqlite3_
d340: 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e  prepare() */.#en
d350: 64 69 66 0a 20 20 48 61 73 68 20 61 46 75 6e 63  dif.  Hash aFunc
d360: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d370: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
d380: 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e of connection 
d390: 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48  functions */.  H
d3a0: 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20  ash aCollSeq;   
d3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d3c0: 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  All collating se
d3d0: 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73  quences */.  Bus
d3e0: 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e  yHandler busyHan
d3f0: 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75  dler;      /* Bu
d400: 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  sy callback */. 
d410: 20 44 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d   Db aDbStatic[2]
d420: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
d430: 2a 20 53 74 61 74 69 63 20 73 70 61 63 65 20 66  * Static space f
d440: 6f 72 20 74 68 65 20 32 20 64 65 66 61 75 6c 74  or the 2 default
d450: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53   backends */.  S
d460: 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70  avepoint *pSavep
d470: 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  oint;        /* 
d480: 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 73  List of active s
d490: 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69  avepoints */.  i
d4a0: 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20  nt busyTimeout; 
d4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d4c0: 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d  Busy handler tim
d4d0: 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f  eout, in msec */
d4e0: 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e  .  int nSavepoin
d4f0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
d500: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f   /* Number of no
d510: 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  n-transaction sa
d520: 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  vepoints */.  in
d530: 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20  t nStatement;   
d540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d550: 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
d560: 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61  statement-transa
d570: 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34  ctions  */.  i64
d580: 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
d590: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
d5a0: 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  t deferred const
d5b0: 72 61 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e  raints this tran
d5c0: 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36  saction. */.  i6
d5d0: 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  4 nDeferredImmCo
d5e0: 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ns;         /* N
d5f0: 65 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65  et deferred imme
d600: 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74  diate constraint
d610: 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79  s */.  int *pnBy
d620: 74 65 73 46 72 65 65 64 3b 20 20 20 20 20 20 20  tesFreed;       
d630: 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e       /* If not N
d640: 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74  ULL, increment t
d650: 68 69 73 20 69 6e 20 44 62 46 72 65 65 28 29 20  his in DbFree() 
d660: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
d670: 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e  _ENABLE_UNLOCK_N
d680: 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66  OTIFY.  /* The f
d690: 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c  ollowing variabl
d6a0: 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65  es are all prote
d6b0: 63 74 65 64 20 62 79 20 74 68 65 20 53 54 41 54  cted by the STAT
d6c0: 49 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d  IC_MASTER.  ** m
d6d0: 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c  utex, not by sql
d6e0: 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79  ite3.mutex. They
d6f0: 20 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64   are used by cod
d700: 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20  e in notify.c.. 
d710: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
d720: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
d730: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
d740: 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69   that X is waiti
d750: 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a  ng for Y to.  **
d760: 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20   unlock so that 
d770: 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a  it can proceed..
d780: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
d790: 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63  .pBlockingConnec
d7a0: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
d7b0: 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69  ans that somethi
d7c0: 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a  ng that X tried.
d7d0: 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f    ** tried to do
d7e0: 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64   recently failed
d7f0: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
d800: 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65  LOCKED error due
d810: 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68   to locks.  ** h
d820: 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20  eld by Y..  */. 
d830: 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b   sqlite3 *pBlock
d840: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f  ingConnection; /
d850: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61  * Connection tha
d860: 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f  t caused SQLITE_
d870: 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69  LOCKED */.  sqli
d880: 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e  te3 *pUnlockConn
d890: 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ection;         
d8a0: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
d8b0: 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c  to watch for unl
d8c0: 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ock */.  void *p
d8d0: 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20  UnlockArg;      
d8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d8f0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55  * Argument to xU
d900: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20  nlockNotify */. 
d910: 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e   void (*xUnlockN
d920: 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20  otify)(void **, 
d930: 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b  int);  /* Unlock
d940: 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b   notify callback
d950: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
d960: 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20  NextBlocked;    
d970: 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c      /* Next in l
d980: 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b  ist of all block
d990: 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a  ed connections *
d9a0: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  /.#endif.#ifdef 
d9b0: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
d9c0: 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c  ENTICATION.  sql
d9d0: 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 61 75  ite3_userauth au
d9e0: 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73  th;        /* Us
d9f0: 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  er authenticatio
da00: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f  n information */
da10: 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
da20: 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73  * A macro to dis
da30: 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69  cover the encodi
da40: 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  ng of a database
da50: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
da60: 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62  EMA_ENC(db) ((db
da70: 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d  )->aDb[0].pSchem
da80: 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20  a->enc).#define 
da90: 45 4e 43 28 64 62 29 20 20 20 20 20 20 20 20 28  ENC(db)        (
daa0: 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a  (db)->enc)../*.*
dab0: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
dac0: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
dad0: 33 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56  3.flags..**.** V
dae0: 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
daf0: 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61   (enforced via a
db00: 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
db10: 20 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79    SQLITE_FullFSy
db20: 6e 63 20 20 20 20 20 3d 3d 20 50 41 47 45 52 5f  nc     == PAGER_
db30: 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20  FULLFSYNC.**    
db40: 20 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c    SQLITE_CkptFul
db50: 6c 46 53 79 6e 63 20 3d 3d 20 50 41 47 45 52 5f  lFSync == PAGER_
db60: 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a  CKPT_FULLFSYNC.*
db70: 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43 61  *      SQLITE_Ca
db80: 63 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d 20 50  cheSpill    == P
db90: 41 47 45 52 5f 43 41 43 48 45 5f 53 50 49 4c 4c  AGER_CACHE_SPILL
dba0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
dbb0: 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20  TE_WriteSchema  
dbc0: 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a    0x00000001  /*
dbd0: 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51   OK to update SQ
dbe0: 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23  LITE_MASTER */.#
dbf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65  define SQLITE_Le
dc00: 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30  gacyFileFmt  0x0
dc10: 30 30 30 30 30 30 32 20 20 2f 2a 20 43 72 65 61  0000002  /* Crea
dc20: 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73  te new databases
dc30: 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a   in format 1 */.
dc40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
dc50: 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78  ullColNames   0x
dc60: 30 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68 6f  00000004  /* Sho
dc70: 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61  w full column na
dc80: 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f  mes on SELECT */
dc90: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dca0: 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30  FullFSync      0
dcb0: 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73  x00000008  /* Us
dcc0: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20  e full fsync on 
dcd0: 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23  the backend */.#
dce0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b  define SQLITE_Ck
dcf0: 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30  ptFullFSync  0x0
dd00: 30 30 30 30 30 31 30 20 20 2f 2a 20 55 73 65 20  0000010  /* Use 
dd10: 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63  full fsync for c
dd20: 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65  heckpoint */.#de
dd30: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68  fine SQLITE_Cach
dd40: 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30  eSpill     0x000
dd50: 30 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f 20  00020  /* OK to 
dd60: 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68  spill pager cach
dd70: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
dd80: 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65  ITE_ShortColName
dd90: 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f  s  0x00000040  /
dda0: 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c  * Show short col
ddb0: 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64  umns names */.#d
ddc0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75  efine SQLITE_Cou
ddd0: 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30  ntRows      0x00
dde0: 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74  000080  /* Count
ddf0: 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79   rows changed by
de00: 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20   INSERT, */.    
de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de30: 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54        /*   DELET
de40: 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64  E, or UPDATE and
de50: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20   return */.     
de60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de80: 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f       /*   the co
de90: 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c  unt using a call
dea0: 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65  back. */.#define
deb0: 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c   SQLITE_NullCall
dec0: 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31 30  back   0x0000010
ded0: 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  0  /* Invoke the
dee0: 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69   callback once i
def0: 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20  f the */.       
df00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df20: 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73     /*   result s
df30: 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23  et is empty */.#
df40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67  define SQLITE_Ig
df50: 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30  noreChecks   0x0
df60: 30 30 30 30 32 30 30 20 20 2f 2a 20 44 6f 20 6e  0000200  /* Do n
df70: 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b  ot enforce check
df80: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
df90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
dfa0: 65 61 64 55 6e 63 6f 6d 6d 69 74 20 20 20 30 78  eadUncommit   0x
dfb0: 30 30 30 30 30 34 30 30 20 20 2f 2a 20 52 45 41  00000400  /* REA
dfc0: 44 20 55 4e 43 4f 4d 4d 49 54 54 45 44 20 69 6e  D UNCOMMITTED in
dfd0: 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 2a 2f   shared-cache */
dfe0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dff0: 4e 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30  NoCkptOnClose  0
e000: 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4e 6f  x00000800  /* No
e010: 20 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63   checkpoint on c
e020: 6c 6f 73 65 28 29 2f 44 45 54 41 43 48 20 2a 2f  lose()/DETACH */
e030: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e040: 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30  ReverseOrder   0
e050: 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 52 65  x00001000  /* Re
e060: 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20  verse unordered 
e070: 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69  SELECTs */.#defi
e080: 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69  ne SQLITE_RecTri
e090: 67 67 65 72 73 20 20 20 20 30 78 30 30 30 30 32  ggers    0x00002
e0a0: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72  000  /* Enable r
e0b0: 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72  ecursive trigger
e0c0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e0d0: 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20  ITE_ForeignKeys 
e0e0: 20 20 20 30 78 30 30 30 30 34 30 30 30 20 20 2f     0x00004000  /
e0f0: 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67  * Enforce foreig
e100: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
e110: 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  s  */.#define SQ
e120: 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20  LITE_AutoIndex  
e130: 20 20 20 20 30 78 30 30 30 30 38 30 30 30 20 20      0x00008000  
e140: 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61  /* Enable automa
e150: 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  tic indexes */.#
e160: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f  define SQLITE_Lo
e170: 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30  adExtension  0x0
e180: 30 30 31 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0010000  /* Enab
e190: 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  le load_extensio
e1a0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
e1b0: 49 54 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63 20  ITE_LoadExtFunc 
e1c0: 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f     0x00020000  /
e1d0: 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78  * Enable load_ex
e1e0: 74 65 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66 75  tension() SQL fu
e1f0: 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nc */.#define SQ
e200: 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67  LITE_EnableTrigg
e210: 65 72 20 20 30 78 30 30 30 34 30 30 30 30 20 20  er  0x00040000  
e220: 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
e230: 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64  e triggers */.#d
e240: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66  efine SQLITE_Def
e250: 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 30  erFKs       0x00
e260: 30 38 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72  080000  /* Defer
e270: 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69   all FK constrai
e280: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
e290: 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20  QLITE_QueryOnly 
e2a0: 20 20 20 20 20 30 78 30 30 31 30 30 30 30 30 20       0x00100000 
e2b0: 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61   /* Disable data
e2c0: 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a  base changes */.
e2d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
e2e0: 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30 78  ellSizeCk     0x
e2f0: 30 30 32 30 30 30 30 30 20 20 2f 2a 20 43 68 65  00200000  /* Che
e300: 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73 69  ck btree cell si
e310: 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23  zes on load */.#
e320: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 74  define SQLITE_Ft
e330: 73 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78 30  s3Tokenizer  0x0
e340: 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0400000  /* Enab
e350: 6c 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65  le fts3_tokenize
e360: 72 28 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  r(2) */.#define 
e370: 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 51 50 53  SQLITE_EnableQPS
e380: 47 20 20 20 20 20 30 78 30 30 38 30 30 30 30 30  G     0x00800000
e390: 20 20 2f 2a 20 51 75 65 72 79 20 50 6c 61 6e 6e    /* Query Plann
e3a0: 65 72 20 53 74 61 62 69 6c 69 74 79 20 47 75 61  er Stability Gua
e3b0: 72 61 6e 74 65 65 2a 2f 0a 23 64 65 66 69 6e 65  rantee*/.#define
e3c0: 20 53 51 4c 49 54 45 5f 54 72 69 67 67 65 72 45   SQLITE_TriggerE
e3d0: 51 50 20 20 20 20 20 30 78 30 31 30 30 30 30 30  QP     0x0100000
e3e0: 30 20 20 2f 2a 20 53 68 6f 77 20 74 72 69 67 67  0  /* Show trigg
e3f0: 65 72 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  er EXPLAIN QUERY
e400: 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65   PLAN */.#define
e410: 20 53 51 4c 49 54 45 5f 52 65 73 65 74 44 61 74   SQLITE_ResetDat
e420: 61 62 61 73 65 20 20 30 78 30 32 30 30 30 30 30  abase  0x0200000
e430: 30 20 20 2f 2a 20 52 65 73 65 74 20 74 68 65 20  0  /* Reset the 
e440: 64 61 74 61 62 61 73 65 20 2a 2f 0a 23 64 65 66  database */.#def
e450: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63  ine SQLITE_Legac
e460: 79 41 6c 74 65 72 20 20 20 20 30 78 30 34 30 30  yAlter    0x0400
e470: 30 30 30 30 20 20 2f 2a 20 4c 65 67 61 63 79 20  0000  /* Legacy 
e480: 41 4c 54 45 52 20 54 41 42 4c 45 20 62 65 68 61  ALTER TABLE beha
e490: 76 69 6f 75 72 20 2a 2f 0a 23 64 65 66 69 6e 65  viour */.#define
e4a0: 20 53 51 4c 49 54 45 5f 4e 6f 53 63 68 65 6d 61   SQLITE_NoSchema
e4b0: 45 72 72 6f 72 20 20 30 78 30 38 30 30 30 30 30  Error  0x0800000
e4c0: 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 70  0  /* Do not rep
e4d0: 6f 72 74 20 73 63 68 65 6d 61 20 70 61 72 73 65  ort schema parse
e4e0: 20 65 72 72 6f 72 73 2a 2f 0a 23 64 65 66 69 6e   errors*/.#defin
e4f0: 65 20 53 51 4c 49 54 45 5f 44 65 66 65 6e 73 69  e SQLITE_Defensi
e500: 76 65 20 20 20 20 20 20 30 78 31 30 30 30 30 30  ve      0x100000
e510: 30 30 20 20 2f 2a 20 49 6e 70 75 74 20 53 51 4c  00  /* Input SQL
e520: 20 69 73 20 6c 69 6b 65 6c 79 20 68 6f 73 74 69   is likely hosti
e530: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  le */.#define SQ
e540: 4c 49 54 45 5f 44 71 73 44 44 4c 20 20 20 20 20  LITE_DqsDDL     
e550: 20 20 20 20 30 78 32 30 30 30 30 30 30 30 20 20      0x20000000  
e560: 2f 2a 20 64 62 6c 2d 71 75 6f 74 65 64 20 73 74  /* dbl-quoted st
e570: 72 69 6e 67 73 20 61 6c 6c 6f 77 65 64 20 69 6e  rings allowed in
e580: 20 44 44 4c 2a 2f 0a 23 64 65 66 69 6e 65 20 53   DDL*/.#define S
e590: 51 4c 49 54 45 5f 44 71 73 44 4d 4c 20 20 20 20  QLITE_DqsDML    
e5a0: 20 20 20 20 20 30 78 34 30 30 30 30 30 30 30 20       0x40000000 
e5b0: 20 2f 2a 20 64 62 6c 2d 71 75 6f 74 65 64 20 73   /* dbl-quoted s
e5c0: 74 72 69 6e 67 73 20 61 6c 6c 6f 77 65 64 20 69  trings allowed i
e5d0: 6e 20 44 4d 4c 2a 2f 0a 0a 2f 2a 20 46 6c 61 67  n DML*/../* Flag
e5e0: 73 20 75 73 65 64 20 6f 6e 6c 79 20 69 66 20 64  s used only if d
e5f0: 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 64 65 66  ebugging */.#def
e600: 69 6e 65 20 48 49 28 58 29 20 20 28 28 75 36 34  ine HI(X)  ((u64
e610: 29 28 58 29 3c 3c 33 32 29 0a 23 69 66 64 65 66  )(X)<<32).#ifdef
e620: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 64   SQLITE_DEBUG.#d
e630: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c  efine SQLITE_Sql
e640: 54 72 61 63 65 20 20 20 20 20 20 20 48 49 28 30  Trace       HI(0
e650: 78 30 30 30 31 29 20 20 2f 2a 20 44 65 62 75 67  x0001)  /* Debug
e660: 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74   print SQL as it
e670: 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65   executes */.#de
e680: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
e690: 4c 69 73 74 69 6e 67 20 20 20 20 48 49 28 30 78  Listing    HI(0x
e6a0: 30 30 30 32 29 20 20 2f 2a 20 44 65 62 75 67 20  0002)  /* Debug 
e6b0: 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45  listings of VDBE
e6c0: 20 70 72 6f 67 73 20 2a 2f 0a 23 64 65 66 69 6e   progs */.#defin
e6d0: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  e SQLITE_VdbeTra
e6e0: 63 65 20 20 20 20 20 20 48 49 28 30 78 30 30 30  ce      HI(0x000
e6f0: 34 29 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74  4)  /* True to t
e700: 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74  race VDBE execut
e710: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
e720: 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54  QLITE_VdbeAddopT
e730: 72 61 63 65 20 48 49 28 30 78 30 30 30 38 29 20  race HI(0x0008) 
e740: 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65   /* Trace sqlite
e750: 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c  3VdbeAddOp() cal
e760: 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ls */.#define SQ
e770: 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20 20  LITE_VdbeEQP    
e780: 20 20 20 20 48 49 28 30 78 30 30 31 30 29 20 20      HI(0x0010)  
e790: 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e  /* Debug EXPLAIN
e7a0: 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23   QUERY PLAN */.#
e7b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 61  define SQLITE_Pa
e7c0: 72 73 65 72 54 72 61 63 65 20 20 20 20 48 49 28  rserTrace    HI(
e7d0: 30 78 30 30 32 30 29 20 20 2f 2a 20 50 52 41 47  0x0020)  /* PRAG
e7e0: 4d 41 20 70 61 72 73 65 72 5f 74 72 61 63 65 3d  MA parser_trace=
e7f0: 4f 4e 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ON */.#endif../*
e800: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
e810: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d  es for sqlite3.m
e820: 44 62 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  DbFlags.*/.#defi
e830: 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  ne DBFLAG_Schema
e840: 43 68 61 6e 67 65 20 20 20 30 78 30 30 30 31 20  Change   0x0001 
e850: 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20   /* Uncommitted 
e860: 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67  Hash table chang
e870: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  es */.#define DB
e880: 46 4c 41 47 5f 50 72 65 66 65 72 42 75 69 6c 74  FLAG_PreferBuilt
e890: 69 6e 20 20 30 78 30 30 30 32 20 20 2f 2a 20 50  in  0x0002  /* P
e8a0: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69  reference to bui
e8b0: 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23  lt-in funcs */.#
e8c0: 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61  define DBFLAG_Va
e8d0: 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78 30  cuum         0x0
e8e0: 30 30 34 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c  004  /* Currentl
e8f0: 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f  y in a VACUUM */
e900: 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f  .#define DBFLAG_
e910: 56 61 63 75 75 6d 49 6e 74 6f 20 20 20 20 20 30  VacuumInto     0
e920: 78 30 30 30 38 20 20 2f 2a 20 43 75 72 72 65 6e  x0008  /* Curren
e930: 74 6c 79 20 72 75 6e 6e 69 6e 67 20 56 41 43 55  tly running VACU
e940: 55 4d 20 49 4e 54 4f 20 2a 2f 0a 23 64 65 66 69  UM INTO */.#defi
e950: 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  ne DBFLAG_Schema
e960: 4b 6e 6f 77 6e 4f 6b 20 20 30 78 30 30 31 30 20  KnownOk  0x0010 
e970: 20 2f 2a 20 53 63 68 65 6d 61 20 69 73 20 6b 6e   /* Schema is kn
e980: 6f 77 6e 20 74 6f 20 62 65 20 76 61 6c 69 64 20  own to be valid 
e990: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f  */../*.** Bits o
e9a0: 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62  f the sqlite3.db
e9b0: 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74  OptFlags field t
e9c0: 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20  hat are used by 
e9d0: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  the.** sqlite3_t
e9e0: 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
e9f0: 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49  TE_TESTCTRL_OPTI
ea00: 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69  MIZATIONS,...) i
ea10: 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73  nterface to.** s
ea20: 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62  electively disab
ea30: 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  le various optim
ea40: 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65  izations..*/.#de
ea50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
ea60: 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30  yFlattener 0x000
ea70: 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61  1   /* Query fla
ea80: 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ttening */.#defi
ea90: 6e 65 20 53 51 4c 49 54 45 5f 57 69 6e 64 6f 77  ne SQLITE_Window
eaa0: 46 75 6e 63 20 20 20 20 20 30 78 30 30 30 32 20  Func     0x0002 
eab0: 20 20 2f 2a 20 55 73 65 20 78 49 6e 76 65 72 73    /* Use xInvers
eac0: 65 20 66 6f 72 20 77 69 6e 64 6f 77 20 66 75 6e  e for window fun
ead0: 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
eae0: 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79  e SQLITE_GroupBy
eaf0: 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20  Order   0x0004  
eb00: 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65   /* GROUPBY cove
eb10: 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a  r of ORDERBY */.
eb20: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
eb30: 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78  actorOutConst 0x
eb40: 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61  0008   /* Consta
eb50: 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a  nt factoring */.
eb60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
eb70: 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78  istinctOpt    0x
eb80: 30 30 31 30 20 20 20 2f 2a 20 44 49 53 54 49 4e  0010   /* DISTIN
eb90: 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73  CT using indexes
eba0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ebb0: 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20  TE_CoverIdxScan 
ebc0: 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 43 6f    0x0020   /* Co
ebd0: 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61  vering index sca
ebe0: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
ebf0: 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a  LITE_OrderByIdxJ
ec00: 6f 69 6e 20 30 78 30 30 34 30 20 20 20 2f 2a 20  oin 0x0040   /* 
ec10: 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e  ORDER BY of join
ec20: 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23  s via index */.#
ec30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72  define SQLITE_Tr
ec40: 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30  ansitive     0x0
ec50: 30 38 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74  080   /* Transit
ec60: 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ive constraints 
ec70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ec80: 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20  E_OmitNoopJoin  
ec90: 20 30 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d 69   0x0100   /* Omi
eca0: 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20  t unused tables 
ecb0: 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66  in joins */.#def
ecc0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ine SQLITE_Count
ecd0: 4f 66 56 69 65 77 20 20 20 20 30 78 30 32 30 30  OfView    0x0200
ece0: 20 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d     /* The count-
ecf0: 6f 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a 61  of-view optimiza
ed00: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
ed10: 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e  SQLITE_CursorHin
ed20: 74 73 20 20 20 20 30 78 30 34 30 30 20 20 20 2f  ts    0x0400   /
ed30: 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48  * Add OP_CursorH
ed40: 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23  int opcodes */.#
ed50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74  define SQLITE_St
ed60: 61 74 33 34 20 20 20 20 20 20 20 20 20 30 78 30  at34         0x0
ed70: 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41  800   /* Use STA
ed80: 54 33 20 6f 72 20 53 54 41 54 34 20 64 61 74 61  T3 or STAT4 data
ed90: 20 2a 2f 0a 20 20 20 2f 2a 20 54 48 33 20 65 78   */.   /* TH3 ex
eda0: 70 65 63 74 73 20 74 68 65 20 53 74 61 74 33 34  pects the Stat34
edb0: 20 20 5e 5e 5e 5e 5e 5e 20 76 61 6c 75 65 20 74    ^^^^^^ value t
edc0: 6f 20 62 65 20 30 78 30 38 30 30 2e 20 20 44 6f  o be 0x0800.  Do
edd0: 6e 27 74 20 63 68 61 6e 67 65 20 69 74 20 2a 2f  n't change it */
ede0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
edf0: 50 75 73 68 44 6f 77 6e 20 20 20 20 20 20 20 30  PushDown       0
ee00: 78 31 30 30 30 20 20 20 2f 2a 20 54 68 65 20 70  x1000   /* The p
ee10: 75 73 68 2d 64 6f 77 6e 20 6f 70 74 69 6d 69 7a  ush-down optimiz
ee20: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
ee30: 20 53 51 4c 49 54 45 5f 53 69 6d 70 6c 69 66 79   SQLITE_Simplify
ee40: 4a 6f 69 6e 20 20 20 30 78 32 30 30 30 20 20 20  Join   0x2000   
ee50: 2f 2a 20 43 6f 6e 76 65 72 74 20 4c 45 46 54 20  /* Convert LEFT 
ee60: 4a 4f 49 4e 20 74 6f 20 4a 4f 49 4e 20 2a 2f 0a  JOIN to JOIN */.
ee70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ee80: 6b 69 70 53 63 61 6e 20 20 20 20 20 20 20 30 78  kipScan       0x
ee90: 34 30 30 30 20 20 20 2f 2a 20 53 6b 69 70 2d 73  4000   /* Skip-s
eea0: 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cans */.#define 
eeb0: 53 51 4c 49 54 45 5f 50 72 6f 70 61 67 61 74 65  SQLITE_Propagate
eec0: 43 6f 6e 73 74 20 30 78 38 30 30 30 20 20 20 2f  Const 0x8000   /
eed0: 2a 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 70  * The constant p
eee0: 72 6f 70 61 67 61 74 69 6f 6e 20 6f 70 74 20 2a  ropagation opt *
eef0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ef00: 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20  _AllOpts        
ef10: 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20  0xffff   /* All 
ef20: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f  optimizations */
ef30: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66  ../*.** Macros f
ef40: 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65 74 68  or testing wheth
ef50: 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69  er or not optimi
ef60: 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62  zations are enab
ef70: 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e  led or disabled.
ef80: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  .*/.#define Opti
ef90: 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64  mizationDisabled
efa0: 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64  (db, mask)  (((d
efb0: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
efc0: 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69  mask))!=0).#defi
efd0: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45  ne OptimizationE
efe0: 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  nabled(db, mask)
eff0: 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74     (((db)->dbOpt
f000: 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30  Flags&(mask))==0
f010: 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  )../*.** Return 
f020: 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f  true if it OK to
f030: 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74   factor constant
f040: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74   expressions int
f050: 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61  o the initializa
f060: 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68  tion.** code. Th
f070: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
f080: 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72  Parse object for
f090: 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
f0a0: 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  tor..*/.#define 
f0b0: 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29  ConstFactorOk(P)
f0c0: 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61   ((P)->okConstFa
f0d0: 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  ctor)../*.** Pos
f0e0: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
f0f0: 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69   the sqlite.magi
f100: 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20  c field..** The 
f110: 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61  numbers are obta
f120: 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61  ined at random a
f130: 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69  nd have no speci
f140: 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65  al meaning, othe
f150: 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20  r.** than being 
f160: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e  distinct from on
f170: 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64  e another..*/.#d
f180: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
f190: 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30  IC_OPEN     0xa0
f1a0: 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62  29a697  /* Datab
f1b0: 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23  ase is open */.#
f1c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
f1d0: 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39  GIC_CLOSED   0x9
f1e0: 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61  f3c2d33  /* Data
f1f0: 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a  base is closed *
f200: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f210: 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20  _MAGIC_SICK     
f220: 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45  0x4b771290  /* E
f230: 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e  rror and awaitin
f240: 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69  g close */.#defi
f250: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
f260: 42 55 53 59 20 20 20 20 20 30 78 66 30 33 62 37  BUSY     0xf03b7
f270: 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65  906  /* Database
f280: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
f290: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
f2a0: 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20  ITE_MAGIC_ERROR 
f2b0: 20 20 20 30 78 62 35 33 35 37 39 33 30 20 20 2f     0xb5357930  /
f2c0: 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  * An SQLITE_MISU
f2d0: 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  SE error occurre
f2e0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
f2f0: 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45  ITE_MAGIC_ZOMBIE
f300: 20 20 20 30 78 36 34 63 66 66 63 37 66 20 20 2f     0x64cffc7f  /
f310: 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73  * Close with las
f320: 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73  t statement clos
f330: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  e */../*.** Each
f340: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
f350: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69   defined by an i
f360: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
f370: 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75  ollowing.** stru
f380: 63 74 75 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62  cture.  For glob
f390: 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  al built-in func
f3a0: 74 69 6f 6e 73 20 28 65 78 3a 20 73 75 62 73 74  tions (ex: subst
f3b0: 72 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e  r(), max(), coun
f3c0: 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  t()).** a pointe
f3d0: 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
f3e0: 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74  ure is held in t
f3f0: 68 65 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69  he sqlite3Builti
f400: 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63  nFunctions objec
f410: 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f  t..** For per-co
f420: 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69 63 61  nnection applica
f430: 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e  tion-defined fun
f440: 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65  ctions, a pointe
f450: 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72  r to this.** str
f460: 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69  ucture is held i
f470: 6e 20 74 68 65 20 64 62 2d 3e 61 48 61 73 68 20  n the db->aHash 
f480: 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  hash table..**.*
f490: 2a 20 54 68 65 20 75 2e 70 48 61 73 68 20 66 69  * The u.pHash fi
f4a0: 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 74  eld is used by t
f4b0: 68 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d  he global built-
f4c0: 69 6e 73 2e 20 20 54 68 65 20 75 2e 70 44 65 73  ins.  The u.pDes
f4d0: 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64  tructor.** field
f4e0: 20 69 73 20 75 73 65 64 20 62 79 20 70 65 72 2d   is used by per-
f4f0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64  connection app-d
f500: 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f  ef functions..*/
f510: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20  .struct FuncDef 
f520: 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20 20 20 20  {.  i8 nArg;    
f530: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
f540: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  er of arguments.
f550: 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d    -1 means unlim
f560: 69 74 65 64 20 2a 2f 0a 20 20 75 33 32 20 66 75  ited */.  u32 fu
f570: 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  ncFlags;       /
f580: 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69  * Some combinati
f590: 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e  on of SQLITE_FUN
f5a0: 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  C_* */.  void *p
f5b0: 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a  UserData;     /*
f5c0: 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61 6d   User data param
f5d0: 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65  eter */.  FuncDe
f5e0: 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  f *pNext;      /
f5f0: 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20  * Next function 
f600: 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a  with same name *
f610: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 46 75 6e  /.  void (*xSFun
f620: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
f630: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
f640: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e  value**); /* fun
f650: 63 20 6f 72 20 61 67 67 2d 73 74 65 70 20 2a 2f  c or agg-step */
f660: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
f670: 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  ize)(sqlite3_con
f680: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
f690: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 20           /* Agg 
f6a0: 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 76  finalizer */.  v
f6b0: 6f 69 64 20 28 2a 78 56 61 6c 75 65 29 28 73 71  oid (*xValue)(sq
f6c0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
f6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6e0: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
f6f0: 61 67 67 20 76 61 6c 75 65 20 2a 2f 0a 20 20 76  agg value */.  v
f700: 6f 69 64 20 28 2a 78 49 6e 76 65 72 73 65 29 28  oid (*xInverse)(
f710: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
f720: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
f730: 75 65 2a 2a 29 3b 20 2f 2a 20 69 6e 76 65 72 73  ue**); /* invers
f740: 65 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20  e agg-step */.  
f750: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
f760: 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65  e;   /* SQL name
f770: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
f780: 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  . */.  union {. 
f790: 20 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73     FuncDef *pHas
f7a0: 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  h;      /* Next 
f7b0: 77 69 74 68 20 61 20 64 69 66 66 65 72 65 6e 74  with a different
f7c0: 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73 61   name but the sa
f7d0: 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 20 20 46  me hash */.    F
f7e0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
f7f0: 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a  Destructor;   /*
f800: 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74   Reference count
f810: 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66 75  ed destructor fu
f820: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b  nction */.  } u;
f830: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
f840: 73 74 72 75 63 74 75 72 65 20 65 6e 63 61 70 73  structure encaps
f850: 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66 75  ulates a user-fu
f860: 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f  nction destructo
f870: 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a  r callback (as.*
f880: 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69  * configured usi
f890: 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69  ng create_functi
f8a0: 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72  on_v2()) and a r
f8b0: 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72  eference counter
f8c0: 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65  . When.** create
f8d0: 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69  _function_v2() i
f8e0: 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61  s called to crea
f8f0: 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69  te a function wi
f900: 74 68 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c  th a destructor,
f910: 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a  .** a single obj
f920: 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65  ect of this type
f930: 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46   is allocated. F
f940: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52  uncDestructor.nR
f950: 65 66 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20  ef is set to.** 
f960: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75  the number of Fu
f970: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72  ncDef objects cr
f980: 65 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20  eated (either 1 
f990: 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20  or 3, depending 
f9a0: 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72  on whether.** or
f9b0: 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69   not the specifi
f9c0: 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53  ed encoding is S
f9d0: 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20  QLITE_ANY). The 
f9e0: 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63  FuncDef.pDestruc
f9f0: 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66  tor.** member of
fa00: 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77   each of the new
fa10: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
fa20: 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74   is set to point
fa30: 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65   to the allocate
fa40: 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63  d.** FuncDestruc
fa50: 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  tor..**.** There
fa60: 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20  after, when one 
fa70: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f  of the FuncDef o
fa80: 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65  bjects is delete
fa90: 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65  d, the reference
faa0: 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69  .** count on thi
fab0: 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72  s object is decr
fac0: 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74  emented. When it
fad0: 20 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20   reaches 0, the 
fae0: 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73  destructor.** is
faf0: 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65   invoked and the
fb00: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
fb10: 73 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e  structure freed.
fb20: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
fb30: 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e  estructor {.  in
fb40: 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28  t nRef;.  void (
fb50: 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20  *xDestroy)(void 
fb60: 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65  *);.  void *pUse
fb70: 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  rData;.};../*.**
fb80: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
fb90: 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61   for FuncDef.fla
fba0: 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74  gs.  Note that t
fbb0: 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f  he _LENGTH and _
fbc0: 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73  TYPEOF.** values
fbd0: 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64   must correspond
fbe0: 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54   to OPFLAG_LENGT
fbf0: 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f  HARG and OPFLAG_
fc00: 54 59 50 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a  TYPEOFARG.  And.
fc10: 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ** SQLITE_FUNC_C
fc20: 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20 62 65 20  ONSTANT must be 
fc30: 74 68 65 20 73 61 6d 65 20 61 73 20 53 51 4c 49  the same as SQLI
fc40: 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43  TE_DETERMINISTIC
fc50: 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20  .  There.** are 
fc60: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
fc70: 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20  nts in the code 
fc80: 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a  to verify this..
fc90: 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
fca0: 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
fcb0: 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
fcc0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
fcd0: 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d  UNC_MINMAX    ==
fce0: 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20    NC_MinMaxAgg  
fcf0: 20 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78      == SF_MinMax
fd00: 41 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  Agg.**     SQLIT
fd10: 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20  E_FUNC_LENGTH   
fd20: 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47   ==  OPFLAG_LENG
fd30: 54 48 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c  THARG.**     SQL
fd40: 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20  ITE_FUNC_TYPEOF 
fd50: 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59     ==  OPFLAG_TY
fd60: 50 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20 20 53  PEOFARG.**     S
fd70: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
fd80: 41 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f  ANT  ==  SQLITE_
fd90: 44 45 54 45 52 4d 49 4e 49 53 54 49 43 20 66 72  DETERMINISTIC fr
fda0: 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20 20 20  om the API.**   
fdb0: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e    SQLITE_FUNC_EN
fdc0: 43 4d 41 53 4b 20 20 20 64 65 70 65 6e 64 73 20  CMASK   depends 
fdd0: 6f 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d  on SQLITE_UTF* m
fde0: 61 63 72 6f 73 20 69 6e 20 74 68 65 20 41 50 49  acros in the API
fdf0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
fe00: 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20  TE_FUNC_ENCMASK 
fe10: 20 30 78 30 30 30 33 20 2f 2a 20 53 51 4c 49 54   0x0003 /* SQLIT
fe20: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55  E_UTF8, SQLITE_U
fe30: 54 46 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c  TF16BE or UTF16L
fe40: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
fe50: 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20  ITE_FUNC_LIKE   
fe60: 20 20 30 78 30 30 30 34 20 2f 2a 20 43 61 6e 64    0x0004 /* Cand
fe70: 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49  idate for the LI
fe80: 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  KE optimization 
fe90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fea0: 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20  E_FUNC_CASE     
feb0: 30 78 30 30 30 38 20 2f 2a 20 43 61 73 65 2d 73  0x0008 /* Case-s
fec0: 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79  ensitive LIKE-ty
fed0: 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  pe function */.#
fee0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
fef0: 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30 30  NC_EPHEM    0x00
ff00: 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e  10 /* Ephemeral.
ff10: 20 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44    Delete with VD
ff20: 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  BE */.#define SQ
ff30: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
ff40: 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20 73 71 6c  LL 0x0020 /* sql
ff50: 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53  ite3GetFuncCollS
ff60: 65 71 28 29 20 6d 69 67 68 74 20 62 65 20 63 61  eq() might be ca
ff70: 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53  lled*/.#define S
ff80: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54  QLITE_FUNC_LENGT
ff90: 48 20 20 20 30 78 30 30 34 30 20 2f 2a 20 42 75  H   0x0040 /* Bu
ffa0: 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20  ilt-in length() 
ffb0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
ffc0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
ffd0: 54 59 50 45 4f 46 20 20 20 30 78 30 30 38 30 20  TYPEOF   0x0080 
ffe0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65  /* Built-in type
fff0: 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  of() function */
10000 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10010 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78  FUNC_COUNT    0x
10020 30 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0100 /* Built-in
10030 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67   count(*) aggreg
10040 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ate */.#define S
10050 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45  QLITE_FUNC_COALE
10060 53 43 45 20 30 78 30 32 30 30 20 2f 2a 20 42 75  SCE 0x0200 /* Bu
10070 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28  ilt-in coalesce(
10080 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f  ) or ifnull() */
10090 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
100a0 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78  FUNC_UNLIKELY 0x
100b0 30 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0400 /* Built-in
100c0 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63   unlikely() func
100d0 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
100e0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
100f0 54 41 4e 54 20 30 78 30 38 30 30 20 2f 2a 20 43  TANT 0x0800 /* C
10100 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67  onstant inputs g
10110 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f  ive a constant o
10120 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65  utput */.#define
10130 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
10140 4d 41 58 20 20 20 30 78 31 30 30 30 20 2f 2a 20  MAX   0x1000 /* 
10150 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29 20 61  True for min() a
10160 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65 67 61  nd max() aggrega
10170 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  tes */.#define S
10180 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
10190 4e 47 20 20 30 78 32 30 30 30 20 2f 2a 20 22 53  NG  0x2000 /* "S
101a0 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20 56 61 6c  low Change". Val
101b0 75 65 20 63 6f 6e 73 74 61 6e 74 20 64 75 72 69  ue constant duri
101c0 6e 67 20 61 0a 20 20 20 20 20 20 20 20 20 20 20  ng a.           
101d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101e0 20 20 20 20 20 20 20 20 20 2a 2a 20 73 69 6e 67           ** sing
101f0 6c 65 20 71 75 65 72 79 20 2d 20 6d 69 67 68 74  le query - might
10200 20 63 68 61 6e 67 65 20 6f 76 65 72 20 74 69 6d   change over tim
10210 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
10220 49 54 45 5f 46 55 4e 43 5f 41 46 46 49 4e 49 54  ITE_FUNC_AFFINIT
10230 59 20 30 78 34 30 30 30 20 2f 2a 20 42 75 69 6c  Y 0x4000 /* Buil
10240 74 2d 69 6e 20 61 66 66 69 6e 69 74 79 28 29 20  t-in affinity() 
10250 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
10260 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
10270 4f 46 46 53 45 54 20 20 20 30 78 38 30 30 30 20  OFFSET   0x8000 
10280 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 73 71 6c 69  /* Built-in sqli
10290 74 65 5f 6f 66 66 73 65 74 28 29 20 66 75 6e 63  te_offset() func
102a0 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
102b0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 57 49 4e 44  SQLITE_FUNC_WIND
102c0 4f 57 20 20 20 30 78 30 30 30 31 30 30 30 30 20  OW   0x00010000 
102d0 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 77 69 6e 64  /* Built-in wind
102e0 6f 77 2d 6f 6e 6c 79 20 66 75 6e 63 74 69 6f 6e  ow-only function
102f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
10300 54 45 5f 46 55 4e 43 5f 49 4e 54 45 52 4e 41 4c  TE_FUNC_INTERNAL
10310 20 30 78 30 30 30 34 30 30 30 30 20 2f 2a 20 46   0x00040000 /* F
10320 6f 72 20 75 73 65 20 62 79 20 4e 65 73 74 65 64  or use by Nested
10330 50 61 72 73 65 28 29 20 6f 6e 6c 79 20 2a 2f 0a  Parse() only */.
10340 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
10350 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f  wing three macro
10360 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c  s, FUNCTION(), L
10370 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47  IKEFUNC() and AG
10380 47 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a  GREGATE() are.**
10390 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   used to create 
103a0 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73  the initializers
103b0 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66   for the FuncDef
103c0 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a   structures..**.
103d0 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e  **   FUNCTION(zN
103e0 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
103f0 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20   bNC, xFunc).** 
10400 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
10410 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63  te a scalar func
10420 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
10430 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e  of a function zN
10440 61 6d 65 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65  ame.**     imple
10450 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63  mented by C func
10460 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20  tion xFunc that 
10470 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67  accepts nArg arg
10480 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20  uments. The.**  
10490 20 20 20 76 61 6c 75 65 20 70 61 73 73 65 64 20     value passed 
104a0 61 73 20 69 41 72 67 20 69 73 20 63 61 73 74 20  as iArg is cast 
104b0 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64  to a (void*) and
104c0 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a   made available.
104d0 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20 75 73  **     as the us
104e0 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33  er-data (sqlite3
104f0 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f  _user_data()) fo
10500 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  r the function. 
10510 49 66 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65  If.**     argume
10520 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20  nt bNC is true, 
10530 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  then the SQLITE_
10540 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c  FUNC_NEEDCOLL fl
10550 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  ag is set..**.**
10560 20 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61     VFUNCTION(zNa
10570 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10580 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
10590 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e     Like FUNCTION
105a0 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73   except it omits
105b0 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
105c0 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a  _CONSTANT flag..
105d0 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f  **.**   DFUNCTIO
105e0 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
105f0 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10600 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e  .**     Like FUN
10610 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20  CTION except it 
10620 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45  omits the SQLITE
10630 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66  _FUNC_CONSTANT f
10640 6c 61 67 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61  lag and.**     a
10650 64 64 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46  dds the SQLITE_F
10660 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67  UNC_SLOCHNG flag
10670 2e 20 20 55 73 65 64 20 66 6f 72 20 64 61 74 65  .  Used for date
10680 20 26 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e   & time function
10690 73 0a 2a 2a 20 20 20 20 20 61 6e 64 20 66 75 6e  s.**     and fun
106a0 63 74 69 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69  ctions like sqli
106b0 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 74 68 61  te_version() tha
106c0 74 20 63 61 6e 20 63 68 61 6e 67 65 2c 20 62 75  t can change, bu
106d0 74 20 6e 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20  t not during.** 
106e0 20 20 20 20 61 20 73 69 6e 67 6c 65 20 71 75 65      a single que
106f0 72 79 2e 20 20 54 68 65 20 69 41 72 67 20 69 73  ry.  The iArg is
10700 20 69 67 6e 6f 72 65 64 2e 20 20 54 68 65 20 75   ignored.  The u
10710 73 65 72 2d 64 61 74 61 20 69 73 20 61 6c 77 61  ser-data is alwa
10720 79 73 20 73 65 74 0a 2a 2a 20 20 20 20 20 74 6f  ys set.**     to
10730 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e   a NULL pointer.
10740 20 20 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65    The bNC parame
10750 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  ter is not used.
10760 0a 2a 2a 0a 2a 2a 20 20 20 50 55 52 45 5f 44 41  .**.**   PURE_DA
10770 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
10780 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
10790 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 66 6f  ).**     Used fo
107a0 72 20 22 70 75 72 65 22 20 64 61 74 65 2f 74 69  r "pure" date/ti
107b0 6d 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68  me functions, th
107c0 69 73 20 6d 61 63 72 6f 20 69 73 20 6c 69 6b 65  is macro is like
107d0 20 44 46 55 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20   DFUNCTION.**   
107e0 20 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74    except that it
107f0 20 64 6f 65 73 20 73 65 74 20 74 68 65 20 53 51   does set the SQ
10800 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
10810 4e 54 20 66 6c 61 67 73 2e 20 20 69 41 72 67 20  NT flags.  iArg 
10820 69 73 0a 2a 2a 20 20 20 20 20 69 67 6e 6f 72 65  is.**     ignore
10830 64 20 61 6e 64 20 74 68 65 20 75 73 65 72 2d 64  d and the user-d
10840 61 74 61 20 66 6f 72 20 74 68 65 73 65 20 66 75  ata for these fu
10850 6e 63 74 69 6f 6e 73 20 69 73 20 73 65 74 20 74  nctions is set t
10860 6f 20 61 6e 20 0a 2a 2a 20 20 20 20 20 61 72 62  o an .**     arb
10870 69 74 72 61 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20  itrary non-NULL 
10880 70 6f 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e  pointer.  The bN
10890 43 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e  C parameter is n
108a0 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20  ot used..**.**  
108b0 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
108c0 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
108d0 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  C, xStep, xFinal
108e0 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
108f0 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65   create an aggre
10900 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65  gate function de
10910 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  finition impleme
10920 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74  nted by.**     t
10930 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78  he C functions x
10940 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e  Step and xFinal.
10950 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20   The first four 
10960 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20  parameters.**   
10970 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65    are interprete
10980 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61  d in the same wa
10990 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34  y as the first 4
109a0 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a   parameters to.*
109b0 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29  *     FUNCTION()
109c0 2e 0a 2a 2a 0a 2a 2a 20 20 20 57 46 55 4e 43 54  ..**.**   WFUNCT
109d0 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
109e0 20 69 41 72 67 2c 20 78 53 74 65 70 2c 20 78 46   iArg, xStep, xF
109f0 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49  inal, xValue, xI
10a00 6e 76 65 72 73 65 29 0a 2a 2a 20 20 20 20 20 55  nverse).**     U
10a10 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e  sed to create an
10a20 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
10a30 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ion definition i
10a40 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a  mplemented by.**
10a50 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74       the C funct
10a60 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78  ions xStep and x
10a70 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74  Final. The first
10a80 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73   four parameters
10a90 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65  .**     are inte
10aa0 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73  rpreted in the s
10ab0 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66  ame way as the f
10ac0 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72  irst 4 parameter
10ad0 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43  s to.**     FUNC
10ae0 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20  TION()..**.**   
10af0 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
10b00 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67  nArg, pArg, flag
10b10 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  s).**     Used t
10b20 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
10b30 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
10b40 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
10b50 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20  ion zName.**    
10b60 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
10b70 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64  rg arguments and
10b80 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
10b90 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a  by a call to C.*
10ba0 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c  *     function l
10bb0 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e  ikeFunc. Argumen
10bc0 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74  t pArg is cast t
10bd0 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64  o a (void *) and
10be0 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61   made.**     ava
10bf0 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75  ilable as the fu
10c00 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61  nction user-data
10c10 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
10c20 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20  ata()). The.**  
10c30 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73     FuncDef.flags
10c40 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
10c50 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61   to the value pa
10c60 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67  ssed as the flag
10c70 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74  s.**     paramet
10c80 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46  er..*/.#define F
10c90 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
10ca0 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10cb0 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
10cc0 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  , SQLITE_FUNC_CO
10cd0 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
10ce0 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
10cf0 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
10d00 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
10d10 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
10d20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20  xFunc, 0, 0, 0, 
10d30 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
10d40 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28  efine VFUNCTION(
10d50 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10d60 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
10d70 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
10d80 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
10d90 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
10da0 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
10db0 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
10dc0 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
10dd0 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
10de0 0a 23 64 65 66 69 6e 65 20 44 46 55 4e 43 54 49  .#define DFUNCTI
10df0 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
10e00 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
10e10 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
10e20 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
10e30 7c 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 5c 0a  |SQLITE_UTF8, \.
10e40 20 20 20 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20     0, 0, xFunc, 
10e50 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
10e60 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50   {0} }.#define P
10e70 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20  URE_DATE(zName, 
10e80 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
10e90 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
10ea0 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  g, SQLITE_FUNC_S
10eb0 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54  LOCHNG|SQLITE_UT
10ec0 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  F8|SQLITE_FUNC_C
10ed0 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76  ONSTANT, \.   (v
10ee0 6f 69 64 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e  oid*)&sqlite3Con
10ef0 66 69 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  fig, 0, xFunc, 0
10f00 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
10f10 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46 55  {0} }.#define FU
10f20 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e  NCTION2(zName, n
10f30 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10f40 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67  xFunc, extraFlag
10f50 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c  s) \.  {nArg,SQL
10f60 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
10f70 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  T|SQLITE_UTF8|(b
10f80 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
10f90 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c  EEDCOLL)|extraFl
10fa0 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f  ags,\.   SQLITE_
10fb0 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
10fc0 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10fd0 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10fe0 20 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46   }.#define STR_F
10ff0 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
11000 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20  Arg, pArg, bNC, 
11010 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
11020 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  , SQLITE_FUNC_SL
11030 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46  OCHNG|SQLITE_UTF
11040 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
11050 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
11060 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e     pArg, 0, xFun
11070 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  c, 0, 0, 0, #zNa
11080 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49  me, }.#define LI
11090 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41  KEFUNC(zName, nA
110a0 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20  rg, arg, flags) 
110b0 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
110c0 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
110d0 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67  SQLITE_UTF8|flag
110e0 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29  s, \.   (void *)
110f0 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63  arg, 0, likeFunc
11100 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  , 0, 0, 0, #zNam
11110 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
11120 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
11130 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c  , nArg, arg, nc,
11140 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20   xStep, xFinal, 
11150 78 56 61 6c 75 65 29 20 5c 0a 20 20 7b 6e 41 72  xValue) \.  {nAr
11160 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
11170 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
11180 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
11190 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
111a0 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c  (arg), 0, xStep,
111b0 78 46 69 6e 61 6c 2c 78 56 61 6c 75 65 2c 30 2c  xFinal,xValue,0,
111c0 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65  #zName, {0}}.#de
111d0 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 32 28  fine AGGREGATE2(
111e0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
111f0 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  , nc, xStep, xFi
11200 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29  nal, extraFlags)
11210 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
11220 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
11230 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
11240 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a  )|extraFlags, \.
11250 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
11260 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53  _PTR(arg), 0, xS
11270 74 65 70 2c 78 46 69 6e 61 6c 2c 78 46 69 6e 61  tep,xFinal,xFina
11280 6c 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d  l,0,#zName, {0}}
11290 0a 23 64 65 66 69 6e 65 20 57 41 47 47 52 45 47  .#define WAGGREG
112a0 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
112b0 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
112c0 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c   xFinal, xValue,
112d0 20 78 49 6e 76 65 72 73 65 2c 20 66 29 20 5c 0a   xInverse, f) \.
112e0 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
112f0 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
11300 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 66  FUNC_NEEDCOLL)|f
11310 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
11320 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30  T_TO_PTR(arg), 0
11330 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78  , xStep,xFinal,x
11340 56 61 6c 75 65 2c 78 49 6e 76 65 72 73 65 2c 23  Value,xInverse,#
11350 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66  zName, {0}}.#def
11360 69 6e 65 20 49 4e 54 45 52 4e 41 4c 5f 46 55 4e  ine INTERNAL_FUN
11370 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
11380 67 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  g, xFunc) \.  {n
11390 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
113a0 5f 49 4e 54 45 52 4e 41 4c 7c 53 51 4c 49 54 45  _INTERNAL|SQLITE
113b0 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e  _UTF8|SQLITE_FUN
113c0 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20  C_CONSTANT, \.  
113d0 20 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c   0, 0, xFunc, 0,
113e0 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b   0, 0, #zName, {
113f0 30 7d 20 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  0} }.../*.** All
11400 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69   current savepoi
11410 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  nts are stored i
11420 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
11430 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73  starting at.** s
11440 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e  qlite3.pSavepoin
11450 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  t. The first ele
11460 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74  ment in the list
11470 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63   is the most rec
11480 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20  ently.** opened 
11490 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70  savepoint. Savep
114a0 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20  oints are added 
114b0 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74  to the list by t
114c0 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61  he vdbe.** OP_Sa
114d0 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
114e0 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
114f0 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61  avepoint {.  cha
11500 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
11510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11520 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61   /* Savepoint na
11530 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74  me (nul-terminat
11540 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ed) */.  i64 nDe
11550 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
11560 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11570 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
11580 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73  ed fk violations
11590 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
115a0 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
115b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
115c0 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
115d0 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76  imm fk. */.  Sav
115e0 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20  epoint *pNext;  
115f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11600 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70   /* Parent savep
11610 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f  oint (if any) */
11620 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
11630 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65  ollowing are use
11640 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20  d as the second 
11650 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
11660 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c  ite3Savepoint(),
11670 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50  .** and as the P
11680 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
11690 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  e OP_Savepoint i
116a0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  nstruction..*/.#
116b0 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
116c0 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64  _BEGIN      0.#d
116d0 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
116e0 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65  RELEASE    1.#de
116f0 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
11700 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a  OLLBACK   2.../*
11710 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20  .** Each SQLite 
11720 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20  module (virtual 
11730 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
11740 29 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  ) is defined by 
11750 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
11760 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
11770 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65  structure, store
11780 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
11790 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68  .aModule.** hash
117a0 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63   table..*/.struc
117b0 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e  t Module {.  con
117c0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
117d0 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20  e *pModule;     
117e0 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f    /* Callback po
117f0 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73  inters */.  cons
11800 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20  t char *zName;  
11810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11820 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20   /* Name passed 
11830 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
11840 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  () */.  void *pA
11850 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ux;             
11860 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11870 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63  pAux passed to c
11880 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
11890 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  /.  void (*xDest
118a0 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  roy)(void *);   
118b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75           /* Modu
118c0 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75  le destructor fu
118d0 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c  nction */.  Tabl
118e0 65 20 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20  e *pEpoTab;     
118f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11900 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61   /* Eponymous ta
11910 62 6c 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64  ble for this mod
11920 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ule */.};../*.**
11930 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
11940 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ut each column o
11950 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69  f an SQL table i
11960 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73  s held in an ins
11970 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
11980 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
11990 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20  truct Column {. 
119a0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
119b0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
119c0 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20  s column, \000, 
119d0 74 68 65 6e 20 74 68 65 20 74 79 70 65 20 2a 2f  then the type */
119e0 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20  .  Expr *pDflt; 
119f0 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76      /* Default v
11a00 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
11a10 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  umn */.  char *z
11a20 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  Coll;     /* Col
11a30 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
11a40 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74    If NULL, use t
11a50 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  he default */.  
11a60 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20  u8 notNull;     
11a70 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20   /* An OE_ code 
11a80 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e  for handling a N
11a90 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
11aa0 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  nt */.  char aff
11ab0 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20  inity;   /* One 
11ac0 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  of the SQLITE_AF
11ad0 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a  F_... values */.
11ae0 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20    u8 szEst;     
11af0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
11b00 73 69 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e  size of value in
11b10 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69   this column. si
11b20 7a 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a  zeof(INT)==1 */.
11b30 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20    u8 colFlags;  
11b40 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72     /* Boolean pr
11b50 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43  operties.  See C
11b60 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20  OLFLAG_ defines 
11b70 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  below */.};../* 
11b80 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
11b90 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61  or Column.colFla
11ba0 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  gs:.*/.#define C
11bb0 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20  OLFLAG_PRIMKEY  
11bc0 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c  0x0001    /* Col
11bd0 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74  umn is part of t
11be0 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a  he primary key *
11bf0 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
11c00 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30  G_HIDDEN   0x000
11c10 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e  2    /* A hidden
11c20 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72   column in a vir
11c30 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  tual table */.#d
11c40 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41  efine COLFLAG_HA
11c50 53 54 59 50 45 20 20 30 78 30 30 30 34 20 20 20  STYPE  0x0004   
11c60 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20 66 6f   /* Type name fo
11c70 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d  llows column nam
11c80 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  e */.#define COL
11c90 46 4c 41 47 5f 55 4e 49 51 55 45 20 20 20 30 78  FLAG_UNIQUE   0x
11ca0 30 30 30 38 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  0008    /* Colum
11cb0 6e 20 64 65 66 20 63 6f 6e 74 61 69 6e 73 20 22  n def contains "
11cc0 55 4e 49 51 55 45 22 20 6f 72 20 22 50 4b 22 20  UNIQUE" or "PK" 
11cd0 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
11ce0 41 47 5f 53 4f 52 54 45 52 52 45 46 20 30 78 30  AG_SORTERREF 0x0
11cf0 30 31 30 20 20 20 2f 2a 20 55 73 65 20 73 6f 72  010   /* Use sor
11d00 74 65 72 2d 72 65 66 73 20 77 69 74 68 20 74 68  ter-refs with th
11d10 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a  is column */../*
11d20 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67  .** A "Collating
11d30 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65   Sequence" is de
11d40 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
11d50 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
11d60 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
11d70 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79  re. Conceptually
11d80 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  , a collating se
11d90 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20  quence consists 
11da0 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a  of a name and.**
11db0 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f   a comparison ro
11dc0 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e  utine that defin
11dd0 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  es the order of 
11de0 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a  that sequence..*
11df0 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e  *.** If CollSeq.
11e00 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74  xCmp is NULL, it
11e10 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a   means that the.
11e20 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
11e30 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e  uence is undefin
11e40 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69  ed.  Indices bui
11e50 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e  lt on an undefin
11e60 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20  ed.** collating 
11e70 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74  sequence may not
11e80 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74   be read or writ
11e90 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ten..*/.struct C
11ea0 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20  ollSeq {.  char 
11eb0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
11ec0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
11ed0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
11ee0 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  ce, UTF-8 encode
11ef0 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  d */.  u8 enc;  
11f00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11f10 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61  Text encoding ha
11f20 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20  ndled by xCmp() 
11f30 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
11f40 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69  ;          /* Fi
11f50 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
11f60 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20  xCmp() */.  int 
11f70 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e  (*xCmp)(void*,in
11f80 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  t, const void*, 
11f90 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
11fa0 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  );.  void (*xDel
11fb0 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65  )(void*);  /* De
11fc0 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73  structor for pUs
11fd0 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
11fe0 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e  A sort order can
11ff0 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f   be either ASC o
12000 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69  r DESC..*/.#defi
12010 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43  ne SQLITE_SO_ASC
12020 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72         0  /* Sor
12030 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
12040 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rder */.#define 
12050 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20  SQLITE_SO_DESC  
12060 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69      1  /* Sort i
12070 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
12080 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
12090 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44  ITE_SO_UNDEFINED
120a0 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f   -1 /* No sort o
120b0 72 64 65 72 20 73 70 65 63 69 66 69 65 64 20 2a  rder specified *
120c0 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20  /../*.** Column 
120d0 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a  affinity types..
120e0 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64  **.** These used
120f0 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69   to have mnemoni
12100 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20  c name like 'i' 
12110 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  for SQLITE_AFF_I
12120 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74  NTEGER and.** 't
12130 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
12140 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63  _TEXT.  But we c
12150 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65  an save a little
12160 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f   space and impro
12170 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20  ve.** the speed 
12180 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62  a little by numb
12190 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73  ering the values
121a0 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a   consecutively..
121b0 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
121c0 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
121d0 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
121e0 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68 61  n with 'A'.  Tha
121f0 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
12200 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
12210 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
12220 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
12230 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
12240 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
12250 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
12260 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
12270 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
12280 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
12290 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
122a0 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
122b0 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
122c0 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
122d0 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
122e0 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20  omparison.  And 
122f0 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73  the BLOB type is
12300 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69   first..*/.#defi
12310 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c  ne SQLITE_AFF_BL
12320 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65 66 69  OB     'A'.#defi
12330 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ne SQLITE_AFF_TE
12340 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66 69  XT     'B'.#defi
12350 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ne SQLITE_AFF_NU
12360 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66 69  MERIC  'C'.#defi
12370 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ne SQLITE_AFF_IN
12380 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66 69  TEGER  'D'.#defi
12390 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ne SQLITE_AFF_RE
123a0 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66  AL     'E'..#def
123b0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d  ine sqlite3IsNum
123c0 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20  ericAffinity(X) 
123d0 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46   ((X)>=SQLITE_AF
123e0 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a  F_NUMERIC)../*.*
123f0 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
12400 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73  _MASK values mas
12410 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69  ks off the signi
12420 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61  ficant bits of a
12430 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61  n.** affinity va
12440 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lue..*/.#define 
12450 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
12460 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20      0x47../*.** 
12470 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76  Additional bit v
12480 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62  alues that can b
12490 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61  e ORed with an a
124a0 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a  ffinity without.
124b0 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20  ** changing the 
124c0 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20  affinity..**.** 
124d0 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55  The SQLITE_NOTNU
124e0 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d  LL flag is a com
124f0 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c  bination of NULL
12500 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c  EQ and JUMPIFNUL
12510 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20  L..** It causes 
12520 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66  an assert() to f
12530 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70  ire if either op
12540 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61  erand to a compa
12550 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f  rison.** operato
12560 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69  r is NULL.  It i
12570 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61  s added to certa
12580 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70  in comparison op
12590 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72  erators to.** pr
125a0 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65  ove that the ope
125b0 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73  rands are always
125c0 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64   NOT NULL..*/.#d
125d0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45  efine SQLITE_KEE
125e0 50 4e 55 4c 4c 20 20 20 20 20 30 78 30 38 20 20  PNULL     0x08  
125f0 2f 2a 20 55 73 65 64 20 62 79 20 76 65 63 74 6f  /* Used by vecto
12600 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64  r == or <> */.#d
12610 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d  efine SQLITE_JUM
12620 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20  PIFNULL   0x10  
12630 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68  /* jumps if eith
12640 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
12650 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
12660 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20  LITE_STOREP2    
12670 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65    0x20  /* Store
12680 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50   result in reg[P
12690 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a  2] rather than j
126a0 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ump */.#define S
126b0 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20  QLITE_NULLEQ    
126c0 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c     0x80  /* NULL
126d0 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65  =NULL */.#define
126e0 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20   SQLITE_NOTNULL 
126f0 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73       0x90  /* As
12700 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e  sert that operan
12710 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c  ds are never NUL
12720 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  L */../*.** An o
12730 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
12740 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  pe is created fo
12750 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74  r each virtual t
12760 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a  able present in.
12770 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
12780 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66  schema..**.** If
12790 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
127a0 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
127b0 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e  then there is on
127c0 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
127d0 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
127e0 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
127f0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71  e connection (sq
12800 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65  lite3*) that use
12810 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20  s the shared.** 
12820 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20  schema. This is 
12830 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74  because each dat
12840 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12850 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77   requires its ow
12860 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74  n unique.** inst
12870 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69  ance of the sqli
12880 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
12890 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
128a0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
128b0 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
128c0 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61  ion. sqlite3_vta
128d0 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e  b* handles can n
128e0 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74  ot be shared bet
128f0 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65  ween.** database
12900 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76   connections, ev
12910 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74  en when the rest
12920 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72   of the in-memor
12930 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73 63  y database.** sc
12940 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
12950 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  as the implement
12960 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72  ation often stor
12970 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  es the database.
12980 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ** connection ha
12990 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69  ndle passed to i
129a0 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65  t via the xConne
129b0 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28  ct() or xCreate(
129c0 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69  ) method.** duri
129d0 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
129e0 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68  n internally. Th
129f0 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  is database conn
12a00 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61  ection handle ma
12a10 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65  y.** then be use
12a20 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c  d by the virtual
12a30 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
12a40 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20  ation to access 
12a50 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77  real tables.** w
12a60 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61  ithin the databa
12a70 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79  se. So that they
12a80 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20   appear as part 
12a90 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a  of the callers.*
12aa0 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
12ab0 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65  hese accesses ne
12ac0 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69  ed to be made vi
12ad0 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  a the same datab
12ae0 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
12af0 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74  n as that used t
12b00 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70  o execute SQL op
12b10 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  erations on the 
12b20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
12b30 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20  *.** All VTable 
12b40 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72  objects that cor
12b50 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e  respond to a sin
12b60 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73  gle table in a s
12b70 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  hared.** databas
12b80 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69  e schema are ini
12b90 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e  tially stored in
12ba0 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70   a linked-list p
12bb0 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20  ointed to by.** 
12bc0 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
12bd0 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  e member variabl
12be0 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
12bf0 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a  onding Table obj
12c00 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ect..** When an 
12c10 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
12c20 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72  ) operation is r
12c30 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73  equired to acces
12c40 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  s the virtual.**
12c50 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63   table, it searc
12c60 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72  hes the list for
12c70 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74   the VTable that
12c80 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
12c90 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
12ca0 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67  connection doing
12cb0 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73   the preparing s
12cc0 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20  o as to use the 
12cd0 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74  correct.** sqlit
12ce0 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
12cf0 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  in the compiled 
12d00 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  query..**.** Whe
12d10 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54  n an in-memory T
12d20 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64  able object is d
12d30 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d  eleted (for exam
12d40 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  ple when the.** 
12d50 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20  schema is being 
12d60 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d  reloaded for som
12d70 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56  e reason), the V
12d80 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72  Table objects ar
12d90 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64  e not.** deleted
12da0 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33   and the sqlite3
12db0 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61  _vtab* handles a
12dc0 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65  re not xDisconne
12dd0 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69  ct()ed.** immedi
12de0 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20  ately. Instead, 
12df0 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66  they are moved f
12e00 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56  rom the Table.pV
12e10 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a  Table list to.**
12e20 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20   another linked 
12e30 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74  list headed by t
12e40 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  he sqlite3.pDisc
12e50 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66  onnect member of
12e60 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
12e70 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74  nding sqlite3 st
12e80 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72  ructure. They ar
12e90 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78  e then deleted/x
12ea0 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20  Disconnected.** 
12eb0 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74  next time a stat
12ec0 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65  ement is prepare
12ed0 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c  d using said sql
12ee0 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64  ite3*. This is d
12ef0 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  one.** to avoid 
12f00 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20  deadlock issues 
12f10 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70  involving multip
12f20 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  le sqlite3.mutex
12f30 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66   mutexes..** Ref
12f40 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61  er to comments a
12f50 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71  bove function sq
12f60 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
12f70 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20  ist() for an.** 
12f80 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74  explanation as t
12f90 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65  o why it is safe
12fa0 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79   to add an entry
12fb0 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70   to an sqlite3.p
12fc0 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69  Disconnect.** li
12fd0 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69  st without holdi
12fe0 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
12ff0 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74  ding sqlite3.mut
13000 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20  ex mutex..**.** 
13010 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f  The memory for o
13020 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74  bjects of this t
13030 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c  ype is always al
13040 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73 71  located by.** sq
13050 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c  lite3DbMalloc(),
13060 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65   using the conne
13070 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f  ction handle sto
13080 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62  red in VTable.db
13090 20 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74   as.** the first
130a0 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
130b0 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20  ruct VTable {.  
130c0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
130d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
130e0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
130f0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
13100 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
13110 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20   Module *pMod;  
13120 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
13130 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20  inter to module 
13140 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
13150 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /.  sqlite3_vtab
13160 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a   *pVtab;      /*
13170 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62   Pointer to vtab
13180 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69   instance */.  i
13190 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
131a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
131b0 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
131c0 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
131d0 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72   */.  u8 bConstr
131e0 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  aint;           
131f0 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
13200 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f  raints are suppo
13210 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  rted */.  int iS
13220 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
13230 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20      /* Depth of 
13240 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74  the SAVEPOINT st
13250 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ack */.  VTable 
13260 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
13270 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
13280 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61  nked list (see a
13290 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  bove) */.};../*.
132a0 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f  ** The schema fo
132b0 72 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65  r each SQL table
132c0 20 61 6e 64 20 76 69 65 77 20 69 73 20 72 65 70   and view is rep
132d0 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
132e0 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74  ry.** by an inst
132f0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
13300 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
13310 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65  .*/.struct Table
13320 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
13330 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
13340 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  e of the table o
13350 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75  r view */.  Colu
13360 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20  mn *aCol;       
13370 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
13380 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
13390 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49  n */.  Index *pI
133a0 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c  ndex;       /* L
133b0 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78  ist of SQL index
133c0 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65  es on this table
133d0 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  . */.  Select *p
133e0 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e  Select;     /* N
133f0 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20  ULL for tables. 
13400 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e   Points to defin
13410 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e  ition if a view.
13420 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65   */.  FKey *pFKe
13430 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  y;         /* Li
13440 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c  nked list of all
13450 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e   foreign keys in
13460 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
13470 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
13480 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
13490 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
134a0 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
134b0 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69  lumn */.  ExprLi
134c0 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f  st *pCheck;    /
134d0 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73  * All CHECK cons
134e0 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20  traints */.     
134f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13500 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20    /*   ... also 
13510 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e  used as column n
13520 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49  ame list in a VI
13530 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  EW */.  int tnum
13540 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
13550 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20  Root BTree page 
13560 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a  for this table *
13570 2f 0a 20 20 75 33 32 20 6e 54 61 62 52 65 66 3b  /.  u32 nTabRef;
13580 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13590 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
135a0 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a  o this Table */.
135b0 20 20 75 33 32 20 74 61 62 46 6c 61 67 73 3b 20    u32 tabFlags; 
135c0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
135d0 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  f TF_* values */
135e0 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20  .  i16 iPKey;   
135f0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
13600 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20  t negative, use 
13610 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74  aCol[iPKey] as t
13620 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31  he rowid */.  i1
13630 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  6 nCol;         
13640 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13650 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
13660 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73  table */.  LogEs
13670 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  t nRowLogEst;   
13680 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77  /* Estimated row
13690 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f  s in table - fro
136a0 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  m sqlite_stat1 t
136b0 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  able */.  LogEst
136c0 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f   szTabRow;     /
136d0 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
136e0 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72   of each table r
136f0 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23  ow in bytes */.#
13700 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
13710 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c  BLE_COSTMULT.  L
13720 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20  ogEst costMult; 
13730 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74      /* Cost mult
13740 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67  iplier for using
13750 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23   this table */.#
13760 65 6e 64 69 66 0a 20 20 75 38 20 6b 65 79 43 6f  endif.  u8 keyCo
13770 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
13780 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61  What to do in ca
13790 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73  se of uniqueness
137a0 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b   conflict on iPK
137b0 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ey */.#ifndef SQ
137c0 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
137d0 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f  ABLE.  int addCo
137e0 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f  lOffset;    /* O
137f0 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20  ffset in CREATE 
13800 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64  TABLE stmt to ad
13810 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a  d a new column *
13820 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
13830 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
13840 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
13850 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20  nModuleArg;     
13860 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
13870 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d  guments to the m
13880 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  odule */.  char 
13890 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20  **azModuleArg;  
138a0 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20  /* 0: module 1: 
138b0 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e  schema 2: vtab n
138c0 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a  ame 3...: args *
138d0 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  /.  VTable *pVTa
138e0 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74  ble;     /* List
138f0 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63   of VTable objec
13900 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ts. */.#endif.  
13910 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
13920 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  r;   /* List of 
13930 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20  triggers stored 
13940 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20  in pSchema */.  
13950 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
13960 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74       /* Schema t
13970 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69  hat contains thi
13980 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62  s table */.  Tab
13990 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b  le *pNextZombie;
139a0 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65    /* Next on the
139b0 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61   Parse.pZombieTa
139c0 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  b list */.};../*
139d0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
139e0 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62  es for Table.tab
139f0 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f  Flags..**.** TF_
13a00 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65  OOOHidden applie
13a10 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76  s to tables or v
13a20 69 65 77 20 74 68 61 74 20 68 61 76 65 20 68 69  iew that have hi
13a30 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61  dden columns tha
13a40 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65  t are.** followe
13a50 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20  d by non-hidden 
13a60 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c  columns.  Exampl
13a70 65 3a 20 20 22 43 52 45 41 54 45 20 56 49 52 54  e:  "CREATE VIRT
13a80 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e  UAL TABLE x USIN
13a90 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44  G.** vtab1(a HID
13aa0 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63  DEN, b);".  Sinc
13ab0 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68  e "b" is a non-h
13ac0 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74  idden column but
13ad0 20 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a   "a" is hidden,.
13ae0 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64  ** the TF_OOOHid
13af0 64 65 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f  den attribute wo
13b00 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69  uld apply in thi
13b10 73 20 63 61 73 65 2e 20 20 53 75 63 68 20 74 61  s case.  Such ta
13b20 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20  bles require.** 
13b30 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67  special handling
13b40 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70   during INSERT p
13b50 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64  rocessing..*/.#d
13b60 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c  efine TF_Readonl
13b70 79 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20  y        0x0001 
13b80 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20     /* Read-only 
13b90 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a  system table */.
13ba0 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d  #define TF_Ephem
13bb0 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 30 30  eral       0x000
13bc0 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d  2    /* An ephem
13bd0 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  eral table */.#d
13be0 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d  efine TF_HasPrim
13bf0 61 72 79 4b 65 79 20 20 20 30 78 30 30 30 34 20  aryKey   0x0004 
13c00 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
13c10 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
13c20 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
13c30 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 30  increment   0x00
13c40 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72  08    /* Integer
13c50 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20   primary key is 
13c60 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f  autoincrement */
13c70 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 53  .#define TF_HasS
13c80 74 61 74 31 20 20 20 20 20 20 20 20 30 78 30 30  tat1        0x00
13c90 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67  10    /* nRowLog
13ca0 45 73 74 20 73 65 74 20 66 72 6f 6d 20 73 71 6c  Est set from sql
13cb0 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65  ite_stat1 */.#de
13cc0 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52  fine TF_WithoutR
13cd0 6f 77 69 64 20 20 20 20 30 78 30 30 32 30 20 20  owid    0x0020  
13ce0 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20    /* No rowid.  
13cf0 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74  PRIMARY KEY is t
13d00 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  he key */.#defin
13d10 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f  e TF_NoVisibleRo
13d20 77 69 64 20 20 30 78 30 30 34 30 20 20 20 20 2f  wid  0x0040    /
13d30 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c  * No user-visibl
13d40 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e  e "rowid" column
13d50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f   */.#define TF_O
13d60 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30  OOHidden       0
13d70 78 30 30 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d  x0080    /* Out-
13d80 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20  of-Order hidden 
13d90 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69  columns */.#defi
13da0 6e 65 20 54 46 5f 53 74 61 74 73 55 73 65 64 20  ne TF_StatsUsed 
13db0 20 20 20 20 20 20 30 78 30 31 30 30 20 20 20 20        0x0100    
13dc0 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e 65 72  /* Query planner
13dd0 20 64 65 63 69 73 69 6f 6e 73 20 61 66 66 65 63   decisions affec
13de0 74 65 64 20 62 79 0a 20 20 20 20 20 20 20 20 20  ted by.         
13df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e00 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 49              ** I
13e10 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74  ndex.aiRowLogEst
13e20 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65  [] values */.#de
13e30 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75  fine TF_HasNotNu
13e40 6c 6c 20 20 20 20 20 20 30 78 30 32 30 30 20 20  ll      0x0200  
13e50 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f    /* Contains NO
13e60 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
13e70 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ts */.#define TF
13e80 5f 53 68 61 64 6f 77 20 20 20 20 20 20 20 20 20  _Shadow         
13e90 20 30 78 30 34 30 30 20 20 20 20 2f 2a 20 54 72   0x0400    /* Tr
13ea0 75 65 20 66 6f 72 20 61 20 73 68 61 64 6f 77 20  ue for a shadow 
13eb0 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  table */../*.** 
13ec0 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74  Test to see whet
13ed0 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62  her or not a tab
13ee0 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20  le is a virtual 
13ef0 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a  table.  This is.
13f00 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63  ** done as a mac
13f10 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  ro so that it wi
13f20 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20  ll be optimized 
13f30 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c  out when virtual
13f40 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72  .** table suppor
13f50 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  t is omitted fro
13f60 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a  m the build..*/.
13f70 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
13f80 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
13f90 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
13fa0 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 58  tual(X)      ((X
13fb0 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23  )->nModuleArg).#
13fc0 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
13fd0 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
13fe0 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
13ff0 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
14000 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e  mine if a column
14010 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f   is hidden.  IsO
14020 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
14030 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f  umn().** only wo
14040 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74  rks for non-virt
14050 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69  ual tables (ordi
14060 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20  nary tables and 
14070 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a  views) and is.**
14080 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e   always false un
14090 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42  less SQLITE_ENAB
140a0 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e  LE_HIDDEN_COLUMN
140b0 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54  S is defined.  T
140c0 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f  he.** IsHiddenCo
140d0 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20  lumn() macro is 
140e0 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e  general purpose.
140f0 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
14100 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
14110 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20  DDEN_COLUMNS).# 
14120 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
14130 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20  Column(X)       
14140 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67    (((X)->colFlag
14150 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  s & COLFLAG_HIDD
14160 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e  EN)!=0).#  defin
14170 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64  e IsOrdinaryHidd
14180 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58  enColumn(X) (((X
14190 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
141a0 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
141b0 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64  ).#elif !defined
141c0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
141d0 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65  TUALTABLE).#  de
141e0 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
141f0 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28  umn(X)         (
14200 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
14210 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
14220 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
14230 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
14240 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65  olumn(X) 0.#else
14250 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
14260 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20  denColumn(X)    
14270 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65       0.#  define
14280 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
14290 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e  nColumn(X) 0.#en
142a0 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68  dif.../* Does th
142b0 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20 72  e table have a r
142c0 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
142d0 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20 20  HasRowid(X)     
142e0 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
142f0 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  & TF_WithoutRowi
14300 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56  d)==0).#define V
14310 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28  isibleRowid(X) (
14320 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
14330 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77   TF_NoVisibleRow
14340 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45  id)==0)../*.** E
14350 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ach foreign key 
14360 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e  constraint is an
14370 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
14380 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
14390 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f  ture..**.** A fo
143a0 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73  reign key is ass
143b0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f  ociated with two
143c0 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66   tables.  The "f
143d0 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a  rom" table is.**
143e0 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
143f0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46  contains the REF
14400 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74  ERENCES clause t
14410 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20  hat creates the 
14420 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20  foreign.** key. 
14430 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20   The "to" table 
14440 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  is the table tha
14450 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68  t is named in th
14460 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
14470 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72  use..** Consider
14480 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a   this example:.*
14490 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
144a0 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20  TABLE ex1(.**   
144b0 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52      a INTEGER PR
144c0 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20  IMARY KEY,.**   
144d0 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f      b INTEGER CO
144e0 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46  NSTRAINT fk1 REF
144f0 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a  ERENCES ex2(x).*
14500 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46  *     );.**.** F
14510 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22  or foreign key "
14520 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74  fk1", the from-t
14530 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e  able is "ex1" an
14540 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  d the to-table i
14550 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69  s "ex2"..** Equi
14560 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a  valent names:.**
14570 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62  .**     from-tab
14580 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c  le == child-tabl
14590 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61  e.**       to-ta
145a0 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61  ble == parent-ta
145b0 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52  ble.**.** Each R
145c0 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
145d0 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e   generates an in
145e0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
145f0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
14600 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74  e.** which is at
14610 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72  tached to the fr
14620 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74  om-table.  The t
14630 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74  o-table need not
14640 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74   exist when.** t
14650 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
14660 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65   created.  The e
14670 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20  xistence of the 
14680 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20  to-table is not 
14690 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  checked..**.** T
146a0 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70  he list of all p
146b0 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64  arents for child
146c0 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64   Table X is held
146d0 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a   at X.pFKey..**.
146e0 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c  ** A list of all
146f0 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20   children for a 
14700 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77  table named Z (w
14710 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65  hich might not e
14720 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73  ven exist).** is
14730 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e   held in Schema.
14740 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61 20  fkeyHash with a 
14750 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a  hash key of Z..*
14760 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a  /.struct FKey {.
14770 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20    Table *pFrom; 
14780 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e      /* Table con
14790 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45  taining the REFE
147a0 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61  RENCES clause (a
147b0 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20  ka: Child) */.  
147c0 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b  FKey *pNextFrom;
147d0 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77    /* Next FKey w
147e0 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20  ith the same in 
147f0 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65  pFrom. Next pare
14800 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20  nt of pFrom */. 
14810 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20   char *zTo;     
14820 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61     /* Name of ta
14830 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79  ble that the key
14840 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a   points to (aka:
14850 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b   Parent) */.  FK
14860 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20  ey *pNextTo;    
14870 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68 65  /* Next with the
14880 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20   same zTo. Next 
14890 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f  child of zTo. */
148a0 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f  .  FKey *pPrevTo
148b0 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73  ;    /* Previous
148c0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a   with the same z
148d0 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c  To */.  int nCol
148e0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
148f0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
14900 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20  n this key */.  
14910 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32  /* EV: R-30323-2
14920 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44  1917 */.  u8 isD
14930 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f  eferred;       /
14940 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
14950 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73  aint checking is
14960 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43   deferred till C
14970 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41  OMMIT */.  u8 aA
14980 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20  ction[2];       
14990 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e   /* ON DELETE an
149a0 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69  d ON UPDATE acti
149b0 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ons, respectivel
149c0 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  y */.  Trigger *
149d0 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20  apTrigger[2];/* 
149e0 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63  Triggers for aAc
149f0 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a  tion[] actions *
14a00 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d  /.  struct sColM
14a10 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70  ap {      /* Map
14a20 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  ping of columns 
14a30 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75  in pFrom to colu
14a40 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20  mns in zTo */.  
14a50 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20    int iFrom;    
14a60 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
14a70 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46   of column in pF
14a80 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  rom */.    char 
14a90 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  *zCol;          
14aa0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75   /* Name of colu
14ab0 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e  mn in zTo.  If N
14ac0 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20  ULL use PRIMARY 
14ad0 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b  KEY */.  } aCol[
14ae0 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  1];            /
14af0 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
14b00 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c  each of nCol col
14b10 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  umns */.};../*.*
14b20 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  * SQLite support
14b30 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74  s many different
14b40 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65   ways to resolve
14b50 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a   a constraint.**
14b60 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43   error.  ROLLBAC
14b70 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  K processing mea
14b80 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72  ns that a constr
14b90 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a  aint violation.*
14ba0 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65  * causes the ope
14bb0 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
14bc0 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f  s to fail and fo
14bd0 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  r the current tr
14be0 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20  ansaction.** to 
14bf0 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  be rolled back. 
14c00 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e   ABORT processin
14c10 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72  g means the oper
14c20 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
14c30 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e  .** fails and an
14c40 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  y prior changes 
14c50 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70  from that one op
14c60 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b  eration are back
14c70 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74  ed out,.** but t
14c80 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
14c90 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63  s not rolled bac
14ca0 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73  k.  FAIL process
14cb0 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a  ing means that.*
14cc0 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  * the operation 
14cd0 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70  in progress stop
14ce0 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e  s and returns an
14cf0 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75   error code.  Bu
14d00 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67  t prior.** chang
14d10 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61  es due to the sa
14d20 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  me operation are
14d30 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20   not backed out 
14d40 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a  and no rollback.
14d50 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f  ** occurs.  IGNO
14d60 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  RE means that th
14d70 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77  e particular row
14d80 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65   that caused the
14d90 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
14da0 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65  rror is not inse
14db0 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e  rted or updated.
14dc0 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
14dd0 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
14de0 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  ror.** is return
14df0 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61  ed.  REPLACE mea
14e00 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74  ns that preexist
14e10 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77  ing database row
14e20 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a  s that caused.**
14e30 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
14e40 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61  aint violation a
14e50 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68  re removed so th
14e60 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72  at the new inser
14e70 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63  t or.** update c
14e80 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f  an proceed.  Pro
14e90 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
14ea0 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69  s and no error i
14eb0 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a  s reported..**.*
14ec0 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e  * RESTRICT, SETN
14ed0 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45  ULL, and CASCADE
14ee0 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f   actions apply o
14ef0 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b  nly to foreign k
14f00 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54  eys..** RESTRICT
14f10 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
14f20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49  ABORT for IMMEDI
14f30 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ATE foreign keys
14f40 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65   and the.** same
14f50 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72   as ROLLBACK for
14f60 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20   DEFERRED keys. 
14f70 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74   SETNULL means t
14f80 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  hat the foreign.
14f90 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f  ** key is set to
14fa0 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20   NULL.  CASCADE 
14fb0 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c  means that a DEL
14fc0 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66  ETE or UPDATE of
14fd0 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63   the.** referenc
14fe0 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20  ed table row is 
14ff0 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20  propagated into 
15000 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c  the row that hol
15010 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67  ds the.** foreig
15020 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  n key..**.** The
15030 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f   following symbo
15040 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75  lic values are u
15050 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68  sed to record wh
15060 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61  ich type.** of a
15070 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a  ction to take..*
15080 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e  /.#define OE_Non
15090 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65  e     0   /* The
150a0 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61  re is no constra
150b0 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a  int to check */.
150c0 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62  #define OE_Rollb
150d0 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20  ack 1   /* Fail 
150e0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e  the operation an
150f0 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  d rollback the t
15100 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
15110 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20  efine OE_Abort  
15120 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75    2   /* Back ou
15130 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f  t changes but do
15140 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61   no rollback tra
15150 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
15160 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20  ine OE_Fail     
15170 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20  3   /* Stop the 
15180 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65  operation but le
15190 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68  ave all prior ch
151a0 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
151b0 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20   OE_Ignore   4  
151c0 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65   /* Ignore the e
151d0 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20  rror. Do not do 
151e0 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50  the INSERT or UP
151f0 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
15200 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20  OE_Replace  5   
15210 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69  /* Delete existi
15220 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20  ng record, then 
15230 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  do INSERT or UPD
15240 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
15250 45 5f 55 70 64 61 74 65 20 20 20 36 20 20 20 2f  E_Update   6   /
15260 2a 20 50 72 6f 63 65 73 73 20 61 73 20 61 20 44  * Process as a D
15270 4f 20 55 50 44 41 54 45 20 69 6e 20 61 6e 20 75  O UPDATE in an u
15280 70 73 65 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65  psert */.#define
15290 20 4f 45 5f 52 65 73 74 72 69 63 74 20 37 20 20   OE_Restrict 7  
152a0 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72   /* OE_Abort for
152b0 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52   IMMEDIATE, OE_R
152c0 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45  ollback for DEFE
152d0 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  RRED */.#define 
152e0 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 38 20 20 20  OE_SetNull  8   
152f0 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
15300 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
15310 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
15320 4f 45 5f 53 65 74 44 66 6c 74 20 20 39 20 20 20  OE_SetDflt  9   
15330 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
15340 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
15350 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  its default */.#
15360 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64  define OE_Cascad
15370 65 20 20 31 30 20 20 2f 2a 20 43 61 73 63 61 64  e  10  /* Cascad
15380 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f  e the changes */
15390 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61  .#define OE_Defa
153a0 75 6c 74 20 20 31 31 20 20 2f 2a 20 44 6f 20 77  ult  11  /* Do w
153b0 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61  hatever the defa
153c0 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f  ult action is */
153d0 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  .../*.** An inst
153e0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
153f0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
15400 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
15410 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
15420 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62  nt to sqlite3Vdb
15430 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20  eKeyCompare and 
15440 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72  is used to contr
15450 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  ol the.** compar
15460 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20  ison of the two 
15470 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a  index keys..**.*
15480 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72  * Note that aSor
15490 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f  tOrder[] and aCo
154a0 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64  ll[] have nField
154b0 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65  +1 slots.  There
154c0 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73  .** are nField s
154d0 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c  lots for the col
154e0 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78  umns of an index
154f0 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20   then one extra 
15500 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20  slot.** for the 
15510 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e 64  rowid at the end
15520 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49  ..*/.struct KeyI
15530 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66  nfo {.  u32 nRef
15540 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
15550 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e  umber of referen
15560 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49  ces to this KeyI
15570 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  nfo object */.  
15580 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
15590 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
155a0 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68  ding - one of th
155b0 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61  e SQLITE_UTF* va
155c0 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b  lues */.  u16 nK
155d0 65 79 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a  eyField;      /*
155e0 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63   Number of key c
155f0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e  olumns in the in
15600 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 41 6c  dex */.  u16 nAl
15610 6c 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20  lField;      /* 
15620 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69  Total columns, i
15630 6e 63 6c 75 64 69 6e 67 20 6b 65 79 20 70 6c 75  ncluding key plu
15640 73 20 6f 74 68 65 72 73 20 2a 2f 0a 20 20 73 71  s others */.  sq
15650 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
15660 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
15670 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
15680 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72    u8 *aSortOrder
15690 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72  ;     /* Sort or
156a0 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  der for each col
156b0 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  umn. */.  CollSe
156c0 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a  q *aColl[1];  /*
156d0 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
156e0 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72  nce for each ter
156f0 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a  m of the key */.
15700 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f  };../*.** This o
15710 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65  bject holds a re
15720 63 6f 72 64 20 77 68 69 63 68 20 68 61 73 20 62  cord which has b
15730 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69  een parsed out i
15740 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a  nto individual.*
15750 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68  * fields, for th
15760 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f  e purposes of do
15770 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e  ing a comparison
15780 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64  ..**.** A record
15790 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   is an object th
157a0 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  at contains one 
157b0 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f  or more fields o
157c0 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72  f data..** Recor
157d0 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  ds are used to s
157e0 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  tore the content
157f0 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20   of a table row 
15800 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  and to store.** 
15810 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e  the key of an in
15820 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63  dex.  A blob enc
15830 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72  oding of a recor
15840 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a  d is created by.
15850 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  ** the OP_MakeRe
15860 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74  cord opcode of t
15870 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64  he VDBE and is d
15880 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74  isassembled by t
15890 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he.** OP_Column 
158a0 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e  opcode..**.** An
158b0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
158c0 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20  s object serves 
158d0 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64  as a "key" for d
158e0 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e  oing a search on
158f0 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74  .** an index b+t
15900 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66  ree. The goal of
15910 20 74 68 65 20 73 65 61 72 63 68 20 69 73 20 74   the search is t
15920 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79  o find the entry
15930 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73   that.** is clos
15940 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65  ed to the key de
15950 73 63 72 69 62 65 64 20 62 79 20 74 68 69 73 20  scribed by this 
15960 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62  object.  This ob
15970 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a  ject might hold.
15980 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69 78  ** just a prefix
15990 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68   of the key.  Th
159a0 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  e number of fiel
159b0 64 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a  ds is given by.*
159c0 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  * pKeyInfo->nFie
159d0 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31  ld..**.** The r1
159e0 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61   and r2 fields a
159f0 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f  re the values to
15a00 20 72 65 74 75 72 6e 20 69 66 20 74 68 69 73 20   return if this 
15a10 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
15a20 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74  .** or greater t
15a30 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65  han a key in the
15a40 20 62 74 72 65 65 2c 20 72 65 73 70 65 63 74 69   btree, respecti
15a50 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65  vely.  These are
15a60 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20   normally.** -1 
15a70 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69 76  and +1 respectiv
15a80 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62  ely, but might b
15a90 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31  e inverted to +1
15aa0 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62   and -1 if the b
15ab0 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44  -tree.** is in D
15ac0 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a  ESC order..**.**
15ad0 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69   The key compari
15ae0 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63  son functions ac
15af0 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65  tually return de
15b00 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68  fault_rc when th
15b10 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71  ey find.** an eq
15b20 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  uals comparison.
15b30 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e    default_rc can
15b40 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31   be -1, 0, or +1
15b50 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 0a  .  If there are.
15b60 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72  ** multiple entr
15b70 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65  ies in the b-tre
15b80 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e with the same 
15b90 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c  key (when only l
15ba0 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65  ooking.** at the
15bb0 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d   first pKeyInfo-
15bc0 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20  >nFields,) then 
15bd0 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62  default_rc can b
15be0 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a  e set to -1 to.*
15bf0 2a 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72  * cause the sear
15c00 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  ch to find the l
15c10 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31  ast match, or +1
15c20 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 73 65   to cause the se
15c30 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20  arch to.** find 
15c40 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e  the first match.
15c50 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63  .**.** The key c
15c60 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69  omparison functi
15c70 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53  ons will set eqS
15c80 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74  een to true if t
15c90 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20  hey ever.** get 
15ca0 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74  and equal result
15cb0 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  s when comparing
15cc0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
15cd0 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f  to a b-tree reco
15ce0 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61  rd..** When defa
15cf0 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73  ult_rc!=0, the s
15d00 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20  earch might end 
15d10 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64  up on the record
15d20 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20   immediately.** 
15d30 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74  before the first
15d40 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69   match or immedi
15d50 61 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20  ately after the 
15d60 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65  last match.  The
15d70 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64  .** eqSeen field
15d80 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77   will indicate w
15d90 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e  hether or not an
15da0 20 65 78 61 63 74 20 6d 61 74 63 68 20 65 78 69   exact match exi
15db0 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d  sts in the.** b-
15dc0 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tree..*/.struct 
15dd0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b  UnpackedRecord {
15de0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
15df0 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  Info;  /* Collat
15e00 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64  ion and sort-ord
15e10 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a  er information *
15e20 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20  /.  Mem *aMem;  
15e30 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
15e40 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c  s */.  u16 nFiel
15e50 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
15e60 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
15e70 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20  in apMem[] */.  
15e80 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20  i8 default_rc;  
15e90 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f      /* Compariso
15ea0 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73  n result if keys
15eb0 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20   are equal */.  
15ec0 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  u8 errCode;     
15ed0 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74      /* Error det
15ee0 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72 64  ected by xRecord
15ef0 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54  Compare (CORRUPT
15f00 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20   or NOMEM) */.  
15f10 69 38 20 72 31 3b 20 20 20 20 20 20 20 20 20 20  i8 r1;          
15f20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
15f30 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3c  return if (lhs <
15f40 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32   rhs) */.  i8 r2
15f50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
15f60 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
15f70 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29  n if (lhs > rhs)
15f80 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b   */.  u8 eqSeen;
15f90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
15fa0 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79  e if an equality
15fb0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20   comparison has 
15fc0 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a  been seen */.};.
15fd0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
15fe0 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73   index is repres
15ff0 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
16000 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
16010 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
16020 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
16030 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20  .** The columns 
16040 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
16050 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65  t are to be inde
16060 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65  xed are describe
16070 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f  d.** by the aiCo
16080 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20  lumn[] field of 
16090 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
160a0 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75   For example, su
160b0 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65  ppose.** we have
160c0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
160d0 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a  able and index:.
160e0 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
160f0 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e   TABLE Ex1(c1 in
16100 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65  t, c2 int, c3 te
16110 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41  xt);.**     CREA
16120 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20  TE INDEX Ex2 ON 
16130 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a  Ex1(c3,c1);.**.*
16140 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73  * In the Table s
16150 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
16160 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33  ing Ex1, nCol==3
16170 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61   because there a
16180 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75  re.** three colu
16190 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
161a0 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20  .  In the Index 
161b0 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
161c0 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f  bing.** Ex2, nCo
161d0 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20  lumn==2 since 2 
161e0 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73  of the 3 columns
161f0 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65   of Ex1 are inde
16200 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75  xed..** The valu
16210 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73  e of aiColumn is
16220 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75   {2, 0}.  aiColu
16230 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65  mn[0]==2 because
16240 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f   the.** first co
16250 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
16260 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69  ed (c3) has an i
16270 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31  ndex of 2 in Ex1
16280 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20  .aCol[]..** The 
16290 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f  second column to
162a0 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29   be indexed (c1)
162b0 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
162c0 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f   0 in.** Ex1.aCo
162d0 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61  l[], hence Ex2.a
162e0 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a  iColumn[1]==0..*
162f0 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f  *.** The Index.o
16300 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74  nError field det
16310 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
16320 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78  or not the index
16330 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75  ed columns.** mu
16340 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64  st be unique and
16350 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74   what to do if t
16360 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68  hey are not.  Wh
16370 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  en Index.onError
16380 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20  =OE_None,.** it 
16390 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f  means this is no
163a0 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  t a unique index
163b0 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20  .  Otherwise it 
163c0 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  is a unique inde
163d0 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c  x.** and the val
163e0 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72  ue of Index.onEr
163f0 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65  ror indicate the
16400 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20   which conflict 
16410 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c  resolution.** al
16420 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f  gorithm to emplo
16430 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74  y whenever an at
16440 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
16450 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e   insert a non-un
16460 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e  ique.** element.
16470 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72  .**.** While par
16480 73 69 6e 67 20 61 20 43 52 45 41 54 45 20 54 41  sing a CREATE TA
16490 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e  BLE or CREATE IN
164a0 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  DEX statement in
164b0 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e   order to.** gen
164c0 65 72 61 74 65 20 56 44 42 45 20 63 6f 64 65 20  erate VDBE code 
164d0 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70  (as opposed to p
164e0 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20  arsing one read 
164f0 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d  from an sqlite_m
16500 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61  aster.** table a
16510 73 20 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e  s part of parsin
16520 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61  g an existing da
16530 74 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20  tabase schema), 
16540 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e  transient instan
16550 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  ces.** of this s
16560 74 72 75 63 74 75 72 65 20 6d 61 79 20 62 65 20  tructure may be 
16570 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73  created. In this
16580 20 63 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e   case the Index.
16590 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73  tnum variable is
165a0 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
165b0 65 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  e the address of
165c0 20 61 20 56 44 42 45 20 69 6e 73 74 72 75 63 74   a VDBE instruct
165d0 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62  ion, not a datab
165e0 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62  ase page.** numb
165f0 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20  er (it cannot - 
16600 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67  the database pag
16610 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74  e is not allocat
16620 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42  ed until the VDB
16630 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20  E.** program is 
16640 65 78 65 63 75 74 65 64 29 2e 20 53 65 65 20 63  executed). See c
16650 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52  onvertToWithoutR
16660 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20  owidTable() for 
16670 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75  details..*/.stru
16680 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61  ct Index {.  cha
16690 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
166a0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
166b0 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
166c0 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20   i16 *aiColumn; 
166d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
166e0 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  ch columns are u
166f0 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65  sed by this inde
16700 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a  x.  1st is 0 */.
16710 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c    LogEst *aiRowL
16720 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72  ogEst;     /* Fr
16730 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e  om ANALYZE: Est.
16740 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62   rows selected b
16750 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  y each column */
16760 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65  .  Table *pTable
16770 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
16780 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69  he SQL table bei
16790 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20  ng indexed */.  
167a0 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
167b0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69           /* Stri
167c0 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
167d0 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
167e0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
167f0 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ex *pNext;      
16800 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78        /* The nex
16810 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74  t index associat
16820 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ed with the same
16830 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65   table */.  Sche
16840 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
16850 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
16860 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69  ontaining this i
16870 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53  ndex */.  u8 *aS
16880 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
16890 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63     /* for each c
168a0 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53  olumn: True==DES
168b0 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f  C, False==ASC */
168c0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a  .  const char **
168d0 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41  azColl;     /* A
168e0 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f  rray of collatio
168f0 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73  n sequence names
16900 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20   for index */.  
16910 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68  Expr *pPartIdxWh
16920 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52  ere;     /* WHER
16930 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72  E clause for par
16940 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a  tial indices */.
16950 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c    ExprList *aCol
16960 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f  Expr;      /* Co
16970 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73  lumn expressions
16980 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
16990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
169a0 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69  * DB Page contai
169b0 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69  ning root of thi
169c0 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67  s index */.  Log
169d0 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20  Est szIdxRow;   
169e0 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
169f0 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73  ed average row s
16a00 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ize in bytes */.
16a10 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20    u16 nKeyCol;  
16a20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
16a30 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
16a40 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20  forming the key 
16a50 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e  */.  u16 nColumn
16a60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16a70 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
16a80 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ns stored in the
16a90 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f   index */.  u8 o
16aa0 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20  nError;         
16ab0 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74       /* OE_Abort
16ac0 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f  , OE_Ignore, OE_
16ad0 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e  Replace, or OE_N
16ae0 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  one */.  unsigne
16af0 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20  d idxType:2;    
16b00 20 20 2f 2a 20 30 3a 4e 6f 72 6d 61 6c 20 31 3a    /* 0:Normal 1:
16b10 55 4e 49 51 55 45 2c 20 32 3a 50 52 49 4d 41 52  UNIQUE, 2:PRIMAR
16b20 59 20 4b 45 59 2c 20 33 3a 49 50 4b 20 2a 2f 0a  Y KEY, 3:IPK */.
16b30 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72    unsigned bUnor
16b40 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73  dered:1;   /* Us
16b50 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72  e this index for
16b60 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65   == or IN querie
16b70 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69  s only */.  unsi
16b80 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c  gned uniqNotNull
16b90 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
16ba0 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e  UNIQUE and NOT N
16bb0 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75  ULL for all colu
16bc0 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  mns */.  unsigne
16bd0 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20  d isResized:1;  
16be0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
16bf0 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29  izeIndexObject()
16c00 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
16c10 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
16c20 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f  sCovering:1;   /
16c30 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69  * True if this i
16c40 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  s a covering ind
16c50 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ex */.  unsigned
16c60 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20   noSkipScan:1;  
16c70 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74   /* Do not try t
16c80 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20  o use skip-scan 
16c90 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73  if true */.  uns
16ca0 69 67 6e 65 64 20 68 61 73 53 74 61 74 31 3a 31  igned hasStat1:1
16cb0 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f  ;     /* aiRowLo
16cc0 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f 6d 65  gEst values come
16cd0 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
16ce0 74 31 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  t1 */.  unsigned
16cf0 20 62 4e 6f 51 75 65 72 79 3a 31 3b 20 20 20 20   bNoQuery:1;    
16d00 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 74   /* Do not use t
16d10 68 69 73 20 69 6e 64 65 78 20 74 6f 20 6f 70 74  his index to opt
16d20 69 6d 69 7a 65 20 71 75 65 72 69 65 73 20 2a 2f  imize queries */
16d30 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 41 73 63  .  unsigned bAsc
16d40 4b 65 79 42 75 67 3a 31 3b 20 20 20 2f 2a 20 54  KeyBug:1;   /* T
16d50 72 75 65 20 69 66 20 74 68 65 20 62 62 61 37 62  rue if the bba7b
16d60 36 39 66 39 38 34 39 62 35 62 66 20 62 75 67 20  69f9849b5bf bug 
16d70 61 70 70 6c 69 65 73 20 2a 2f 0a 23 69 66 64 65  applies */.#ifde
16d80 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
16d90 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20  STAT3_OR_STAT4. 
16da0 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20   int nSample;   
16db0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
16dc0 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
16dd0 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a  in aSample[] */.
16de0 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c    int nSampleCol
16df0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69  ;          /* Si
16e00 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c  ze of IndexSampl
16e10 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20  e.anEq[] and so 
16e20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  on */.  tRowcnt 
16e30 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20 20 20  *aAvgEq;        
16e40 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20   /* Average nEq 
16e50 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20  values for keys 
16e60 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a  not in aSample *
16e70 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  /.  IndexSample 
16e80 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20  *aSample;    /* 
16e90 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c  Samples of the l
16ea0 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a  eft-most key */.
16eb0 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77    tRowcnt *aiRow
16ec0 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f  Est;       /* No
16ed0 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74  n-logarithmic st
16ee0 61 74 31 20 64 61 74 61 20 66 6f 72 20 74 68 69  at1 data for thi
16ef0 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f  s index */.  tRo
16f00 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20  wcnt nRowEst0;  
16f10 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67        /* Non-log
16f20 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20  arithmic number 
16f30 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69  of rows in the i
16f40 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  ndex */.#endif. 
16f50 20 42 69 74 6d 61 73 6b 20 63 6f 6c 4e 6f 74 49   Bitmask colNotI
16f60 64 78 65 64 3b 20 20 20 20 20 2f 2a 20 30 20 66  dxed;     /* 0 f
16f70 6f 72 20 75 6e 69 6e 64 65 78 65 64 20 63 6f 6c  or unindexed col
16f80 75 6d 6e 73 20 69 6e 20 70 54 61 62 20 2a 2f 0a  umns in pTab */.
16f90 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
16fa0 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64  d values for Ind
16fb0 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64  ex.idxType.*/.#d
16fc0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
16fd0 54 59 50 45 5f 41 50 50 44 45 46 20 20 20 20 20  TYPE_APPDEF     
16fe0 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20   0   /* Created 
16ff0 75 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44  using CREATE IND
17000 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  EX */.#define SQ
17010 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49  LITE_IDXTYPE_UNI
17020 51 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20  QUE      1   /* 
17030 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49  Implements a UNI
17040 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  QUE constraint *
17050 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
17060 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59  _IDXTYPE_PRIMARY
17070 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74  KEY  2   /* Is t
17080 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66  he PRIMARY KEY f
17090 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  or the table */.
170a0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
170b0 44 58 54 59 50 45 5f 49 50 4b 20 20 20 20 20 20  DXTYPE_IPK      
170c0 20 20 20 33 20 20 20 2f 2a 20 49 4e 54 45 47 45     3   /* INTEGE
170d0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e  R PRIMARY KEY in
170e0 64 65 78 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72  dex */../* Retur
170f0 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
17100 58 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b  X is a PRIMARY K
17110 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  EY index */.#def
17120 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79  ine IsPrimaryKey
17130 49 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e  Index(X)  ((X)->
17140 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  idxType==SQLITE_
17150 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b  IDXTYPE_PRIMARYK
17160 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74  EY)../* Return t
17170 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69  rue if index X i
17180 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78  s a UNIQUE index
17190 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e   */.#define IsUn
171a0 69 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20  iqueIndex(X)    
171b0 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21    ((X)->onError!
171c0 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68  =OE_None)../* Th
171d0 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e  e Index.aiColumn
171e0 5b 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f  [] values are no
171f0 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65 20  rmally positive 
17200 69 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a  integer.  But.**
17210 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20   there are some 
17220 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20  negative values 
17230 74 68 61 74 20 68 61 76 65 20 73 70 65 63 69 61  that have specia
17240 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64  l meaning:.*/.#d
17250 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20  efine XN_ROWID  
17260 20 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20 49     (-1)     /* I
17270 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73  ndexed column is
17280 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64   the rowid */.#d
17290 65 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20 20  efine XN_EXPR   
172a0 20 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20 49     (-2)     /* I
172b0 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73  ndexed column is
172c0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a   an expression *
172d0 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61  /../*.** Each sa
172e0 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74  mple stored in t
172f0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
17300 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
17310 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a  nted in memory.*
17320 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74  * using a struct
17330 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65  ure of this type
17340 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  .  See documenta
17350 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20  tion at the top 
17360 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a  of the.** analyz
17370 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20  e.c source file 
17380 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
17390 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
173a0 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
173b0 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20  e {.  void *p;  
173c0 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
173d0 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65  er to sampled re
173e0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b  cord */.  int n;
173f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
17400 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e  ize of record in
17410 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77   bytes */.  tRow
17420 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a  cnt *anEq;    /*
17430 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
17440 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b  rows where the k
17450 65 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73  ey equals this s
17460 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
17470 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20  nt *anLt;    /* 
17480 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
17490 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73  ows where key is
174a0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
174b0 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77  sample */.  tRow
174c0 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a  cnt *anDLt;   /*
174d0 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
174e0 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65  distinct keys le
174f0 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
17500 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ple */.};../*.**
17510 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
17520 20 74 6f 20 75 73 65 20 77 69 74 68 69 6e 20 74   to use within t
17530 68 65 20 66 6c 61 67 73 20 61 72 67 75 6d 65 6e  he flags argumen
17540 74 20 74 6f 20 73 71 6c 69 74 65 33 47 65 74 54  t to sqlite3GetT
17550 6f 6b 65 6e 28 29 2e 0a 2a 2f 0a 23 64 65 66 69  oken()..*/.#defi
17560 6e 65 20 53 51 4c 49 54 45 5f 54 4f 4b 45 4e 5f  ne SQLITE_TOKEN_
17570 51 55 4f 54 45 44 20 20 20 20 30 78 31 20 2f 2a  QUOTED    0x1 /*
17580 20 54 6f 6b 65 6e 20 69 73 20 61 20 71 75 6f 74   Token is a quot
17590 65 64 20 69 64 65 6e 74 69 66 69 65 72 2e 20 2a  ed identifier. *
175a0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
175b0 5f 54 4f 4b 45 4e 5f 4b 45 59 57 4f 52 44 20 20  _TOKEN_KEYWORD  
175c0 20 30 78 32 20 2f 2a 20 54 6f 6b 65 6e 20 69 73   0x2 /* Token is
175d0 20 61 20 6b 65 79 77 6f 72 64 2e 20 2a 2f 0a 0a   a keyword. */..
175e0 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
175f0 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
17600 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
17610 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
17620 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
17630 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
17640 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
17650 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
17660 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 74  .** The memory t
17670 68 61 74 20 22 7a 22 20 70 6f 69 6e 74 73 20 74  hat "z" points t
17680 6f 20 69 73 20 6f 77 6e 65 64 20 62 79 20 6f 74  o is owned by ot
17690 68 65 72 20 6f 62 6a 65 63 74 73 2e 20 20 54 61  her objects.  Ta
176a0 6b 65 20 63 61 72 65 0a 2a 2a 20 74 68 61 74 20  ke care.** that 
176b0 74 68 65 20 6f 77 6e 65 72 20 6f 66 20 74 68 65  the owner of the
176c0 20 22 7a 22 20 73 74 72 69 6e 67 20 64 6f 65 73   "z" string does
176d0 20 6e 6f 74 20 64 65 61 6c 6c 6f 63 61 74 65 20   not deallocate 
176e0 74 68 65 20 73 74 72 69 6e 67 20 62 65 66 6f 72  the string befor
176f0 65 0a 2a 2a 20 74 68 65 20 54 6f 6b 65 6e 20 67  e.** the Token g
17700 6f 65 73 20 6f 75 74 20 6f 66 20 73 63 6f 70 65  oes out of scope
17710 21 20 20 56 65 72 79 20 6f 66 74 65 6e 2c 20 74  !  Very often, t
17720 68 65 20 22 7a 22 20 70 6f 69 6e 74 73 20 74 6f  he "z" points to
17730 20 73 6f 6d 65 20 70 6c 61 63 65 0a 2a 2a 20 69   some place.** i
17740 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
17750 74 68 65 20 50 61 72 73 65 2e 7a 53 71 6c 20 74  the Parse.zSql t
17760 65 78 74 2e 20 20 42 75 74 20 69 74 20 6d 69 67  ext.  But it mig
17770 68 74 20 61 6c 73 6f 20 70 6f 69 6e 74 20 74 6f  ht also point to
17780 20 61 0a 2a 2a 20 73 74 61 74 69 63 20 73 74 72   a.** static str
17790 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ing..*/.struct T
177a0 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63  oken {.  const c
177b0 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54  har *z;     /* T
177c0 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e  ext of the token
177d0 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d  .  Not NULL-term
177e0 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73  inated! */.  uns
177f0 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20  igned int n;    
17800 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61  /* Number of cha
17810 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20  racters in this 
17820 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  token */.};../*.
17830 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
17840 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
17850 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
17860 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
17870 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
17880 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68   for a SELECT th
17890 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72  at contains aggr
178a0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e  egate functions.
178b0 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f  .**.** If Expr.o
178c0 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  p==TK_AGG_COLUMN
178d0 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   or TK_AGG_FUNCT
178e0 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41  ION then Expr.pA
178f0 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70  ggInfo is a.** p
17900 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
17910 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45  tructure.  The E
17920 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c  xpr.iColumn fiel
17930 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69  d is the index i
17940 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f  n.** AggInfo.aCo
17950 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61  l[] or AggInfo.a
17960 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d  Func[] of inform
17970 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
17980 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
17990 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a   for that node..
179a0 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47  **.** AggInfo.pG
179b0 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e  roupBy and AggIn
179c0 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70  fo.aFunc.pExpr p
179d0 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77  oint to fields w
179e0 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69  ithin the.** ori
179f0 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72  ginal Select str
17a00 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63  ucture that desc
17a10 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54  ribes the SELECT
17a20 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
17a30 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20  se.** fields do 
17a40 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66  not need to be f
17a50 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f  reed when deallo
17a60 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e  cating the AggIn
17a70 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  fo structure..*/
17a80 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20  .struct AggInfo 
17a90 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64  {.  u8 directMod
17aa0 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  e;          /* D
17ab0 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20  irect rendering 
17ac0 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20  mode means take 
17ad0 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20  data directly.  
17ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17af0 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20          ** from 
17b00 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61  source tables ra
17b10 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61  ther than from a
17b20 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20  ccumulators */. 
17b30 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64   u8 useSortingId
17b40 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64  x;       /* In d
17b50 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65  irect mode, refe
17b60 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e  rence the sortin
17b70 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20  g index rather. 
17b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b90 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e           ** than
17ba0 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
17bb0 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  e */.  int sorti
17bc0 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f  ngIdx;         /
17bd0 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
17be0 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  of the sorting i
17bf0 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  ndex */.  int so
17c00 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20  rtingIdxPTab;   
17c10 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
17c20 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62  er of pseudo-tab
17c30 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72  le */.  int nSor
17c40 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  tingColumn;     
17c50 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
17c60 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74  umns in the sort
17c70 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
17c80 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b  nt mnReg, mxReg;
17c90 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20         /* Range 
17ca0 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
17cb0 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20  ocated for aCol 
17cc0 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45  and aFunc */.  E
17cd0 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
17ce0 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72  y;     /* The gr
17cf0 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f  oup by clause */
17d00 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
17d10 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f  o_col {    /* Fo
17d20 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73  r each column us
17d30 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62  ed in source tab
17d40 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  les */.    Table
17d50 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
17d60 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61      /* Source ta
17d70 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
17d80 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
17d90 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
17da0 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72  mber of the sour
17db0 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
17dc0 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  int iColumn;    
17dd0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75           /* Colu
17de0 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e  mn number within
17df0 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
17e00 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f  e */.    int iSo
17e10 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  rterColumn;     
17e20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
17e30 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  er in the sortin
17e40 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69  g index */.    i
17e50 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
17e60 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
17e70 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
17e80 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
17e90 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  tor */.    Expr 
17ea0 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
17eb0 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69      /* The origi
17ec0 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  nal expression *
17ed0 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69  /.  } *aCol;.  i
17ee0 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt nColumn;     
17ef0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17f00 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73   of used entries
17f10 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20   in aCol[] */.  
17f20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72  int nAccumulator
17f30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
17f40 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61  r of columns tha
17f50 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74  t show through t
17f60 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20  o the output..  
17f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f80 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74          ** Addit
17f90 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72  ional columns ar
17fa0 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70  e used only as p
17fb0 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20  arameters to.   
17fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fd0 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67         ** aggreg
17fe0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
17ff0 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
18000 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f  o_func {   /* Fo
18010 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65  r each aggregate
18020 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
18030 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
18040 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
18050 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67  ression encoding
18060 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
18070 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46  .    FuncDef *pF
18080 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  unc;          /*
18090 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66   The aggregate f
180a0 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  unction implemen
180b0 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  tation */.    in
180c0 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
180d0 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
180e0 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
180f0 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
18100 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44  or */.    int iD
18110 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20  istinct;        
18120 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20     /* Ephemeral 
18130 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e  table used to en
18140 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a  force DISTINCT *
18150 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20  /.  } *aFunc;.  
18160 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20  int nFunc;      
18170 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18180 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
18190 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f  aFunc[] */.};../
181a0 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70  *.** The datatyp
181b0 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67  e ynVar is a sig
181c0 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74  ned integer, eit
181d0 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32  her 16-bit or 32
181e0 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79  -bit..** Usually
181f0 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20   it is 16-bits. 
18200 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d   But if SQLITE_M
18210 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
18220 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a  ER is greater.**
18230 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68   than 32767 we h
18240 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33  ave to make it 3
18250 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69  2-bit.  16-bit i
18260 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61  s preferred beca
18270 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c  use.** it uses l
18280 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68  ess memory in th
18290 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77  e Expr object, w
182a0 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65  hich is a big me
182b0 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20  mory user.** in 
182c0 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74  systems with lot
182d0 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74  s of prepared st
182e0 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66  atements.  And f
182f0 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  ew applications.
18300 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61  ** need more tha
18310 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30  n about 10 or 20
18320 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74   variables.  But
18330 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73   some extreme us
18340 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68  ers want.** to h
18350 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61  ave prepared sta
18360 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65  tements with ove
18370 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65  r 32767 variable
18380 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a  s, and for them.
18390 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73  ** the option is
183a0 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63   available (at c
183b0 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f  ompile-time)..*/
183c0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
183d0 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c  VARIABLE_NUMBER<
183e0 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69  =32767.typedef i
183f0 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a  16 ynVar;.#else.
18400 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61  typedef int ynVa
18410 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  r;.#endif../*.**
18420 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e   Each node of an
18430 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
18440 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73  he parse tree is
18450 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
18460 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
18470 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70  e..**.** Expr.op
18480 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20   is the opcode. 
18490 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73  The integer pars
184a0 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61  er token codes a
184b0 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20  re reused.** as 
184c0 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f  opcodes here. Fo
184d0 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70  r example, the p
184e0 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b  arser defines TK
184f0 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  _GE to be an int
18500 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70  eger.** code rep
18510 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e  resenting the ">
18520 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69  =" operator. Thi
18530 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63  s same integer c
18540 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a  ode is reused.**
18550 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68   to represent th
18560 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f  e greater-than-o
18570 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61  r-equal-to opera
18580 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65  tor in the expre
18590 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a  ssion.** tree..*
185a0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
185b0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
185c0 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54   literal (TK_INT
185d0 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20  EGER, TK_FLOAT, 
185e0 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54  TK_BLOB,.** or T
185f0 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20  K_STRING), then 
18600 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
18610 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20  ins the text of 
18620 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e  the SQL literal.
18630 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   If.** the expre
18640 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61  ssion is a varia
18650 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45  ble (TK_VARIABLE
18660 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
18670 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a  en contains the.
18680 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  ** variable name
18690 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68  . Finally, if th
186a0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
186b0 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  an SQL function 
186c0 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a  (TK_FUNCTION),.*
186d0 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  * then Expr.toke
186e0 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e  n contains the n
186f0 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
18700 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ion..**.** Expr.
18710 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e  pRight and Expr.
18720 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65  pLeft are the le
18730 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62  ft and right sub
18740 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61  expressions of a
18750 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61  .** binary opera
18760 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62  tor. Either or b
18770 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  oth may be NULL.
18780 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c  .**.** Expr.x.pL
18790 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66  ist is a list of
187a0 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68   arguments if th
187b0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
187c0 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c  an SQL function,
187d0 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65  .** a CASE expre
187e0 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65  ssion or an IN e
187f0 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
18800 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
18810 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a  (<y>, <z>...)"..
18820 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  ** Expr.x.pSelec
18830 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65  t is used if the
18840 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
18850 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61   sub-select or a
18860 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a  n expression of.
18870 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  ** the form "<lh
18880 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  s> IN (SELECT ..
18890 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78  .)". If the EP_x
188a0 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20  IsSelect bit is 
188b0 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78  set in the.** Ex
188c0 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
188d0 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  hen Expr.x.pSele
188e0 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68  ct is valid. Oth
188f0 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70  erwise, Expr.x.p
18900 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64  List is.** valid
18910 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65  ..**.** An expre
18920 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
18930 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65  m ID or ID.ID re
18940 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  fers to a column
18950 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   in a table..** 
18960 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73  For such express
18970 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73  ions, Expr.op is
18980 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d   set to TK_COLUM
18990 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c  N and Expr.iTabl
189a0 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65  e is.** the inte
189b0 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ger cursor numbe
189c0 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73  r of a VDBE curs
189d0 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
189e0 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a  hat table and.**
189f0 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73   Expr.iColumn is
18a00 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   the column numb
18a10 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  er for the speci
18a20 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20  fic column.  If 
18a30 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  the.** expressio
18a40 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72  n is used as a r
18a50 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72  esult in an aggr
18a60 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68  egate SELECT, th
18a70 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
18a80 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69  is also stored i
18a90 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20  n the Expr.iAgg 
18aa0 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67  column in the ag
18ab0 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a  gregate so that.
18ac0 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63  ** it can be acc
18ad0 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20  essed after all 
18ae0 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63  aggregates are c
18af0 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  omputed..**.** I
18b00 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
18b10 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76   is an unbound v
18b20 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28  ariable marker (
18b30 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a  a question mark.
18b40 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27  ** character '?'
18b50 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
18b60 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45   SQL) then the E
18b70 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73  xpr.iTable holds
18b80 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75   the index.** nu
18b90 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61  mber for that va
18ba0 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  riable..**.** If
18bb0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
18bc0 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68  is a subquery th
18bd0 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  en Expr.iColumn 
18be0 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
18bf0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  .** register num
18c00 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ber containing t
18c10 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
18c20 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74   subquery.  If t
18c30 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67  he.** subquery g
18c40 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  ives a constant 
18c50 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61  result, then iTa
18c60 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74  ble is -1.  If t
18c70 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67  he subquery.** g
18c80 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74  ives a different
18c90 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65   answer at diffe
18ca0 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e  rent times durin
18cb0 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63  g statement proc
18cc0 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69  essing.** then i
18cd0 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64  Table is the add
18ce0 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75  ress of a subrou
18cf0 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74  tine that comput
18d00 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  es the subquery.
18d10 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78  .**.** If the Ex
18d20 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50  pr is of type OP
18d30 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65  _Column, and the
18d40 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c   table it is sel
18d50 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69  ecting from.** i
18d60 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f  s a disk table o
18d70 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73  r the "old.*" ps
18d80 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e  eudo-table, then
18d90 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20   pTab points to 
18da0 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
18db0 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e  ding table defin
18dc0 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c  ition..**.** ALL
18dd0 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a  OCATION NOTES:.*
18de0 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74  *.** Expr object
18df0 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20  s can use a lot 
18e00 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  of memory space 
18e10 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65  in database sche
18e20 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20  ma.  To.** help 
18e30 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65  reduce memory re
18e40 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65  quirements, some
18e50 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62  times an Expr ob
18e60 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20  ject will be.** 
18e70 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20  truncated.  And 
18e80 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75  to reduce the nu
18e90 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61  mber of memory a
18ea0 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65  llocations, some
18eb0 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20  times.** two or 
18ec0 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74  more Expr object
18ed0 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  s will be stored
18ee0 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d   in a single mem
18ef0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a  ory allocation,.
18f00 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  ** together with
18f10 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72   Expr.zToken str
18f20 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ings..**.** If t
18f30 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e  he EP_Reduced an
18f40 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  d EP_TokenOnly f
18f50 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65  lags are set whe
18f60 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a  n.** an Expr obj
18f70 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64  ect is truncated
18f80 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63  .  When EP_Reduc
18f90 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ed is set, then 
18fa0 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64  all.** the child
18fb0 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e   Expr objects in
18fc0 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20   the Expr.pLeft 
18fd0 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20  and Expr.pRight 
18fe0 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20  subtrees.** are 
18ff0 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e  contained within
19000 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79   the same memory
19010 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f   allocation.  No
19020 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61  te, however, tha
19030 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65  t.** the subtree
19040 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73  s in Expr.x.pLis
19050 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c  t or Expr.x.pSel
19060 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73  ect are always s
19070 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c  eparately.** all
19080 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65  ocated, regardle
19090 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
190a0 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20   not EP_Reduced 
190b0 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63  is set..*/.struc
190c0 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70  t Expr {.  u8 op
190d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
190e0 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70    /* Operation p
190f0 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73  erformed by this
19100 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20   node */.  char 
19110 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20  affinity;       
19120 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
19130 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  y of the column 
19140 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f  or 0 if not a co
19150 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c  lumn */.  u32 fl
19160 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
19170 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67   /* Various flag
19180 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c  s.  EP_* See bel
19190 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ow */.  union {.
191a0 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e      char *zToken
191b0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  ;          /* To
191c0 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20  ken value. Zero 
191d0 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64  terminated and d
191e0 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69  equoted */.    i
191f0 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20  nt iValue;      
19200 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67        /* Non-neg
19210 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61  ative integer va
19220 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c  lue if EP_IntVal
19230 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20  ue */.  } u;..  
19240 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b  /* If the EP_Tok
19250 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73  enOnly flag is s
19260 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
19270 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
19280 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
19290 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
192a0 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
192b0 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
192c0 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
192d0 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
192e0 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
192f0 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
19300 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
19310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
19350 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
19360 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
19370 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
19380 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
19390 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
193a0 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
193b0 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
193c0 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70  pList;     /* op
193d0 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
193e0 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e  ELECT, CASE, FUN
193f0 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a  CTION, BETWEEN *
19400 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
19410 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50  elect;     /* EP
19420 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f  _xIsSelect and o
19430 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
19440 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b  SELECT */.  } x;
19450 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
19460 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73  _Reduced flag is
19470 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
19480 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
19490 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
194a0 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
194b0 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
194c0 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
194d0 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
194e0 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
194f0 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
19500 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
19510 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
19520 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19530 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19540 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19550 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
19560 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
19570 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
19580 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
19590 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20        /* Height 
195a0 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64  of the tree head
195b0 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
195c0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
195d0 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
195e0 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
195f0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
19600 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20  f table holding 
19610 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  column.         
19620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19630 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  ** TK_REGISTER: 
19640 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a  register number.
19650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19660 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54           ** TK_T
19670 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77  RIGGER: 1 -> new
19680 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20  , 0 -> old.     
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196a0 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65      ** EP_Unlike
196b0 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74  ly:  134217728 t
196c0 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a  imes likelihood.
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196e0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53           ** TK_S
196f0 45 4c 45 43 54 3a 20 31 73 74 20 72 65 67 69 73  ELECT: 1st regis
19700 74 65 72 20 6f 66 20 72 65 73 75 6c 74 20 76 65  ter of result ve
19710 63 74 6f 72 20 2a 2f 0a 20 20 79 6e 56 61 72 20  ctor */.  ynVar 
19720 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
19730 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
19740 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31  olumn index.  -1
19750 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20   for rowid..    
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19770 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41       ** TK_VARIA
19780 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75  BLE: variable nu
19790 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20  mber (always >= 
197a0 31 29 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  1)..            
197b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
197c0 54 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e  TK_SELECT_COLUMN
197d0 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  : column of the 
197e0 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f  result vector */
197f0 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20  .  i16 iAgg;    
19800 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
19810 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67  ch entry in pAgg
19820 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20  Info->aCol[] or 
19830 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69  ->aFunc[] */.  i
19840 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62  16 iRightJoinTab
19850 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46  le;   /* If EP_F
19860 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67  romJoin, the rig
19870 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20  ht table of the 
19880 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32  join */.  u8 op2
19890 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
198a0 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 2f   /* TK_REGISTER/
198b0 54 4b 5f 54 52 55 54 48 3a 20 6f 72 69 67 69 6e  TK_TRUTH: origin
198c0 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72  al value of Expr
198d0 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20  .op.            
198e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
198f0 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76  TK_COLUMN: the v
19900 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f  alue of p5 for O
19910 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  P_Column.       
19920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19930 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43    ** TK_AGG_FUNC
19940 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65  TION: nesting de
19950 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f  pth */.  AggInfo
19960 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20   *pAggInfo;     
19970 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47  /* Used by TK_AG
19980 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f  G_COLUMN and TK_
19990 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a  AGG_FUNCTION */.
199a0 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 54 61    union {.    Ta
199b0 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
199c0 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
199d0 4e 3a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e  N: Table contain
199e0 69 6e 67 20 63 6f 6c 75 6d 6e 2e 20 43 61 6e 20  ing column. Can 
199f0 62 65 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20  be NULL.        
19a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a10 20 20 20 2a 2a 20 66 6f 72 20 61 20 63 6f 6c 75     ** for a colu
19a20 6d 6e 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 6f  mn of an index o
19a30 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  n an expression 
19a40 2a 2f 0a 20 20 20 20 57 69 6e 64 6f 77 20 2a 70  */.    Window *p
19a50 57 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Win;          /*
19a60 20 45 50 5f 57 69 6e 46 75 6e 63 3a 20 57 69 6e   EP_WinFunc: Win
19a70 64 6f 77 2f 46 69 6c 74 65 72 20 64 65 66 6e 20  dow/Filter defn 
19a80 66 6f 72 20 61 20 66 75 6e 63 74 69 6f 6e 20 2a  for a function *
19a90 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b 20 20  /.    struct {  
19aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19ab0 54 4b 5f 49 4e 2c 20 54 4b 5f 53 45 4c 45 43 54  TK_IN, TK_SELECT
19ac0 2c 20 61 6e 64 20 54 4b 5f 45 58 49 53 54 53 20  , and TK_EXISTS 
19ad0 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 41 64  */.      int iAd
19ae0 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  dr;             
19af0 2f 2a 20 53 75 62 72 6f 75 74 69 6e 65 20 65 6e  /* Subroutine en
19b00 74 72 79 20 61 64 64 72 65 73 73 20 2a 2f 0a 20  try address */. 
19b10 20 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75       int regRetu
19b20 72 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52  rn;         /* R
19b30 65 67 69 73 74 65 72 20 75 73 65 64 20 74 6f 20  egister used to 
19b40 68 6f 6c 64 20 72 65 74 75 72 6e 20 61 64 64 72  hold return addr
19b50 65 73 73 20 2a 2f 0a 20 20 20 20 7d 20 73 75 62  ess */.    } sub
19b60 3b 0a 20 20 7d 20 79 3b 0a 7d 3b 0a 0a 2f 2a 0a  ;.  } y;.};../*.
19b70 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
19b80 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67   are the meaning
19b90 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65  s of bits in the
19ba0 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c   Expr.flags fiel
19bb0 64 2e 0a 2a 2a 20 56 61 6c 75 65 20 72 65 73 74  d..** Value rest
19bc0 72 69 63 74 69 6f 6e 73 3a 0a 2a 2a 0a 2a 2a 20  rictions:.**.** 
19bd0 20 20 20 20 20 20 20 20 20 45 50 5f 41 67 67 20           EP_Agg 
19be0 3d 3d 20 4e 43 5f 48 61 73 41 67 67 20 3d 3d 20  == NC_HasAgg == 
19bf0 53 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20  SF_HasAgg.**    
19c00 20 20 20 20 20 20 45 50 5f 57 69 6e 20 3d 3d 20        EP_Win == 
19c10 4e 43 5f 48 61 73 57 69 6e 0a 2a 2f 0a 23 64 65  NC_HasWin.*/.#de
19c20 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e  fine EP_FromJoin
19c30 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72    0x000001 /* Or
19c40 69 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55  iginates in ON/U
19c50 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f  SING clause of o
19c60 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
19c70 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74  fine EP_Distinct
19c80 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20 41 67    0x000002 /* Ag
19c90 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
19ca0 20 77 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b   with DISTINCT k
19cb0 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
19cc0 65 20 45 50 5f 48 61 73 46 75 6e 63 20 20 20 30  e EP_HasFunc   0
19cd0 78 30 30 30 30 30 34 20 2f 2a 20 43 6f 6e 74 61  x000004 /* Conta
19ce0 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
19cf0 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20 61 6e 79  functions of any
19d00 20 6b 69 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65   kind */.#define
19d10 20 45 50 5f 46 69 78 65 64 43 6f 6c 20 20 30 78   EP_FixedCol  0x
19d20 30 30 30 30 30 38 20 2f 2a 20 54 4b 5f 43 6f 6c  000008 /* TK_Col
19d30 75 6d 6e 20 77 69 74 68 20 61 20 6b 6e 6f 77 6e  umn with a known
19d40 20 66 69 78 65 64 20 76 61 6c 75 65 20 2a 2f 0a   fixed value */.
19d50 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20  #define EP_Agg  
19d60 20 20 20 20 20 30 78 30 30 30 30 31 30 20 2f 2a       0x000010 /*
19d70 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   Contains one or
19d80 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
19d90 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
19da0 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63  fine EP_VarSelec
19db0 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53  t 0x000020 /* pS
19dc0 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61  elect is correla
19dd0 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e  ted, not constan
19de0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
19df0 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30  DblQuoted 0x0000
19e00 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61  40 /* token.z wa
19e10 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20  s originally in 
19e20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65  "..." */.#define
19e30 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78   EP_InfixFunc 0x
19e40 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66  000080 /* True f
19e50 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63  or an infix func
19e60 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42  tion: LIKE, GLOB
19e70 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65  , etc */.#define
19e80 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78   EP_Collate   0x
19e90 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63  000100 /* Tree c
19ea0 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c  ontains a TK_COL
19eb0 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LATE operator */
19ec0 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65  .#define EP_Gene
19ed0 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20 2f  ric   0x000200 /
19ee0 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45  * Ignore COLLATE
19ef0 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20   or affinity on 
19f00 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65  this tree */.#de
19f10 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65  fine EP_IntValue
19f20 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e    0x000400 /* In
19f30 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74  teger value cont
19f40 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75  ained in u.iValu
19f50 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
19f60 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30 38  xIsSelect 0x0008
19f70 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20  00 /* x.pSelect 
19f80 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77  is valid (otherw
19f90 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20  ise x.pList is) 
19fa0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b  */.#define EP_Sk
19fb0 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ip      0x001000
19fc0 20 2f 2a 20 4f 70 65 72 61 74 6f 72 20 64 6f 65   /* Operator doe
19fd0 73 20 6e 6f 74 20 63 6f 6e 74 72 69 62 75 74 65  s not contribute
19fe0 20 74 6f 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a   to affinity */.
19ff0 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63  #define EP_Reduc
1a000 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a  ed   0x002000 /*
1a010 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
1a020 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79  R_REDUCEDSIZE by
1a030 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
1a040 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  ine EP_TokenOnly
1a050 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70   0x004000 /* Exp
1a060 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f  r struct EXPR_TO
1a070 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65  KENONLYSIZE byte
1a080 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
1a090 65 20 45 50 5f 57 69 6e 20 20 20 20 20 20 20 30  e EP_Win       0
1a0a0 78 30 30 38 30 30 30 20 2f 2a 20 43 6f 6e 74 61  x008000 /* Conta
1a0b0 69 6e 73 20 77 69 6e 64 6f 77 20 66 75 6e 63 74  ins window funct
1a0c0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
1a0d0 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30  EP_MemToken  0x0
1a0e0 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f  10000 /* Need to
1a0f0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
1a100 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a   Expr.zToken */.
1a110 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64  #define EP_NoRed
1a120 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a  uce  0x020000 /*
1a130 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f   Cannot EXPRDUP_
1a140 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72  REDUCE this Expr
1a150 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55   */.#define EP_U
1a160 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30  nlikely  0x04000
1a170 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20  0 /* unlikely() 
1a180 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20  or likelihood() 
1a190 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
1a1a0 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63  ine EP_ConstFunc
1a1b0 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53   0x080000 /* A S
1a1c0 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
1a1d0 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20  ANT or _SLOCHNG 
1a1e0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
1a1f0 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c  ine EP_CanBeNull
1a200 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e   0x100000 /* Can
1a210 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65   be null despite
1a220 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
1a230 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
1a240 45 50 5f 53 75 62 71 75 65 72 79 20 20 30 78 32  EP_Subquery  0x2
1a250 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f  00000 /* Tree co
1a260 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45  ntains a TK_SELE
1a270 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23  CT operator */.#
1a280 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61 73 20  define EP_Alias 
1a290 20 20 20 20 30 78 34 30 30 30 30 30 20 2f 2a 20      0x400000 /* 
1a2a0 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  Is an alias for 
1a2b0 61 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c  a result set col
1a2c0 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  umn */.#define E
1a2d0 50 5f 4c 65 61 66 20 20 20 20 20 20 30 78 38 30  P_Leaf      0x80
1a2e0 30 30 30 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65  0000 /* Expr.pLe
1a2f0 66 74 2c 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e  ft, .pRight, .u.
1a300 70 53 65 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c  pSelect all NULL
1a310 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 57   */.#define EP_W
1a320 69 6e 46 75 6e 63 20 20 30 78 31 30 30 30 30 30  inFunc  0x100000
1a330 30 20 2f 2a 20 54 4b 5f 46 55 4e 43 54 49 4f 4e  0 /* TK_FUNCTION
1a340 20 77 69 74 68 20 45 78 70 72 2e 79 2e 70 57 69   with Expr.y.pWi
1a350 6e 20 73 65 74 20 2a 2f 0a 23 64 65 66 69 6e 65  n set */.#define
1a360 20 45 50 5f 53 75 62 72 74 6e 20 20 20 30 78 32   EP_Subrtn   0x2
1a370 30 30 30 30 30 30 20 2f 2a 20 55 73 65 73 20 45  000000 /* Uses E
1a380 78 70 72 2e 79 2e 73 75 62 2e 20 54 4b 5f 49 4e  xpr.y.sub. TK_IN
1a390 2c 20 5f 53 45 4c 45 43 54 2c 20 6f 72 20 5f 45  , _SELECT, or _E
1a3a0 58 49 53 54 53 20 2a 2f 0a 23 64 65 66 69 6e 65  XISTS */.#define
1a3b0 20 45 50 5f 51 75 6f 74 65 64 20 20 20 30 78 34   EP_Quoted   0x4
1a3c0 30 30 30 30 30 30 20 2f 2a 20 54 4b 5f 49 44 20  000000 /* TK_ID 
1a3d0 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 71  was originally q
1a3e0 75 6f 74 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  uoted */.#define
1a3f0 20 45 50 5f 53 74 61 74 69 63 20 20 20 30 78 38   EP_Static   0x8
1a400 30 30 30 30 30 30 20 2f 2a 20 48 65 6c 64 20 69  000000 /* Held i
1a410 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74  n memory not obt
1a420 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f  ained from mallo
1a430 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  c() */.#define E
1a440 50 5f 49 73 54 72 75 65 20 20 30 78 31 30 30 30  P_IsTrue  0x1000
1a450 30 30 30 30 20 2f 2a 20 41 6c 77 61 79 73 20 68  0000 /* Always h
1a460 61 73 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  as boolean value
1a470 20 6f 66 20 54 52 55 45 20 2a 2f 0a 23 64 65 66   of TRUE */.#def
1a480 69 6e 65 20 45 50 5f 49 73 46 61 6c 73 65 20 30  ine EP_IsFalse 0
1a490 78 32 30 30 30 30 30 30 30 20 2f 2a 20 41 6c 77  x20000000 /* Alw
1a4a0 61 79 73 20 68 61 73 20 62 6f 6f 6c 65 61 6e 20  ays has boolean 
1a4b0 76 61 6c 75 65 20 6f 66 20 46 41 4c 53 45 20 2a  value of FALSE *
1a4c0 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 45 50 5f  /../*.** The EP_
1a4d0 50 72 6f 70 61 67 61 74 65 20 6d 61 73 6b 20 69  Propagate mask i
1a4e0 73 20 61 20 73 65 74 20 6f 66 20 70 72 6f 70 65  s a set of prope
1a4f0 72 74 69 65 73 20 74 68 61 74 20 61 75 74 6f 6d  rties that autom
1a500 61 74 69 63 61 6c 6c 79 20 70 72 6f 70 61 67 61  atically propaga
1a510 74 65 0a 2a 2a 20 75 70 77 61 72 64 73 20 69 6e  te.** upwards in
1a520 74 6f 20 70 61 72 65 6e 74 20 6e 6f 64 65 73 2e  to parent nodes.
1a530 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 50  .*/.#define EP_P
1a540 72 6f 70 61 67 61 74 65 20 28 45 50 5f 43 6f 6c  ropagate (EP_Col
1a550 6c 61 74 65 7c 45 50 5f 53 75 62 71 75 65 72 79  late|EP_Subquery
1a560 7c 45 50 5f 48 61 73 46 75 6e 63 29 0a 0a 2f 2a  |EP_HasFunc)../*
1a570 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
1a580 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
1a590 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
1a5a0 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a  ear bits in the.
1a5b0 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  ** Expr.flags fi
1a5c0 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
1a5d0 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
1a5e0 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e  E,P)     (((E)->
1a5f0 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
1a600 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c  define ExprHasAl
1a610 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  lProperty(E,P)  
1a620 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
1a630 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
1a640 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
1a650 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c  E,P)     (E)->fl
1a660 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
1a670 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72   ExprClearProper
1a680 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66  ty(E,P)   (E)->f
1a690 6c 61 67 73 26 3d 7e 28 50 29 0a 23 64 65 66 69  lags&=~(P).#defi
1a6a0 6e 65 20 45 78 70 72 41 6c 77 61 79 73 54 72 75  ne ExprAlwaysTru
1a6b0 65 28 45 29 20 20 20 28 28 28 45 29 2d 3e 66 6c  e(E)   (((E)->fl
1a6c0 61 67 73 26 28 45 50 5f 46 72 6f 6d 4a 6f 69 6e  ags&(EP_FromJoin
1a6d0 7c 45 50 5f 49 73 54 72 75 65 29 29 3d 3d 45 50  |EP_IsTrue))==EP
1a6e0 5f 49 73 54 72 75 65 29 0a 23 64 65 66 69 6e 65  _IsTrue).#define
1a6f0 20 45 78 70 72 41 6c 77 61 79 73 46 61 6c 73 65   ExprAlwaysFalse
1a700 28 45 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67  (E)  (((E)->flag
1a710 73 26 28 45 50 5f 46 72 6f 6d 4a 6f 69 6e 7c 45  s&(EP_FromJoin|E
1a720 50 5f 49 73 46 61 6c 73 65 29 29 3d 3d 45 50 5f  P_IsFalse))==EP_
1a730 49 73 46 61 6c 73 65 29 0a 0a 2f 2a 20 54 68 65  IsFalse)../* The
1a740 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
1a750 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75  rty() macro is u
1a760 73 65 64 20 66 6f 72 20 56 65 72 69 66 69 63 61  sed for Verifica
1a770 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e  tion, Validation
1a780 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69  ,.** and Accredi
1a790 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74  tation only.  It
1a7a0 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72   works like Expr
1a7b0 53 65 74 50 72 6f 70 65 72 74 79 28 29 20 64 75  SetProperty() du
1a7c0 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63  ring VVA.** proc
1a7d0 65 73 73 65 73 20 62 75 74 20 69 73 20 61 20 6e  esses but is a n
1a7e0 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72  o-op for deliver
1a7f0 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
1a800 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69  ITE_DEBUG.# defi
1a810 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
1a820 70 65 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d  perty(E,P)  (E)-
1a830 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73  >flags|=(P).#els
1a840 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  e.# define ExprS
1a850 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
1a860 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  P).#endif../*.**
1a870 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
1a880 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20  mine the number 
1a890 6f 66 20 62 79 74 65 73 20 72 65 71 75 69 72 65  of bytes require
1a8a0 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78  d by a normal Ex
1a8b0 70 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e  pr.** struct, an
1a8c0 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74   Expr struct wit
1a8d0 68 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  h the EP_Reduced
1a8e0 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70   flag set in Exp
1a8f0 72 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64 20 61  r.flags.** and a
1a900 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69  n Expr struct wi
1a910 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f  th the EP_TokenO
1a920 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f  nly flag set..*/
1a930 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55  .#define EXPR_FU
1a940 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20 20  LLSIZE          
1a950 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20   sizeof(Expr)   
1a960 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20          /* Full 
1a970 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  size */.#define 
1a980 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
1a990 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66          offsetof
1a9a0 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f  (Expr,iTable)  /
1a9b0 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65  * Common feature
1a9c0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  s */.#define EXP
1a9d0 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
1a9e0 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
1a9f0 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46  pr,pLeft)   /* F
1aa00 65 77 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f  ewer features */
1aa10 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61  ../*.** Flags pa
1aa20 73 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69  ssed to the sqli
1aa30 74 65 33 45 78 70 72 44 75 70 28 29 20 66 75 6e  te3ExprDup() fun
1aa40 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68  ction. See the h
1aa50 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a  eader comment.**
1aa60 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78   above sqlite3Ex
1aa70 70 72 44 75 70 28 29 20 66 6f 72 20 64 65 74 61  prDup() for deta
1aa80 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ils..*/.#define 
1aa90 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 20  EXPRDUP_REDUCE  
1aaa0 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f         0x0001  /
1aab0 2a 20 55 73 65 64 20 72 65 64 75 63 65 64 2d 73  * Used reduced-s
1aac0 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a  ize Expr nodes *
1aad0 2f 0a 0a 2f 2a 0a 2a 2a 20 54 72 75 65 20 69 66  /../*.** True if
1aae0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
1aaf0 70 61 73 73 65 64 20 61 73 20 61 6e 20 61 72 67  passed as an arg
1ab00 75 6d 65 6e 74 20 77 61 73 20 61 20 66 75 6e 63  ument was a func
1ab10 74 69 6f 6e 20 77 69 74 68 0a 2a 2a 20 61 6e 20  tion with.** an 
1ab20 4f 56 45 52 28 29 20 63 6c 61 75 73 65 20 28 61  OVER() clause (a
1ab30 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
1ab40 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  )..*/.#define Is
1ab50 57 69 6e 64 6f 77 46 75 6e 63 28 70 29 20 28 20  WindowFunc(p) ( 
1ab60 5c 0a 20 20 20 20 45 78 70 72 48 61 73 50 72 6f  \.    ExprHasPro
1ab70 70 65 72 74 79 28 28 70 29 2c 20 45 50 5f 57 69  perty((p), EP_Wi
1ab80 6e 46 75 6e 63 29 20 26 26 20 70 2d 3e 79 2e 70  nFunc) && p->y.p
1ab90 57 69 6e 2d 3e 65 46 72 6d 54 79 70 65 21 3d 54  Win->eFrmType!=T
1aba0 4b 5f 46 49 4c 54 45 52 20 5c 0a 29 0a 0a 2f 2a  K_FILTER \.)../*
1abb0 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78  .** A list of ex
1abc0 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68  pressions.  Each
1abd0 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
1abe0 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20  optionally have 
1abf0 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65  a.** name.  An e
1ac00 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61  xpr/name combina
1ac10 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64  tion can be used
1ac20 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
1ac30 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65  , such.** as the
1ac40 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41   list of "expr A
1ac50 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c  S ID" fields fol
1ac60 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54  lowing a "SELECT
1ac70 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c  " or in the.** l
1ac80 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70  ist of "ID = exp
1ac90 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55  r" items in an U
1aca0 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f  PDATE.  A list o
1acb0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61  f expressions ca
1acc0 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65  n.** also be use
1acd0 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
1ace0 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c  t to a function,
1acf0 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
1ad00 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69  he a.zName.** fi
1ad10 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  eld is not used.
1ad20 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c  .**.** By defaul
1ad30 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e  t the Expr.zSpan
1ad40 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68   field holds a h
1ad50 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65  uman-readable de
1ad60 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20  scription of.** 
1ad70 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
1ad80 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74  hat is used in t
1ad90 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
1ada0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
1adb0 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61  and.** column la
1adc0 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63  bels.  In this c
1add0 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20  ase, Expr.zSpan 
1ade0 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65  is typically the
1adf0 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f   text of a.** co
1ae00 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lumn expression 
1ae10 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20  as it exists in 
1ae20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
1ae30 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66  nt.  However, if
1ae40 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54  .** the bSpanIsT
1ae50 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  ab flag is set, 
1ae60 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76  then zSpan is ov
1ae70 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e  erloaded to mean
1ae80 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20   the name.** of 
1ae90 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
1aea0 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44  n in the form: D
1aeb0 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f  ATABASE.TABLE.CO
1aec0 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65  LUMN.  This late
1aed0 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65  r.** form is use
1aee0 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c  d for name resol
1aef0 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65  ution with neste
1af00 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a  d FROM clauses..
1af10 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69  */.struct ExprLi
1af20 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72  st {.  int nExpr
1af30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1af40 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65   Number of expre
1af50 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69  ssions on the li
1af60 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45  st */.  struct E
1af70 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f  xprList_item { /
1af80 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65  * For each expre
1af90 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73  ssion in the lis
1afa0 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  t */.    Expr *p
1afb0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
1afc0 20 2f 2a 20 54 68 65 20 70 61 72 73 65 20 74 72   /* The parse tr
1afd0 65 65 20 66 6f 72 20 74 68 69 73 20 65 78 70 72  ee for this expr
1afe0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68  ession */.    ch
1aff0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
1b000 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61        /* Token a
1b010 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
1b020 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  his expression *
1b030 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61  /.    char *zSpa
1b040 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
1b050 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f   Original text o
1b060 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
1b070 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f   */.    u8 sortO
1b080 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  rder;           
1b090 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72  /* 1 for DESC or
1b0a0 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20   0 for ASC */.  
1b0b0 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20    unsigned done 
1b0c0 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66  :1;       /* A f
1b0d0 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20  lag to indicate 
1b0e0 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20  when processing 
1b0f0 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  is finished */. 
1b100 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61     unsigned bSpa
1b110 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53  nIsTab :1; /* zS
1b120 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42  pan holds DB.TAB
1b130 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20  LE.COLUMN */.   
1b140 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62   unsigned reusab
1b150 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73  le :1;   /* Cons
1b160 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  tant expression 
1b170 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20  is reusable */. 
1b180 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 6f 72     unsigned bSor
1b190 74 65 72 52 65 66 20 3a 31 3b 20 2f 2a 20 44 65  terRef :1; /* De
1b1a0 66 65 72 20 65 76 61 6c 75 61 74 69 6f 6e 20 75  fer evaluation u
1b1b0 6e 74 69 6c 20 61 66 74 65 72 20 73 6f 72 74 69  ntil after sorti
1b1c0 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  ng */.    union 
1b1d0 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b  {.      struct {
1b1e0 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72  .        u16 iOr
1b1f0 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f  derByCol;      /
1b200 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20  * For ORDER BY, 
1b210 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  column number in
1b220 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20   result set */. 
1b230 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61         u16 iAlia
1b240 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
1b250 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65  Index into Parse
1b260 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e  .aAlias[] for zN
1b270 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78  ame */.      } x
1b280 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e  ;.      int iCon
1b290 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20  stExprReg;      
1b2a0 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77  /* Register in w
1b2b0 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20  hich Expr value 
1b2c0 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20  is cached */.   
1b2d0 20 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20   } u;.  } a[1]; 
1b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2f0 20 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72   /* One slot for
1b300 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
1b310 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   in the list */.
1b320 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
1b330 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
1b340 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64  ructure can hold
1b350 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f   a simple list o
1b360 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a  f identifiers,.*
1b370 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69  * such as the li
1b380 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68  st "a,b,c" in th
1b390 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
1b3a0 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ements:.**.**   
1b3b0 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1b3c0 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e  (a,b,c) VALUES .
1b3d0 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  ..;.**      CREA
1b3e0 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20  TE INDEX idx ON 
1b3f0 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20  t(a,b,c);.**    
1b400 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
1b410 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44   trig BEFORE UPD
1b420 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20  ATE ON t(a,b,c) 
1b430 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ...;.**.** The I
1b440 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c  dList.a.idx fiel
1b450 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74  d is used when t
1b460 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73  he IdList repres
1b470 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66  ents the list of
1b480 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  .** column names
1b490 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e   after a table n
1b4a0 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  ame in an INSERT
1b4b0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
1b4c0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
1b4d0 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49  .**     INSERT I
1b4e0 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e  NTO t(a,b,c) ...
1b4f0 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73  .**.** If "a" is
1b500 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e   the k-th column
1b510 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74   of table "t", t
1b520 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e  hen IdList.a[0].
1b530 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63  idx==k..*/.struc
1b540 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72  t IdList {.  str
1b550 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20  uct IdList_item 
1b560 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  {.    char *zNam
1b570 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
1b580 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65  of the identifie
1b590 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78  r */.    int idx
1b5a0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
1b5b0 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c  dex in some Tabl
1b5c0 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f  e.aCol[] of a co
1b5d0 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65  lumn named zName
1b5e0 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e   */.  } *a;.  in
1b5f0 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f  t nId;         /
1b600 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e  * Number of iden
1b610 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c  tifiers on the l
1b620 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
1b630 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
1b640 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
1b650 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  es the FROM clau
1b660 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  se of a SELECT s
1b670 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63  tatement..** Eac
1b680 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  h table or subqu
1b690 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
1b6a0 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61  clause is a sepa
1b6b0 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a  rate element of.
1b6c0 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  ** the SrcList.a
1b6d0 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20  [] array..**.** 
1b6e0 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f  With the additio
1b6f0 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61  n of multiple da
1b700 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20  tabase support, 
1b710 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1b720 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61  ructure.** can a
1b730 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64  lso be used to d
1b740 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63  escribe a partic
1b750 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20  ular table such 
1b760 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  as the table tha
1b770 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64  t.** is modified
1b780 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44   by an INSERT, D
1b790 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
1b7a0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
1b7b0 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a  standard SQL,.**
1b7c0 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75   such a table mu
1b7d0 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e  st be a simple n
1b7e0 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e  ame: ID.  But in
1b7f0 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62   SQLite, the tab
1b800 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65  le can.** now be
1b810 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
1b820 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20   database name, 
1b830 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20  a dot, then the 
1b840 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49  table name: ID.I
1b850 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69  D..**.** The joi
1b860 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74  ntype starts out
1b870 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69   showing the joi
1b880 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74  n type between t
1b890 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65  he current table
1b8a0 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74  .** and the next
1b8b0 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69   table on the li
1b8c0 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20  st.  The parser 
1b8d0 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20  builds the list 
1b8e0 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74  this way..** But
1b8f0 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
1b900 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c  hiftJoinType() l
1b910 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20  ater shifts the 
1b920 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61  jointypes so tha
1b930 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79  t each.** jointy
1b940 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65  pe expresses the
1b950 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
1b960 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  e table and the 
1b970 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a  previous table..
1b980 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c  **.** In the col
1b990 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20  Used field, the 
1b9a0 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28  high-order bit (
1b9b0 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69  bit 63) is set i
1b9c0 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63  f the table.** c
1b9d0 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61  ontains more tha
1b9e0 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64  n 63 columns and
1b9f0 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61   the 64-th or la
1ba00 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  ter column is us
1ba10 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72  ed..*/.struct Sr
1ba20 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53  cList {.  int nS
1ba30 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  rc;        /* Nu
1ba40 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f  mber of tables o
1ba50 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20  r subqueries in 
1ba60 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1ba70 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b  */.  u32 nAlloc;
1ba80 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1ba90 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
1baa0 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f  ated in a[] belo
1bab0 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72  w */.  struct Sr
1bac0 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  cList_item {.   
1bad0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
1bae0 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20  ;  /* Schema to 
1baf0 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20  which this item 
1bb00 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20  is fixed */.    
1bb10 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
1bb20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
1bb30 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
1bb40 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
1bb50 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
1bb60 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
1bb70 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
1bb80 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
1bb90 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
1bba0 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
1bbb0 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
1bbc0 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
1bbd0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
1bbe0 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
1bbf0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1bc00 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
1bc10 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
1bc20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
1bc30 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
1bc40 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
1bc50 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
1bc60 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a  addrFillSub;  /*
1bc70 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72   Address of subr
1bc80 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65  outine to manife
1bc90 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f  st a subquery */
1bca0 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75  .    int regRetu
1bcb0 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  rn;    /* Regist
1bcc0 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72  er holding retur
1bcd0 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64  n address of add
1bce0 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20  rFillSub */.    
1bcf0 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20  int regResult;  
1bd00 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68    /* Registers h
1bd10 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f  olding results o
1bd20 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  f a co-routine *
1bd30 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20  /.    struct {. 
1bd40 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65       u8 jointype
1bd50 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f  ;      /* Type o
1bd60 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  f join between t
1bd70 68 69 73 20 74 61 62 6c 65 20 61 6e 64 20 74 68  his table and th
1bd80 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  e previous */.  
1bd90 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74      unsigned not
1bda0 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f  Indexed :1;    /
1bdb0 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
1bdc0 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44  is a NOT INDEXED
1bdd0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
1bde0 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64 65   unsigned isInde
1bdf0 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54  xedBy :1;   /* T
1be00 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
1be10 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  an INDEXED BY cl
1be20 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ause */.      un
1be30 73 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e 63  signed isTabFunc
1be40 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65   :1;     /* True
1be50 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65 64   if table-valued
1be60 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78  -function syntax
1be70 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1be80 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20  ed isCorrelated 
1be90 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
1bea0 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72  sub-query is cor
1beb0 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 20  related */.     
1bec0 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72   unsigned viaCor
1bed0 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49  outine :1;  /* I
1bee0 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20  mplemented as a 
1bef0 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
1bf00 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52      unsigned isR
1bf10 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f  ecursive :1;   /
1bf20 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72  * True for recur
1bf30 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69  sive reference i
1bf40 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20  n WITH */.    } 
1bf50 66 67 3b 0a 20 20 20 20 69 6e 74 20 69 43 75 72  fg;.    int iCur
1bf60 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  sor;      /* The
1bf70 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d   VDBE cursor num
1bf80 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65  ber used to acce
1bf90 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ss this table */
1bfa0 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20  .    Expr *pOn; 
1bfb0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e         /* The ON
1bfc0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
1bfd0 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20  n */.    IdList 
1bfe0 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68  *pUsing;   /* Th
1bff0 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  e USING clause o
1c000 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20  f a join */.    
1c010 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b  Bitmask colUsed;
1c020 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e    /* Bit N (1<<N
1c030 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20  ) set if column 
1c040 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65  N of pTab is use
1c050 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  d */.    union {
1c060 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e  .      char *zIn
1c070 64 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49  dexedBy;    /* I
1c080 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22  dentifier from "
1c090 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64  INDEXED BY <zInd
1c0a0 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20  ex>" clause */. 
1c0b0 20 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70       ExprList *p
1c0c0 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67  FuncArg;  /* Arg
1c0d0 75 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d  uments to table-
1c0e0 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20  valued-function 
1c0f0 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20  */.    } u1;.   
1c100 20 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78   Index *pIBIndex
1c110 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75  ;  /* Index stru
1c120 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64  cture correspond
1c130 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78  ing to u1.zIndex
1c140 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d  edBy */.  } a[1]
1c150 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1c160 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
1c170 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f  ach identifier o
1c180 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
1c190 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65  ../*.** Permitte
1c1a0 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20  d values of the 
1c1b0 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79  SrcList.a.jointy
1c1c0 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66  pe field.*/.#def
1c1d0 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20  ine JT_INNER    
1c1e0 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e   0x0001    /* An
1c1f0 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20  y kind of inner 
1c200 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f  or cross join */
1c210 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53  .#define JT_CROS
1c220 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20  S     0x0002    
1c230 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20  /* Explicit use 
1c240 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79  of the CROSS key
1c250 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
1c260 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30  JT_NATURAL   0x0
1c270 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66  004    /* True f
1c280 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a  or a "natural" j
1c290 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
1c2a0 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30  T_LEFT      0x00
1c2b0 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75  08    /* Left ou
1c2c0 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
1c2d0 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20  ine JT_RIGHT    
1c2e0 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69   0x0010    /* Ri
1c2f0 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  ght outer join *
1c300 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54  /.#define JT_OUT
1c310 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20  ER     0x0020   
1c320 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20   /* The "OUTER" 
1c330 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65  keyword is prese
1c340 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  nt */.#define JT
1c350 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34  _ERROR     0x004
1c360 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20  0    /* unknown 
1c370 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a  or unsupported j
1c380 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a  oin type */.../*
1c390 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70  .** Flags approp
1c3a0 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63  riate for the wc
1c3b0 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74  trlFlags paramet
1c3c0 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65  er of sqlite3Whe
1c3d0 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64  reBegin().** and
1c3e0 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77   the WhereInfo.w
1c3f0 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72  ctrlFlags member
1c400 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
1c410 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
1c420 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
1c430 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52 45 5f  ):.**     WHERE_
1c440 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46  USE_LIMIT  == SF
1c450 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23  _FixedLimit.*/.#
1c460 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1c470 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78  ERBY_NORMAL   0x
1c480 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f  0000 /* No-op */
1c490 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1c4a0 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20  RDERBY_MIN      
1c4b0 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20  0x0001 /* ORDER 
1c4c0 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
1c4d0 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a  r min() func */.
1c4e0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1c4f0 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30  DERBY_MAX      0
1c500 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42  x0002 /* ORDER B
1c510 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
1c520 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23   max() func */.#
1c530 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
1c540 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78  PASS_DESIRED  0x
1c550 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20  0004 /* Want to 
1c560 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41  do one-pass UPDA
1c570 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65  TE/DELETE */.#de
1c580 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41  fine WHERE_ONEPA
1c590 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30 30  SS_MULTIROW 0x00
1c5a0 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73  08 /* ONEPASS is
1c5b0 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c   ok with multipl
1c5c0 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e  e rows */.#defin
1c5d0 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54  e WHERE_DUPLICAT
1c5e0 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 31 30 20  ES_OK    0x0010 
1c5f0 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20  /* Ok to return 
1c600 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20  a row more than 
1c610 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  once */.#define 
1c620 57 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55  WHERE_OR_SUBCLAU
1c630 53 45 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a  SE     0x0020 /*
1c640 20 50 72 6f 63 65 73 73 69 6e 67 20 61 20 73 75   Processing a su
1c650 62 2d 57 48 45 52 45 20 61 73 20 70 61 72 74 20  b-WHERE as part 
1c660 6f 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  of.             
1c670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c680 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20           ** the 
1c690 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  OR optimization 
1c6a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c6b0 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20  E_GROUPBY       
1c6c0 20 20 20 30 78 30 30 34 30 20 2f 2a 20 70 4f 72     0x0040 /* pOr
1c6d0 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20  derBy is really 
1c6e0 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64  a GROUP BY */.#d
1c6f0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1c700 49 4e 43 54 42 59 20 20 20 20 20 20 20 30 78 30  INCTBY       0x0
1c710 30 38 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20  080 /* pOrderby 
1c720 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54  is really a DIST
1c730 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23  INCT clause */.#
1c740 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e  define WHERE_WAN
1c750 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30 78  T_DISTINCT    0x
1c760 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70  0100 /* All outp
1c770 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64  ut needs to be d
1c780 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69  istinct */.#defi
1c790 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47  ne WHERE_SORTBYG
1c7a0 52 4f 55 50 20 20 20 20 20 20 30 78 30 32 30 30  ROUP      0x0200
1c7b0 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69   /* Support sqli
1c7c0 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64  te3WhereIsSorted
1c7d0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  () */.#define WH
1c7e0 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20  ERE_SEEK_TABLE  
1c7f0 20 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 44       0x0400 /* D
1c800 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b  o not defer seek
1c810 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20  s on main table 
1c820 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c830 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54 20 20  _ORDERBY_LIMIT  
1c840 20 20 30 78 30 38 30 30 20 2f 2a 20 4f 52 44 45    0x0800 /* ORDE
1c850 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65  RBY+LIMIT on the
1c860 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23   inner loop */.#
1c870 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45  define WHERE_SEE
1c880 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20 30 78  K_UNIQ_TABLE  0x
1c890 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64  1000 /* Do not d
1c8a0 65 66 65 72 20 73 65 65 6b 73 20 69 66 20 75 6e  efer seeks if un
1c8b0 69 71 75 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  ique */.        
1c8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8d0 2f 2a 20 20 20 20 20 30 78 32 30 30 30 20 20 20  /*     0x2000   
1c8e0 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75   not currently u
1c8f0 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
1c900 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20  HERE_USE_LIMIT  
1c910 20 20 20 20 20 20 30 78 34 30 30 30 20 2f 2a 20        0x4000 /* 
1c920 55 73 65 20 74 68 65 20 4c 49 4d 49 54 20 69 6e  Use the LIMIT in
1c930 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73 20   cost estimates 
1c940 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
1c950 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
1c960 20 20 30 78 38 30 30 30 20 20 20 20 6e 6f 74 20    0x8000    not 
1c970 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a  currently used *
1c980 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65  /../* Allowed re
1c990 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d  turn values from
1c9a0 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
1c9b0 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65  istinct().*/.#de
1c9c0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1c9d0 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20  NCT_NOOP      0 
1c9e0 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79   /* DISTINCT key
1c9f0 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f  word not used */
1ca00 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1ca10 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20  ISTINCT_UNIQUE  
1ca20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69    1  /* No dupli
1ca30 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cates */.#define
1ca40 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1ca50 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20  ORDERED   2  /* 
1ca60 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61  All duplicates a
1ca70 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23  re adjacent */.#
1ca80 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1ca90 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20  TINCT_UNORDERED 
1caa0 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73  3  /* Duplicates
1cab0 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a   are scattered *
1cac0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43  /../*.** A NameC
1cad0 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61  ontext defines a
1cae0 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63   context in whic
1caf0 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62  h to resolve tab
1cb00 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a  le and column.**
1cb10 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e   names.  The con
1cb20 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  text consists of
1cb30 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65   a list of table
1cb40 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29  s (the pSrcList)
1cb50 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20   field and.** a 
1cb60 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78  list of named ex
1cb70 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74  pression (pEList
1cb80 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78  ).  The named ex
1cb90 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61  pression list ma
1cba0 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54  y.** be NULL.  T
1cbb0 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f  he pSrc correspo
1cbc0 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20  nds to the FROM 
1cbd0 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
1cbe0 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20  CT or.** to the 
1cbf0 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72  table being oper
1cc00 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52  ated on by INSER
1cc10 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45  T, UPDATE, or DE
1cc20 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45  LETE.  The.** pE
1cc30 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  List corresponds
1cc40 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73   to the result s
1cc50 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61  et of a SELECT a
1cc60 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a  nd is NULL for.*
1cc70 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e  * other statemen
1cc80 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f  ts..**.** NameCo
1cc90 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65  ntexts can be ne
1cca0 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f  sted.  When reso
1ccb0 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65  lving names, the
1ccc0 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63   inner-most.** c
1ccd0 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68  ontext is search
1cce0 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f  ed first.  If no
1ccf0 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
1cd00 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a   the next outer.
1cd10 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68  ** context is ch
1cd20 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65  ecked.  If there
1cd30 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74   is still no mat
1cd40 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e  ch, the next con
1cd50 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b  text.** is check
1cd60 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73  ed.  This proces
1cd70 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69  s continues unti
1cd80 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68  l either a match
1cd90 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20   is found.** or 
1cda0 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65  all contexts are
1cdb0 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20   check.  When a 
1cdc0 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
1cdd0 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20  the nRef member 
1cde0 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78  of.** the contex
1cdf0 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  t containing the
1ce00 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d   match is increm
1ce10 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63  ented..**.** Eac
1ce20 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20  h subquery gets 
1ce30 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78  a new NameContex
1ce40 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69  t.  The pNext fi
1ce50 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  eld points to th
1ce60 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
1ce70 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71   in the parent q
1ce80 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20  uery.  Thus the 
1ce90 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e  process of scann
1cea0 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43  ing the.** NameC
1ceb0 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72  ontext list corr
1cec0 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63  esponds to searc
1ced0 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63  hing through suc
1cee0 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a  cessively outer.
1cef0 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f  ** subqueries lo
1cf00 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63  oking for a matc
1cf10 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d  h..*/.struct Nam
1cf20 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72  eContext {.  Par
1cf30 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
1cf40 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20    /* The parser 
1cf50 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
1cf60 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65  rcList;   /* One
1cf70 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20   or more tables 
1cf80 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20  used to resolve 
1cf90 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e  names */.  union
1cfa0 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20   {.    ExprList 
1cfb0 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f  *pEList;    /* O
1cfc0 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20  ptional list of 
1cfd0 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d  result-set colum
1cfe0 6e 73 20 2a 2f 0a 20 20 20 20 41 67 67 49 6e 66  ns */.    AggInf
1cff0 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f  o *pAggInfo;   /
1d000 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1d010 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61  out aggregates a
1d020 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  t this level */.
1d030 20 20 20 20 55 70 73 65 72 74 20 2a 70 55 70 73      Upsert *pUps
1d040 65 72 74 3b 20 20 20 20 20 2f 2a 20 4f 4e 20 43  ert;     /* ON C
1d050 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
1d060 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
1d070 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 20 20 7d  an upsert */.  }
1d080 20 75 4e 43 3b 0a 20 20 4e 61 6d 65 43 6f 6e 74   uNC;.  NameCont
1d090 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  ext *pNext;  /* 
1d0a0 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20  Next outer name 
1d0b0 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66  context.  NULL f
1d0c0 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a  or outermost */.
1d0d0 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
1d0e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1d0f0 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76   of names resolv
1d100 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65  ed by this conte
1d110 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  xt */.  int nErr
1d120 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1d130 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
1d140 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69   encountered whi
1d150 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  le resolving nam
1d160 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 63 46 6c  es */.  int ncFl
1d170 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
1d180 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f  Zero or more NC_
1d190 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20  * flags defined 
1d1a0 62 65 6c 6f 77 20 2a 2f 0a 20 20 53 65 6c 65 63  below */.  Selec
1d1b0 74 20 2a 70 57 69 6e 53 65 6c 65 63 74 3b 20 20  t *pWinSelect;  
1d1c0 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  /* SELECT statem
1d1d0 65 6e 74 20 66 6f 72 20 61 6e 79 20 77 69 6e 64  ent for any wind
1d1e0 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  ow functions */.
1d1f0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
1d200 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
1d210 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63   NameContext, nc
1d220 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a  Flags field..**.
1d230 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
1d240 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65  ints (all checke
1d250 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
1d260 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41 67 67  .**    NC_HasAgg
1d270 20 20 20 20 3d 3d 20 53 46 5f 48 61 73 41 67 67      == SF_HasAgg
1d280 20 20 20 20 3d 3d 20 45 50 5f 41 67 67 0a 2a 2a      == EP_Agg.**
1d290 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67      NC_MinMaxAgg
1d2a0 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67   == SF_MinMaxAgg
1d2b0 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f   == SQLITE_FUNC_
1d2c0 4d 49 4e 4d 41 58 0a 2a 2a 20 20 20 20 4e 43 5f  MINMAX.**    NC_
1d2d0 48 61 73 57 69 6e 20 20 20 20 3d 3d 20 45 50 5f  HasWin    == EP_
1d2e0 57 69 6e 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e  Win.**.*/.#defin
1d2f0 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30  e NC_AllowAgg  0
1d300 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67  x0001  /* Aggreg
1d310 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ate functions ar
1d320 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a  e allowed here *
1d330 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72  /.#define NC_Par
1d340 74 49 64 78 20 20 20 30 78 30 30 30 32 20 20 2f  tIdx   0x0002  /
1d350 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
1d360 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e  ing a partial in
1d370 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65  dex WHERE */.#de
1d380 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20  fine NC_IsCheck 
1d390 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75    0x0004  /* Tru
1d3a0 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e  e if resolving n
1d3b0 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20  ames in a CHECK 
1d3c0 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
1d3d0 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75  efine NC_InAggFu
1d3e0 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72  nc 0x0008  /* Tr
1d3f0 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20  ue if analyzing 
1d400 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20  arguments to an 
1d410 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  agg func */.#def
1d420 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20  ine NC_HasAgg   
1d430 20 30 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20   0x0010  /* One 
1d440 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
1d450 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e  e functions seen
1d460 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
1d470 64 78 45 78 70 72 20 20 20 30 78 30 30 32 30 20  dxExpr   0x0020 
1d480 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
1d490 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66  lving columns of
1d4a0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f   CREATE INDEX */
1d4b0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 56 61 72 53  .#define NC_VarS
1d4c0 65 6c 65 63 74 20 30 78 30 30 34 30 20 20 2f 2a  elect 0x0040  /*
1d4d0 20 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75   A correlated su
1d4e0 62 71 75 65 72 79 20 68 61 73 20 62 65 65 6e 20  bquery has been 
1d4f0 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
1d500 4e 43 5f 55 45 4c 69 73 74 20 20 20 20 30 78 30  NC_UEList    0x0
1d510 30 38 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  080  /* True if 
1d520 75 4e 43 2e 70 45 4c 69 73 74 20 69 73 20 75 73  uNC.pEList is us
1d530 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  ed */.#define NC
1d540 5f 55 41 67 67 49 6e 66 6f 20 20 30 78 30 31 30  _UAggInfo  0x010
1d550 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e  0  /* True if uN
1d560 43 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 75 73  C.pAggInfo is us
1d570 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  ed */.#define NC
1d580 5f 55 55 70 73 65 72 74 20 20 20 30 78 30 32 30  _UUpsert   0x020
1d590 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e  0  /* True if uN
1d5a0 43 2e 70 55 70 73 65 72 74 20 69 73 20 75 73 65  C.pUpsert is use
1d5b0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  d */.#define NC_
1d5c0 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30  MinMaxAgg 0x1000
1d5d0 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67    /* min/max agg
1d5e0 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53  regates seen.  S
1d5f0 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f  ee note above */
1d600 0a 23 64 65 66 69 6e 65 20 4e 43 5f 43 6f 6d 70  .#define NC_Comp
1d610 6c 65 78 20 20 20 30 78 32 30 30 30 20 20 2f 2a  lex   0x2000  /*
1d620 20 54 72 75 65 20 69 66 20 61 20 66 75 6e 63 74   True if a funct
1d630 69 6f 6e 20 6f 72 20 73 75 62 71 75 65 72 79 20  ion or subquery 
1d640 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
1d650 4e 43 5f 41 6c 6c 6f 77 57 69 6e 20 20 30 78 34  NC_AllowWin  0x4
1d660 30 30 30 20 20 2f 2a 20 57 69 6e 64 6f 77 20 66  000  /* Window f
1d670 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c  unctions are all
1d680 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65  owed here */.#de
1d690 66 69 6e 65 20 4e 43 5f 48 61 73 57 69 6e 20 20  fine NC_HasWin  
1d6a0 20 20 30 78 38 30 30 30 20 20 2f 2a 20 4f 6e 65    0x8000  /* One
1d6b0 20 6f 72 20 6d 6f 72 65 20 77 69 6e 64 6f 77 20   or more window 
1d6c0 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a  functions seen *
1d6d0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 44  /.#define NC_IsD
1d6e0 44 4c 20 20 20 20 30 78 31 30 30 30 30 20 20 2f  DL    0x10000  /
1d6f0 2a 20 52 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  * Resolving name
1d700 73 20 69 6e 20 61 20 43 52 45 41 54 45 20 73 74  s in a CREATE st
1d710 61 74 65 6d 65 6e 74 20 2a 2f 0a 0a 2f 2a 0a 2a  atement */../*.*
1d720 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1d730 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f   the following o
1d740 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20  bject describes 
1d750 61 20 73 69 6e 67 6c 65 20 4f 4e 20 43 4f 4e 46  a single ON CONF
1d760 4c 49 43 54 0a 2a 2a 20 63 6c 61 75 73 65 20 69  LICT.** clause i
1d770 6e 20 61 6e 20 75 70 73 65 72 74 2e 0a 2a 2a 0a  n an upsert..**.
1d780 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74 54 61  ** The pUpsertTa
1d790 72 67 65 74 20 66 69 65 6c 64 20 69 73 20 6f 6e  rget field is on
1d7a0 6c 79 20 73 65 74 20 69 66 20 74 68 65 20 4f 4e  ly set if the ON
1d7b0 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
1d7c0 20 69 6e 63 6c 75 64 65 73 0a 2a 2a 20 63 6f 6e   includes.** con
1d7d0 66 6c 69 63 74 2d 74 61 72 67 65 74 20 63 6c 61  flict-target cla
1d7e0 75 73 65 2e 20 20 28 49 6e 20 22 4f 4e 20 43 4f  use.  (In "ON CO
1d7f0 4e 46 4c 49 43 54 28 61 2c 62 29 22 20 74 68 65  NFLICT(a,b)" the
1d800 20 22 28 61 2c 62 29 22 20 69 73 20 74 68 65 0a   "(a,b)" is the.
1d810 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67  ** conflict-targ
1d820 65 74 20 63 6c 61 75 73 65 2e 29 20 20 54 68 65  et clause.)  The
1d830 20 70 55 70 73 65 72 74 54 61 72 67 65 74 57 68   pUpsertTargetWh
1d840 65 72 65 20 69 73 20 74 68 65 20 6f 70 74 69 6f  ere is the optio
1d850 6e 61 6c 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61  nal.** WHERE cla
1d860 75 73 65 20 75 73 65 64 20 74 6f 20 69 64 65 6e  use used to iden
1d870 74 69 66 79 20 70 61 72 74 69 61 6c 20 75 6e 69  tify partial uni
1d880 71 75 65 20 69 6e 64 65 78 65 73 2e 0a 2a 2a 0a  que indexes..**.
1d890 2a 2a 20 70 55 70 73 65 72 74 53 65 74 20 69 73  ** pUpsertSet is
1d8a0 20 74 68 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c   the list of col
1d8b0 75 6d 6e 3d 65 78 70 72 20 74 65 72 6d 73 20 6f  umn=expr terms o
1d8c0 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
1d8d0 74 65 6d 65 6e 74 2e 20 0a 2a 2a 20 54 68 65 20  tement. .** The 
1d8e0 70 55 70 73 65 72 74 53 65 74 20 66 69 65 6c 64  pUpsertSet field
1d8f0 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20 61 20 4f   is NULL for a O
1d900 4e 20 43 4f 4e 46 4c 49 43 54 20 44 4f 20 4e 4f  N CONFLICT DO NO
1d910 54 48 49 4e 47 2e 20 20 54 68 65 0a 2a 2a 20 70  THING.  The.** p
1d920 55 70 73 65 72 74 57 68 65 72 65 20 69 73 20 74  UpsertWhere is t
1d930 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1d940 66 6f 72 20 74 68 65 20 55 50 44 41 54 45 20 61  for the UPDATE a
1d950 6e 64 20 69 73 20 4e 55 4c 4c 20 69 66 20 74 68  nd is NULL if th
1d960 65 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61 75 73  e.** WHERE claus
1d970 65 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a 2a 2f  e is omitted..*/
1d980 0a 73 74 72 75 63 74 20 55 70 73 65 72 74 20 7b  .struct Upsert {
1d990 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 55 70  .  ExprList *pUp
1d9a0 73 65 72 74 54 61 72 67 65 74 3b 20 20 2f 2a 20  sertTarget;  /* 
1d9b0 4f 70 74 69 6f 6e 61 6c 20 64 65 73 63 72 69 70  Optional descrip
1d9c0 74 69 6f 6e 20 6f 66 20 63 6f 6e 66 6c 69 63 74  tion of conflict
1d9d0 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45  ing index */.  E
1d9e0 78 70 72 20 2a 70 55 70 73 65 72 74 54 61 72 67  xpr *pUpsertTarg
1d9f0 65 74 57 68 65 72 65 3b 20 2f 2a 20 57 48 45 52  etWhere; /* WHER
1da00 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72  E clause for par
1da10 74 69 61 6c 20 69 6e 64 65 78 20 74 61 72 67 65  tial index targe
1da20 74 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ts */.  ExprList
1da30 20 2a 70 55 70 73 65 72 74 53 65 74 3b 20 20 20   *pUpsertSet;   
1da40 20 20 2f 2a 20 54 68 65 20 53 45 54 20 63 6c 61    /* The SET cla
1da50 75 73 65 20 66 72 6f 6d 20 61 6e 20 4f 4e 20 43  use from an ON C
1da60 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45 20 2a  ONFLICT UPDATE *
1da70 2f 0a 20 20 45 78 70 72 20 2a 70 55 70 73 65 72  /.  Expr *pUpser
1da80 74 57 68 65 72 65 3b 20 20 20 20 20 20 20 2f 2a  tWhere;       /*
1da90 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
1daa0 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  r the ON CONFLIC
1dab0 54 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 2f 2a  T UPDATE */.  /*
1dac0 20 54 68 65 20 66 69 65 6c 64 73 20 61 62 6f 76   The fields abov
1dad0 65 20 63 6f 6d 70 72 69 73 65 20 74 68 65 20 70  e comprise the p
1dae0 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 74 68  arse tree for th
1daf0 65 20 75 70 73 65 72 74 20 63 6c 61 75 73 65 2e  e upsert clause.
1db00 0a 20 20 2a 2a 20 54 68 65 20 66 69 65 6c 64 73  .  ** The fields
1db10 20 62 65 6c 6f 77 20 61 72 65 20 75 73 65 64 20   below are used 
1db20 74 6f 20 74 72 61 6e 73 66 65 72 20 69 6e 66 6f  to transfer info
1db30 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65  rmation from the
1db40 20 49 4e 53 45 52 54 0a 20 20 2a 2a 20 70 72 6f   INSERT.  ** pro
1db50 63 65 73 73 69 6e 67 20 64 6f 77 6e 20 69 6e 74  cessing down int
1db60 6f 20 74 68 65 20 55 50 44 41 54 45 20 70 72 6f  o the UPDATE pro
1db70 63 65 73 73 69 6e 67 20 77 68 69 6c 65 20 67 65  cessing while ge
1db80 6e 65 72 61 74 69 6e 67 20 63 6f 64 65 2e 0a 20  nerating code.. 
1db90 20 2a 2a 20 55 70 73 65 72 74 20 6f 77 6e 73 20   ** Upsert owns 
1dba0 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  the memory alloc
1dbb0 61 74 65 64 20 61 62 6f 76 65 2c 20 62 75 74 20  ated above, but 
1dbc0 6e 6f 74 20 74 68 65 20 6d 65 6d 6f 72 79 20 62  not the memory b
1dbd0 65 6c 6f 77 2e 20 2a 2f 0a 20 20 49 6e 64 65 78  elow. */.  Index
1dbe0 20 2a 70 55 70 73 65 72 74 49 64 78 3b 20 20 20   *pUpsertIdx;   
1dbf0 20 20 20 20 20 2f 2a 20 43 6f 6e 73 74 72 61 69       /* Constrai
1dc00 6e 74 20 74 68 61 74 20 70 55 70 73 65 72 74 54  nt that pUpsertT
1dc10 61 72 67 65 74 20 69 64 65 6e 74 69 66 69 65 73  arget identifies
1dc20 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
1dc30 55 70 73 65 72 74 53 72 63 3b 20 20 20 20 20 20  UpsertSrc;      
1dc40 2f 2a 20 54 61 62 6c 65 20 74 6f 20 62 65 20 75  /* Table to be u
1dc50 70 64 61 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  pdated */.  int 
1dc60 72 65 67 44 61 74 61 3b 20 20 20 20 20 20 20 20  regData;        
1dc70 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72        /* First r
1dc80 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1dc90 61 72 72 61 79 20 6f 66 20 56 41 4c 55 45 53 20  array of VALUES 
1dca0 2a 2f 0a 20 20 69 6e 74 20 69 44 61 74 61 43 75  */.  int iDataCu
1dcb0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
1dcc0 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20 64  * Index of the d
1dcd0 61 74 61 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  ata cursor */.  
1dce0 69 6e 74 20 69 49 64 78 43 75 72 3b 20 20 20 20  int iIdxCur;    
1dcf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1dd00 65 78 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  ex of the first 
1dd10 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a  index cursor */.
1dd20 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
1dd30 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1dd40 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1dd50 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e   contains all in
1dd60 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65  formation.** nee
1dd70 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ded to generate 
1dd80 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c  code for a singl
1dd90 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1dda0 6e 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68  nt..**.** See th
1ddb0 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74  e header comment
1ddc0 20 6f 6e 20 74 68 65 20 63 6f 6d 70 75 74 65 4c   on the computeL
1ddd0 69 6d 69 74 52 65 67 69 73 74 65 72 73 28 29 20  imitRegisters() 
1dde0 72 6f 75 74 69 6e 65 20 66 6f 72 20 61 0a 2a 2a  routine for a.**
1ddf0 20 64 65 74 61 69 6c 65 64 20 64 65 73 63 72 69   detailed descri
1de00 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 65 61  ption of the mea
1de10 6e 69 6e 67 20 6f 66 20 74 68 65 20 69 4c 69 6d  ning of the iLim
1de20 69 74 20 61 6e 64 20 69 4f 66 66 73 65 74 20 66  it and iOffset f
1de30 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64  ields..**.** add
1de40 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72  rOpenEphm[] entr
1de50 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ies contain the 
1de60 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70  address of OP_Op
1de70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f  enEphemeral opco
1de80 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64  des..** These ad
1de90 64 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20  dresses must be 
1dea0 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77  stored so that w
1deb0 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e  e can go back an
1dec0 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65  d fill in.** the
1ded0 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20   P4_KEYINFO and 
1dee0 50 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61  P2 parameters la
1def0 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68  ter.  Neither th
1df00 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a  e KeyInfo nor.**
1df10 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
1df20 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e  olumns in P2 can
1df30 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20   be computed at 
1df40 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a  the same time.**
1df50 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45   as the OP_OpenE
1df60 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  phm instruction 
1df70 69 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65  is coded because
1df80 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69   not.** enough i
1df90 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
1dfa0 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75   the compound qu
1dfb0 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20  ery is known at 
1dfc0 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54  that point..** T
1dfd0 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
1dfe0 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61  ddrOpenTran[0] a
1dff0 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20  nd [1] contains 
1e000 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
1e010 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  ces.** for the r
1e020 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20  esult set.  The 
1e030 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
1e040 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74  OpenEphm[2] cont
1e050 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a  ains collating.*
1e060 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20  * sequences for 
1e070 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
1e080 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  use..*/.struct S
1e090 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69  elect {.  ExprLi
1e0a0 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20  st *pEList;     
1e0b0 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f   /* The fields o
1e0c0 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a  f the result */.
1e0d0 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
1e0e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1e0f0 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f  of: TK_UNION TK_
1e100 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54  ALL TK_INTERSECT
1e110 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20   TK_EXCEPT */.  
1e120 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63 74 52 6f  LogEst nSelectRo
1e130 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  w;     /* Estima
1e140 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65  ted number of re
1e150 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75  sult rows */.  u
1e160 33 32 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20  32 selFlags;    
1e170 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
1e180 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   SF_* values */.
1e190 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f    int iLimit, iO
1e1a0 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f  ffset;   /* Memo
1e1b0 72 79 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c  ry registers hol
1e1c0 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46  ding LIMIT & OFF
1e1d0 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  SET counters */.
1e1e0 20 20 75 33 32 20 73 65 6c 49 64 3b 20 20 20 20    u32 selId;    
1e1f0 20 20 20 20 20 20 20 20 20 2f 2a 20 55 6e 69 71           /* Uniq
1e200 75 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e 75  ue identifier nu
1e210 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20 53 45  mber for this SE
1e220 4c 45 43 54 20 2a 2f 0a 20 20 69 6e 74 20 61 64  LECT */.  int ad
1e230 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20  drOpenEphm[2];  
1e240 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   /* OP_OpenEphem
1e250 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64   opcodes related
1e260 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20   to this select 
1e270 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
1e280 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rc;         /* T
1e290 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
1e2a0 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65  /.  Expr *pWhere
1e2b0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
1e2c0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a  e WHERE clause *
1e2d0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
1e2e0 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68  roupBy;    /* Th
1e2f0 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
1e300 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61  e */.  Expr *pHa
1e310 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  ving;         /*
1e320 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75   The HAVING clau
1e330 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
1e340 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f   *pOrderBy;    /
1e350 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
1e360 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63  lause */.  Selec
1e370 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20  t *pPrior;      
1e380 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63    /* Prior selec
1e390 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
1e3a0 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74  select statement
1e3b0 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e   */.  Select *pN
1e3c0 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
1e3d0 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74  Next select to t
1e3e0 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d  he left in a com
1e3f0 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20  pound */.  Expr 
1e400 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20  *pLimit;        
1e410 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65    /* LIMIT expre
1e420 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e  ssion. NULL mean
1e430 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20  s not used. */. 
1e440 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
1e450 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20          /* WITH 
1e460 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20  clause attached 
1e470 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20  to this select. 
1e480 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 23 69 66 6e  Or NULL. */.#ifn
1e490 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1e4a0 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 57 69 6e  WINDOWFUNC.  Win
1e4b0 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20 20 20  dow *pWin;      
1e4c0 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 77      /* List of w
1e4d0 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20  indow functions 
1e4e0 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69  */.  Window *pWi
1e4f0 6e 44 65 66 6e 3b 20 20 20 20 20 20 2f 2a 20 4c  nDefn;      /* L
1e500 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 77 69 6e  ist of named win
1e510 64 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e 73 20  dow definitions 
1e520 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
1e530 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
1e540 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65  es for Select.se
1e550 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46  lFlags.  The "SF
1e560 22 20 70 72 65 66 69 78 20 73 74 61 6e 64 73 20  " prefix stands 
1e570 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46  for.** "Select F
1e580 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  lag"..**.** Valu
1e590 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61  e constraints (a
1e5a0 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61  ll checked via a
1e5b0 73 73 65 72 74 28 29 29 0a 2a 2a 20 20 20 20 20  ssert()).**     
1e5c0 53 46 5f 48 61 73 41 67 67 20 20 20 20 20 3d 3d  SF_HasAgg     ==
1e5d0 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20   NC_HasAgg.**   
1e5e0 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20    SF_MinMaxAgg  
1e5f0 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  == NC_MinMaxAgg 
1e600 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55      == SQLITE_FU
1e610 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20 20 20  NC_MINMAX.**    
1e620 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20 3d   SF_FixedLimit =
1e630 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49  = WHERE_USE_LIMI
1e640 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  T.*/.#define SF_
1e650 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 30  Distinct       0
1e660 78 30 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75  x00001  /* Outpu
1e670 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54  t should be DIST
1e680 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  INCT */.#define 
1e690 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20 20 20  SF_All          
1e6a0 20 20 30 78 30 30 30 30 32 20 20 2f 2a 20 49 6e    0x00002  /* In
1e6b0 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c 20 6b  cludes the ALL k
1e6c0 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
1e6d0 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20  e SF_Resolved   
1e6e0 20 20 20 20 30 78 30 30 30 30 34 20 20 2f 2a 20      0x00004  /* 
1e6f0 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65  Identifiers have
1e700 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a   been resolved *
1e710 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67  /.#define SF_Agg
1e720 72 65 67 61 74 65 20 20 20 20 20 20 30 78 30 30  regate      0x00
1e730 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  008  /* Contains
1e740 20 61 67 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f   agg functions o
1e750 72 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a  r a GROUP BY */.
1e760 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 41 67  #define SF_HasAg
1e770 67 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31  g         0x0001
1e780 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61  0  /* Contains a
1e790 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1e7a0 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ns */.#define SF
1e7b0 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20  _UsesEphemeral  
1e7c0 30 78 30 30 30 32 30 20 20 2f 2a 20 55 73 65 73  0x00020  /* Uses
1e7d0 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72   the OpenEphemer
1e7e0 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65  al opcode */.#de
1e7f0 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64  fine SF_Expanded
1e800 20 20 20 20 20 20 20 30 78 30 30 30 34 30 20 20         0x00040  
1e810 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  /* sqlite3Select
1e820 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20  Expand() called 
1e830 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69  on this */.#defi
1e840 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66  ne SF_HasTypeInf
1e850 6f 20 20 20 20 30 78 30 30 30 38 30 20 20 2f 2a  o    0x00080  /*
1e860 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73   FROM subqueries
1e870 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61   have Table meta
1e880 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20  data */.#define 
1e890 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20  SF_Compound     
1e8a0 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20 50 61    0x00100  /* Pa
1e8b0 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64  rt of a compound
1e8c0 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e   query */.#defin
1e8d0 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20  e SF_Values     
1e8e0 20 20 20 20 30 78 30 30 32 30 30 20 20 2f 2a 20      0x00200  /* 
1e8f0 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d  Synthesized from
1e900 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a   VALUES clause *
1e910 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c  /.#define SF_Mul
1e920 74 69 56 61 6c 75 65 20 20 20 20 20 30 78 30 30  tiValue     0x00
1e930 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56  400  /* Single V
1e940 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74 68 20  ALUES term with 
1e950 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
1e960 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74  .#define SF_Nest
1e970 65 64 46 72 6f 6d 20 20 20 20 20 30 78 30 30 38  edFrom     0x008
1e980 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61  00  /* Part of a
1e990 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46   parenthesized F
1e9a0 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  ROM clause */.#d
1e9b0 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41  efine SF_MinMaxA
1e9c0 67 67 20 20 20 20 20 20 30 78 30 31 30 30 30 20  gg      0x01000 
1e9d0 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f   /* Aggregate co
1e9e0 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f  ntaining min() o
1e9f0 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66 69  r max() */.#defi
1ea00 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65 20  ne SF_Recursive 
1ea10 20 20 20 20 20 30 78 30 32 30 30 30 20 20 2f 2a       0x02000  /*
1ea20 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20 70   The recursive p
1ea30 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73 69  art of a recursi
1ea40 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e  ve CTE */.#defin
1ea50 65 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20  e SF_FixedLimit 
1ea60 20 20 20 20 30 78 30 34 30 30 30 20 20 2f 2a 20      0x04000  /* 
1ea70 6e 53 65 6c 65 63 74 52 6f 77 20 73 65 74 20 62  nSelectRow set b
1ea80 79 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c 49 4d  y a constant LIM
1ea90 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  IT */.#define SF
1eaa0 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20  _MaybeConvert   
1eab0 30 78 30 38 30 30 30 20 20 2f 2a 20 4e 65 65 64  0x08000  /* Need
1eac0 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
1ead0 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
1eae0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1eaf0 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20 20  _Converted      
1eb00 30 78 31 30 30 30 30 20 20 2f 2a 20 42 79 20 63  0x10000  /* By c
1eb10 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
1eb20 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
1eb30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 49   */.#define SF_I
1eb40 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20 30 78  ncludeHidden  0x
1eb50 32 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c 75 64  20000  /* Includ
1eb60 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  e hidden columns
1eb70 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64   in output */.#d
1eb80 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6c 65 78  efine SF_Complex
1eb90 52 65 73 75 6c 74 20 20 30 78 34 30 30 30 30 20  Result  0x40000 
1eba0 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 6e 74 61   /* Result conta
1ebb0 69 6e 73 20 73 75 62 71 75 65 72 79 20 6f 72 20  ins subquery or 
1ebc0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
1ebd0 69 6e 65 20 53 46 5f 57 68 65 72 65 42 65 67 69  ine SF_WhereBegi
1ebe0 6e 20 20 20 20 20 30 78 38 30 30 30 30 20 20 2f  n     0x80000  /
1ebf0 2a 20 52 65 61 6c 6c 79 20 61 20 57 68 65 72 65  * Really a Where
1ec00 42 65 67 69 6e 28 29 20 63 61 6c 6c 2e 20 20 44  Begin() call.  D
1ec10 65 62 75 67 20 4f 6e 6c 79 20 2a 2f 0a 0a 2f 2a  ebug Only */../*
1ec20 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20  .** The results 
1ec30 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20  of a SELECT can 
1ec40 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20 69  be distributed i
1ec50 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
1ec60 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79  as defined.** by
1ec70 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
1ec80 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54  owing macros.  T
1ec90 68 65 20 22 53 52 54 22 20 70 72 65 66 69 78 20  he "SRT" prefix 
1eca0 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65  means "SELECT Re
1ecb0 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a  sult.** Type"..*
1ecc0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69  *.**     SRT_Uni
1ecd0 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  on       Store r
1ece0 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20  esults as a key 
1ecf0 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69  in a temporary i
1ed00 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20 20 20 20  ndex.**         
1ed10 20 20 20 20 20 20 20 20 20 20 20 20 69 64 65 6e              iden
1ed20 74 69 66 69 65 64 20 62 79 20 70 44 65 73 74 2d  tified by pDest-
1ed30 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20  >iSDParm..**.** 
1ed40 20 20 20 20 53 52 54 5f 45 78 63 65 70 74 20 20      SRT_Except  
1ed50 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c      Remove resul
1ed60 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70  ts from the temp
1ed70 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44 65 73  orary index pDes
1ed80 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a  t->iSDParm..**.*
1ed90 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73 74 73  *     SRT_Exists
1eda0 20 20 20 20 20 20 53 74 6f 72 65 20 61 20 31 20        Store a 1 
1edb0 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70  in memory cell p
1edc0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66  Dest->iSDParm if
1edd0 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20   the result.**  
1ede0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edf0 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d     set is not em
1ee00 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  pty..**.**     S
1ee10 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 54  RT_Discard     T
1ee20 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73  hrow the results
1ee30 20 61 77 61 79 2e 20 20 54 68 69 73 20 69 73 20   away.  This is 
1ee40 75 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a  used by SELECT.*
1ee50 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1ee60 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73        statements
1ee70 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1ee80 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70   whose only purp
1ee90 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20  ose is.**       
1eea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1eeb0 65 20 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f  e side-effects o
1eec0 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  f functions..**.
1eed0 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62  ** All of the ab
1eee0 6f 76 65 20 61 72 65 20 66 72 65 65 20 74 6f 20  ove are free to 
1eef0 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44  ignore their ORD
1ef00 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68  ER BY clause. Th
1ef10 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c  ose that.** foll
1ef20 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68  ow must honor th
1ef30 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1ef40 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  e..**.**     SRT
1ef50 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47 65 6e  _Output      Gen
1ef60 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f  erate a row of o
1ef70 75 74 70 75 74 20 28 75 73 69 6e 67 20 74 68 65  utput (using the
1ef80 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a   OP_ResultRow.**
1ef90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efa0 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72       opcode) for
1efb0 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65   each row in the
1efc0 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a   result set..**.
1efd0 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20  **     SRT_Mem  
1efe0 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69         Only vali
1eff0 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
1f000 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  is a single colu
1f010 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  mn..**          
1f020 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 72 65             Store
1f030 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d   the first colum
1f040 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 72  n of the first r
1f050 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20  esult row.**    
1f060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f070 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65   in register pDe
1f080 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e  st->iSDParm then
1f090 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73   abandon the res
1f0a0 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1f0b0 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
1f0c0 71 75 65 72 79 2e 20 20 54 68 69 73 20 64 65 73  query.  This des
1f0d0 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73  tination implies
1f0e0 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a   "LIMIT 1"..**.*
1f0f0 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20 20 20  *     SRT_Set   
1f100 20 20 20 20 20 20 54 68 65 20 72 65 73 75 6c 74        The result
1f110 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c   must be a singl
1f120 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65  e column.  Store
1f130 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20   each.**        
1f140 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
1f150 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74 68   of result as th
1f160 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70  e key in table p
1f170 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1f180 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f190 20 20 20 20 20 20 41 70 70 6c 79 20 74 68 65 20        Apply the 
1f1a0 61 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e  affinity pDest->
1f1b0 61 66 66 53 64 73 74 20 62 65 66 6f 72 65 20 73  affSdst before s
1f1c0 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20  toring.**       
1f1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1f1e0 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20  sults.  Used to 
1f1f0 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53  implement "IN (S
1f200 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a  ELECT ...)"..**.
1f210 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d  **     SRT_Ephem
1f220 54 61 62 20 20 20 20 43 72 65 61 74 65 20 61 6e  Tab    Create an
1f230 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1f240 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1f250 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20  and store.**    
1f260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f270 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 65 72   the result ther
1f280 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  e. The cursor is
1f290 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72   left open after
1f2a0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f2b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e          returnin
1f2c0 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65  g.  This is like
1f2d0 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70   SRT_Table excep
1f2e0 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20  t that.**       
1f2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1f300 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75  is destination u
1f310 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ses OP_OpenEphem
1f320 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a  eral to create.*
1f330 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f340 20 20 20 20 20 20 74 68 65 20 74 61 62 6c 65 20        the table 
1f350 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  first..**.**    
1f360 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
1f370 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72   Generate a co-r
1f380 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65 74 75  outine that retu
1f390 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66  rns a new row of
1f3a0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f3b0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 20          results 
1f3c0 65 61 63 68 20 74 69 6d 65 20 69 74 20 69 73 20  each time it is 
1f3d0 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e  invoked.  The en
1f3e0 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20  try point.**    
1f3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f400 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69   of the co-routi
1f410 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ne is stored in 
1f420 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e  register pDest->
1f430 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20  iSDParm.**      
1f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1f450 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f  nd the result ro
1f460 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70  w is stored in p
1f470 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69  Dest->nDest regi
1f480 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20  sters.**        
1f490 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1f4a0 72 74 69 6e 67 20 77 69 74 68 20 70 44 65 73 74  rting with pDest
1f4b0 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  ->iSdst..**.**  
1f4c0 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20     SRT_Table    
1f4d0 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1f4e0 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61   in temporary ta
1f4f0 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1f500 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46  rm..**     SRT_F
1f510 69 66 6f 20 20 20 20 20 20 20 20 54 68 69 73 20  ifo        This 
1f520 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65  is like SRT_Ephe
1f530 6d 54 61 62 20 65 78 63 65 70 74 20 74 68 61 74  mTab except that
1f540 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20   the table.**   
1f550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f560 20 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20    is assumed to 
1f570 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e  already be open.
1f580 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a    SRT_Fifo has.*
1f590 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f5a0 20 20 20 20 20 20 74 68 65 20 61 64 64 69 74 69        the additi
1f5b0 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66  onal property of
1f5c0 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69   being able to i
1f5d0 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  gnore.**        
1f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1f5f0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1f600 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1f610 44 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72  DistFifo    Stor
1f620 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74  e results in a t
1f630 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1f640 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1f650 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f660 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75        But also u
1f670 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  se temporary tab
1f680 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1f690 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20  m+1 as.**       
1f6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 20                a 
1f6b0 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72  record of all pr
1f6c0 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20  ior results and 
1f6d0 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69  ignore any dupli
1f6e0 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  cate.**         
1f6f0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 73              rows
1f700 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20  .  Name means:  
1f710 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e  "Distinct Fifo".
1f720 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51  .**.**     SRT_Q
1f730 75 65 75 65 20 20 20 20 20 20 20 53 74 6f 72 65  ueue       Store
1f740 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f   results in prio
1f750 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74  rity queue pDest
1f760 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c  ->iSDParm (reall
1f770 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  y.**            
1f780 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65           an inde
1f790 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65  x).  Append a se
1f7a0 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f  quence number so
1f7b0 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65   that all entrie
1f7c0 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1f7d0 20 20 20 20 20 20 20 20 20 61 72 65 20 64 69 73           are dis
1f7e0 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  tinct..**.**    
1f7f0 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20   SRT_DistQueue  
1f800 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1f810 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65  n priority queue
1f820 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1f830 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20  only if.**      
1f840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1f850 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68  he same record h
1f860 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74  as never been st
1f870 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68  ored before.  Th
1f880 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1f890 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 61           index a
1f8a0 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  t pDest->iSDParm
1f8b0 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f  +1 hold all prio
1f8c0 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65  r stores..*/.#de
1f8d0 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20  fine SRT_Union  
1f8e0 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72        1  /* Stor
1f8f0 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73  e result as keys
1f900 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
1f910 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65  #define SRT_Exce
1f920 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52  pt       2  /* R
1f930 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f  emove result fro
1f940 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20  m a UNION index 
1f950 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1f960 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20 2f  xists       3  /
1f970 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65  * Store 1 if the
1f980 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65   result is not e
1f990 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
1f9a0 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
1f9b0 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61   4  /* Do not sa
1f9c0 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ve the results a
1f9d0 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  nywhere */.#defi
1f9e0 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20  ne SRT_Fifo     
1f9f0 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20      5  /* Store 
1fa00 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
1fa10 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
1fa20 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
1fa30 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20  e SRT_DistFifo  
1fa40 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52     6  /* Like SR
1fa50 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71  T_Fifo, but uniq
1fa60 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20  ue results only 
1fa70 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51  */.#define SRT_Q
1fa80 75 65 75 65 20 20 20 20 20 20 20 20 37 20 20 2f  ueue        7  /
1fa90 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
1faa0 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64  n an queue */.#d
1fab0 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75  efine SRT_DistQu
1fac0 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b  eue    8  /* Lik
1fad0 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74  e SRT_Queue, but
1fae0 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20   unique results 
1faf0 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20  only */../* The 
1fb00 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
1fb10 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61  is ignored for a
1fb20 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ll of the above 
1fb30 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72  */.#define Ignor
1fb40 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28  ableOrderby(X) (
1fb50 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f  (X->eDest)<=SRT_
1fb60 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66  DistQueue)..#def
1fb70 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20  ine SRT_Output  
1fb80 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75       9  /* Outpu
1fb90 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65  t each row of re
1fba0 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sult */.#define 
1fbb0 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
1fbc0 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  10  /* Store res
1fbd0 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20  ult in a memory 
1fbe0 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cell */.#define 
1fbf0 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
1fc00 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  11  /* Store res
1fc10 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20  ults as keys in 
1fc20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
1fc30 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ine SRT_EphemTab
1fc40 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74      12  /* Creat
1fc50 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20  e transient tab 
1fc60 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53  and store like S
1fc70 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66  RT_Table */.#def
1fc80 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e  ine SRT_Coroutin
1fc90 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72  e   13  /* Gener
1fca0 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ate a single row
1fcb0 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
1fcc0 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20  efine SRT_Table 
1fcd0 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f        14  /* Sto
1fce0 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74  re result as dat
1fcf0 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61  a with an automa
1fd00 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a  tic rowid */../*
1fd10 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1fd20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64  of this object d
1fd30 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74  escribes where t
1fd40 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73  o put of the res
1fd50 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c  ults of.** a SEL
1fd60 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
1fd70 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44  /.struct SelectD
1fd80 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74  est {.  u8 eDest
1fd90 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1fda0 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f  How to dispose o
1fdb0 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20  f the results.  
1fdc0 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76  On of SRT_* abov
1fdd0 65 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50  e. */.  int iSDP
1fde0 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  arm;         /* 
1fdf0 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64  A parameter used
1fe00 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69   by the eDest di
1fe10 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f  sposal method */
1fe20 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20  .  int iSdst;   
1fe30 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
1fe40 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72  register where r
1fe50 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74  esults are writt
1fe60 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73  en */.  int nSds
1fe70 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
1fe80 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  Number of regist
1fe90 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  ers allocated */
1fea0 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 53 64 73  .  char *zAffSds
1feb0 74 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e  t;      /* Affin
1fec0 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65 44  ity used when eD
1fed0 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a  est==SRT_Set */.
1fee0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64    ExprList *pOrd
1fef0 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f  erBy;  /* Key co
1ff00 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75  lumns for SRT_Qu
1ff10 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74  eue and SRT_Dist
1ff20 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  Queue */.};../*.
1ff30 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67  ** During code g
1ff40 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61  eneration of sta
1ff50 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20  tements that do 
1ff60 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54  inserts into AUT
1ff70 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61  OINCREMENT.** ta
1ff80 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  bles, the follow
1ff90 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
1ffa0 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
1ffb0 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49  he Table.u.autoI
1ffc0 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  nc.p.** pointer 
1ffd0 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72  of each autoincr
1ffe0 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72  ement table to r
1fff0 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20  ecord some side 
20000 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
20010 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e  .** the code gen
20020 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57  erator needs.  W
20030 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70  e have to keep p
20040 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63  er-table autoinc
20050 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d  rement.** inform
20060 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e  ation in case in
20070 73 65 72 74 73 20 61 72 65 20 64 6f 6e 65 20 77  serts are done w
20080 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20  ithin triggers. 
20090 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74   Triggers do not
200a0 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f  .** normally coo
200b0 72 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63  rdinate their ac
200c0 74 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65  tivities, but we
200d0 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72   do need to coor
200e0 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f  dinate the.** lo
200f0 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67  ading and saving
20100 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   of autoincremen
20110 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  t information..*
20120 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63  /.struct Autoinc
20130 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63  Info {.  Autoinc
20140 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f  Info *pNext;   /
20150 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63  * Next info bloc
20160 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74  k in a list of t
20170 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62  hem all */.  Tab
20180 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
20190 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73     /* Table this
201a0 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65   info block refe
201b0 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69  rs to */.  int i
201c0 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
201d0 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c   /* Index in sql
201e0 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61  ite3.aDb[] of da
201f0 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70  tabase holding p
20200 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  Tab */.  int reg
20210 43 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Ctr;           /
20220 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
20230 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f  r holding the ro
20240 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d  wid counter */.}
20250 3b 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73  ;../*.** At leas
20260 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  t one instance o
20270 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
20280 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65  structure is cre
20290 61 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a  ated for each.**
202a0 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61   trigger that ma
202b0 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65  y be fired while
202c0 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45   parsing an INSE
202d0 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
202e0 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  LETE.** statemen
202f0 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65  t. All such obje
20300 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  cts are stored i
20310 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  n the linked lis
20320 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50  t headed at.** P
20330 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
20340 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63   and deleted onc
20350 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70  e statement comp
20360 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e  ilation has been
20370 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a  .** completed..*
20380 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d  *.** A Vdbe sub-
20390 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70  program that imp
203a0 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79  lements the body
203b0 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65   and WHEN clause
203c0 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54   of trigger.** T
203d0 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67  riggerPrg.pTrigg
203e0 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64  er, assuming a d
203f0 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
20400 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20  CT clause of.** 
20410 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e  TriggerPrg.orcon
20420 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  f, is stored in 
20430 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70  the TriggerPrg.p
20440 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65  Program variable
20450 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70  ..** The Parse.p
20460 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
20470 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74  never contains t
20480 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20  wo entries with 
20490 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75  the same.** valu
204a0 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69  es for both pTri
204b0 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e  gger and orconf.
204c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67  .**.** The Trigg
204d0 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30  erPrg.aColmask[0
204e0 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
204f0 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f  t to a mask of o
20500 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  ld.* columns.** 
20510 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74  accessed (or set
20520 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65   to 0 for trigge
20530 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65  rs fired as a re
20540 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a  sult of INSERT.*
20550 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53  * statements). S
20560 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72  imilarly, the Tr
20570 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
20580 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[1] variable is
20590 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73   set to.** a mas
205a0 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
205b0 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  ns used by the p
205c0 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63  rogram..*/.struc
205d0 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20  t TriggerPrg {. 
205e0 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
205f0 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67  er;      /* Trig
20600 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d  ger this program
20610 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20   was coded from 
20620 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
20630 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
20640 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61  Next entry in Pa
20650 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
20660 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f  list */.  SubPro
20670 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
20680 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70    /* Program imp
20690 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67  lementing pTrigg
206a0 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69  er/orconf */.  i
206b0 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  nt orconf;      
206c0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
206d0 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
206e0 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43  licy */.  u32 aC
206f0 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20  olmask[2];      
20700 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c    /* Masks of ol
20710 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  d.*, new.* colum
20720 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d  ns accessed */.}
20730 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62  ;../*.** The yDb
20740 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f  Mask datatype fo
20750 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66  r the bitmask of
20760 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
20770 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20  tabases..*/.#if 
20780 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
20790 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66  HED>30.  typedef
207a0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79   unsigned char y
207b0 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d  DbMask[(SQLITE_M
207c0 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38  AX_ATTACHED+9)/8
207d0 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  ];.# define DbMa
207e0 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
207f0 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c  ((M)[(I)/8]&(1<<
20800 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20  ((I)&7)))!=0).# 
20810 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
20820 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74  o(M)      memset
20830 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29  ((M),0,sizeof(M)
20840 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
20850 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
20860 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28  )[(I)/8]|=(1<<((
20870 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20  I)&7)).# define 
20880 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
20890 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b     sqlite3DbMask
208a0 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66  AllZero(M).# def
208b0 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
208c0 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44  o(M)   (sqlite3D
208d0 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d  bMaskAllZero(M)=
208e0 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  =0).#else.  type
208f0 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  def unsigned int
20900 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69   yDbMask;.# defi
20910 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
20920 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79  I)    (((M)&(((y
20930 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29  DbMask)1)<<(I)))
20940 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
20950 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
20960 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20   (M)=0.# define 
20970 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
20980 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61     (M)|=(((yDbMa
20990 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65  sk)1)<<(I)).# de
209a0 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
209b0 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23  ro(M)   (M)==0.#
209c0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
209d0 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d  nZero(M)   (M)!=
209e0 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
209f0 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f  An SQL parser co
20a00 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f  ntext.  A copy o
20a10 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
20a20 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75   is passed throu
20a30 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72  gh.** the parser
20a40 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61   and down into a
20a50 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63  ll the parser ac
20a60 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20  tion routine in 
20a70 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72  order to.** carr
20a80 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61  y around informa
20a90 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f  tion that is glo
20aa0 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72  bal to the entir
20ab0 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  e parse..**.** T
20ac0 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  he structure is 
20ad0 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f  divided into two
20ae0 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68   parts.  When th
20af0 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64  e parser and cod
20b00 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61  e.** generate ca
20b10 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65  ll themselves re
20b20 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66  cursively, the f
20b30 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
20b40 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73   structure.** is
20b50 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68   constant but th
20b60 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73  e second part is
20b70 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65   reset at the be
20b80 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20  ginning and end 
20b90 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72  of.** each recur
20ba0 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sion..**.** The 
20bb0 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61  nTableLock and a
20bc0 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62  TableLock variab
20bd0 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
20be0 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d  d if the shared-
20bf0 63 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72 65  cache.** feature
20c00 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20   is enabled (if 
20c10 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73  sqlite3Tsd()->us
20c20 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74  eSharedData is t
20c30 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a  rue). They are.*
20c40 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
20c50 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65  the set of table
20c60 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20  -locks required 
20c70 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  by the statement
20c80 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c   being.** compil
20c90 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c  ed. Function sql
20ca0 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20  ite3TableLock() 
20cb0 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65  is used to add e
20cc0 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a  ntries to the.**
20cd0 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74   list..*/.struct
20ce0 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74   Parse {.  sqlit
20cf0 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
20d00 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61  /* The main data
20d10 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  base structure *
20d20 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  /.  char *zErrMs
20d30 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65  g;       /* An e
20d40 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
20d50 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20    Vdbe *pVdbe;  
20d60 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67         /* An eng
20d70 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e  ine for executin
20d80 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63  g database bytec
20d90 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  ode */.  int rc;
20da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20db0 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
20dc0 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20  m execution */. 
20dd0 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b   u8 colNamesSet;
20de0 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66        /* TRUE af
20df0 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d  ter OP_ColumnNam
20e00 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65  e has been issue
20e10 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20  d to pVdbe */.  
20e20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20  u8 checkSchema; 
20e30 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73       /* Causes s
20e40 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65  chema cookie che
20e50 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
20e60 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64  r */.  u8 nested
20e70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
20e80 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
20e90 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72  calls to the par
20ea0 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74  ser/code generat
20eb0 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70  or */.  u8 nTemp
20ec0 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
20ed0 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72  Number of tempor
20ee0 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e  ary registers in
20ef0 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20   aTempReg[] */. 
20f00 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65   u8 isMultiWrite
20f10 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
20f20 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d   statement may m
20f30 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c  odify/insert mul
20f40 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20  tiple rows */.  
20f50 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20  u8 mayAbort;    
20f60 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
20f70 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68  statement may th
20f80 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
20f90 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68  eption */.  u8 h
20fa0 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20  asCompound;     
20fb0 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f   /* Need to invo
20fc0 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ke convertCompou
20fd0 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
20fe0 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43  ry() */.  u8 okC
20ff0 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f  onstFactor;    /
21000 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f  * OK to factor o
21010 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a  ut constants */.
21020 20 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b    u8 disableLook
21030 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72  aside; /* Number
21040 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73   of times lookas
21050 69 64 65 20 68 61 73 20 62 65 65 6e 20 64 69 73  ide has been dis
21060 61 62 6c 65 64 20 2a 2f 0a 20 20 75 38 20 64 69  abled */.  u8 di
21070 73 61 62 6c 65 56 74 61 62 3b 20 20 20 20 20 20  sableVtab;      
21080 2f 2a 20 44 69 73 61 62 6c 65 20 61 6c 6c 20 76  /* Disable all v
21090 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 66 6f  irtual tables fo
210a0 72 20 74 68 69 73 20 70 61 72 73 65 20 2a 2f 0a  r this parse */.
210b0 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b    int nRangeReg;
210c0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
210d0 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  f the temporary 
210e0 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a  register block *
210f0 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65  /.  int iRangeRe
21100 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73  g;       /* Firs
21110 74 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65  t register in te
21120 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
21130 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   block */.  int 
21140 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  nErr;           
21150 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
21160 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69  rors seen */.  i
21170 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20  nt nTab;        
21180 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
21190 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f   previously allo
211a0 63 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f  cated VDBE curso
211b0 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d  rs */.  int nMem
211c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
211d0 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  Number of memory
211e0 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66   cells used so f
211f0 61 72 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70  ar */.  int szOp
21200 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20  Alloc;       /* 
21210 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  Bytes of memory 
21220 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
21230 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a  for Vdbe.aOp[] *
21240 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66 54 61 62  /.  int iSelfTab
21250 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c  ;        /* Tabl
21260 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
21270 68 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 65 78  h an index on ex
21280 70 72 2c 20 6f 72 20 6e 65 67 61 74 69 76 65 0a  pr, or negative.
21290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212a0 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65         ** of the
212b0 20 62 61 73 65 20 72 65 67 69 73 74 65 72 20 64   base register d
212c0 75 72 69 6e 67 20 63 68 65 63 6b 2d 63 6f 6e 73  uring check-cons
212d0 74 72 61 69 6e 74 20 65 76 61 6c 20 2a 2f 0a 20  traint eval */. 
212e0 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20   int nLabel;    
212f0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 2a 6e 65        /* The *ne
21300 67 61 74 69 76 65 2a 20 6f 66 20 74 68 65 20 6e  gative* of the n
21310 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20  umber of labels 
21320 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  used */.  int nL
21330 61 62 65 6c 41 6c 6c 6f 63 3b 20 20 20 20 20 2f  abelAlloc;     /
21340 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74  * Number of slot
21350 73 20 69 6e 20 61 4c 61 62 65 6c 20 2a 2f 0a 20  s in aLabel */. 
21360 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20   int *aLabel;   
21370 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74        /* Space t
21380 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c  o hold the label
21390 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
213a0 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43  *pConstExpr;/* C
213b0 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
213c0 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63  ons */.  Token c
213d0 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a  onstraintName;/*
213e0 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
213f0 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c  straint currentl
21400 79 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a  y being parsed *
21410 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74  /.  yDbMask writ
21420 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72  eMask;   /* Star
21430 74 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61  t a write transa
21440 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64  ction on these d
21450 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44  atabases */.  yD
21460 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b  bMask cookieMask
21470 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66  ;  /* Bitmask of
21480 20 73 63 68 65 6d 61 20 76 65 72 69 66 69 65 64   schema verified
21490 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
214a0 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20  int regRowid;   
214b0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
214c0 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f   holding rowid o
214d0 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65  f CREATE TABLE e
214e0 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ntry */.  int re
214f0 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f  gRoot;         /
21500 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
21510 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  ng root page num
21520 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65  ber for new obje
21530 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61  cts */.  int nMa
21540 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  xArg;         /*
21550 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65 64   Max args passed
21560 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f   to user functio
21570 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d  n by sub-program
21580 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63   */.  int nSelec
21590 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  t;         /* Nu
215a0 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73  mber of SELECT s
215b0 74 6d 74 73 2e 20 43 6f 75 6e 74 65 72 20 66 6f  tmts. Counter fo
215c0 72 20 53 65 6c 65 63 74 2e 73 65 6c 49 64 20 2a  r Select.selId *
215d0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
215e0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
215f0 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c  HE.  int nTableL
21600 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ock;        /* N
21610 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69  umber of locks i
21620 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a  n aTableLock */.
21630 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61    TableLock *aTa
21640 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75  bleLock; /* Requ
21650 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73  ired table locks
21660 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   for shared-cach
21670 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  e mode */.#endif
21680 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
21690 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72  pAinc;  /* Infor
216a0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54  mation about AUT
216b0 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74  OINCREMENT count
216c0 65 72 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ers */.  Parse *
216d0 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a  pToplevel;    /*
216e0 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
216f0 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61   for main progra
21700 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20  m (or NULL) */. 
21710 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72   Table *pTrigger
21720 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74  Tab;  /* Table t
21730 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e  riggers are bein
21740 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20  g coded for */. 
21750 20 50 61 72 73 65 20 2a 70 50 61 72 65 6e 74 50   Parse *pParentP
21760 61 72 73 65 3b 20 2f 2a 20 50 61 72 65 6e 74 20  arse; /* Parent 
21770 70 61 72 73 65 72 20 69 66 20 74 68 69 73 20 70  parser if this p
21780 61 72 73 65 72 20 69 73 20 6e 65 73 74 65 64 20  arser is nested 
21790 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54  */.  int addrCrT
217a0 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64  ab;       /* Add
217b0 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74  ress of OP_Creat
217c0 65 42 74 72 65 65 20 6f 70 63 6f 64 65 20 6f 6e  eBtree opcode on
217d0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
217e0 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f  .  u32 nQueryLoo
217f0 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e  p;      /* Est n
21800 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69  umber of iterati
21810 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20 28  ons of a query (
21820 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20  10*log2(N)) */. 
21830 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20   u32 oldmask;   
21840 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
21850 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72   old.* columns r
21860 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75  eferenced */.  u
21870 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20  32 newmask;     
21880 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e      /* Mask of n
21890 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ew.* columns ref
218a0 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20  erenced */.  u8 
218b0 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20  eTriggerOp;     
218c0 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20    /* TK_UPDATE, 
218d0 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f  TK_INSERT or TK_
218e0 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65  DELETE */.  u8 e
218f0 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  Orconf;         
21900 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43   /* Default ON C
21910 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66  ONFLICT policy f
21920 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73  or trigger steps
21930 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65   */.  u8 disable
21940 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72  Triggers;  /* Tr
21950 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72  ue to disable tr
21960 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a  iggers */..  /**
21970 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21980 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21990 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
219a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
219b0 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69  ********.  ** Fi
219c0 65 6c 64 73 20 61 62 6f 76 65 20 6d 75 73 74 20  elds above must 
219d0 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  be initialized t
219e0 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20 66 69 65  o zero.  The fie
219f0 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 2c  lds that follow,
21a00 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20 74 68  .  ** down to th
21a10 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
21a20 68 65 20 72 65 63 75 72 73 69 76 65 20 73 65 63  he recursive sec
21a30 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65 65  tion, do not nee
21a40 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69 6e 69  d to be.  ** ini
21a50 74 69 61 6c 69 7a 65 64 20 61 73 20 74 68 65 79  tialized as they
21a60 20 77 69 6c 6c 20 62 65 20 73 65 74 20 62 65 66   will be set bef
21a70 6f 72 65 20 62 65 69 6e 67 20 75 73 65 64 2e 20  ore being used. 
21a80 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 69 73   The boundary is
21a90 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64  .  ** determined
21aa0 20 62 79 20 6f 66 66 73 65 74 6f 66 28 50 61 72   by offsetof(Par
21ab0 73 65 2c 61 54 65 6d 70 52 65 67 29 2e 0a 20 20  se,aTempReg)..  
21ac0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ad0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ae0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21af0 2a 2a 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 2f 0a 0a 20 20 69  **********/..  i
21b10 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20  nt aTempReg[8]; 
21b20 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e         /* Holdin
21b30 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f  g area for tempo
21b40 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a  rary registers *
21b50 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54  /.  Token sNameT
21b60 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54  oken;       /* T
21b70 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c  oken with unqual
21b80 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a  ified schema obj
21b90 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f  ect name */..  /
21ba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21bb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21bc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21bd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21be0 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62  ********.  ** Ab
21bf0 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  ove is constant 
21c00 62 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f  between recursio
21c10 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65  ns.  Below is re
21c20 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61  set before and a
21c30 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72  fter.  ** each r
21c40 65 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62  ecursion.  The b
21c50 6f 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20  oundary between 
21c60 74 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e  these two region
21c70 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a  s is determined.
21c80 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65    ** using offse
21c90 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54  tof(Parse,sLastT
21ca0 6f 6b 65 6e 29 20 73 6f 20 74 68 65 20 73 4c 61  oken) so the sLa
21cb0 73 74 54 6f 6b 65 6e 20 66 69 65 6c 64 20 6d 75  stToken field mu
21cc0 73 74 20 62 65 20 74 68 65 0a 20 20 2a 2a 20 66  st be the.  ** f
21cd0 69 72 73 74 20 66 69 65 6c 64 20 69 6e 20 74 68  irst field in th
21ce0 65 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69  e recursive regi
21cf0 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
21d00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21d10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21d20 2a 2a 2a 2a 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 2f 0a  **************/.
21d40 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f  .  Token sLastTo
21d50 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  ken;       /* Th
21d60 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72  e last token par
21d70 73 65 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 6e  sed */.  ynVar n
21d80 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
21d90 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
21da0 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65  '?' variables se
21db0 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f  en in the SQL so
21dc0 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 69 50 6b   far */.  u8 iPk
21dd0 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
21de0 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45      /* ASC or DE
21df0 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50  SC for INTEGER P
21e00 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20  RIMARY KEY */.  
21e10 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20  u8 explain;     
21e20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
21e30 65 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e  e if the EXPLAIN
21e40 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f   flag is found o
21e50 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23  n the query */.#
21e60 69 66 20 21 28 64 65 66 69 6e 65 64 28 53 51 4c  if !(defined(SQL
21e70 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
21e80 54 41 42 4c 45 29 20 26 26 20 64 65 66 69 6e 65  TABLE) && define
21e90 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  d(SQLITE_OMIT_AL
21ea0 54 45 52 54 41 42 4c 45 29 29 0a 20 20 75 38 20  TERTABLE)).  u8 
21eb0 65 50 61 72 73 65 4d 6f 64 65 3b 20 20 20 20 20  eParseMode;     
21ec0 20 20 20 20 20 20 20 2f 2a 20 50 41 52 53 45 5f         /* PARSE_
21ed0 4d 4f 44 45 5f 58 58 58 20 63 6f 6e 73 74 61 6e  MODE_XXX constan
21ee0 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  t */.#endif.#ifn
21ef0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
21f00 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
21f10 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20  nt nVtabLock;   
21f20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
21f30 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61  er of virtual ta
21f40 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a  bles to lock */.
21f50 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48 65  #endif.  int nHe
21f60 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
21f70 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
21f80 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20   tree height of 
21f90 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65  current sub-sele
21fa0 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ct */.#ifndef SQ
21fb0 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
21fc0 4e 0a 20 20 69 6e 74 20 61 64 64 72 45 78 70 6c  N.  int addrExpl
21fd0 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ain;          /*
21fe0 20 41 64 64 72 65 73 73 20 6f 66 20 63 75 72 72   Address of curr
21ff0 65 6e 74 20 4f 50 5f 45 78 70 6c 61 69 6e 20 6f  ent OP_Explain o
22000 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  pcode */.#endif.
22010 20 20 56 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b    VList *pVList;
22020 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
22030 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 76  apping between v
22040 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e  ariable names an
22050 64 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56  d numbers */.  V
22060 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b  dbe *pReprepare;
22070 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62           /* VM b
22080 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20  eing reprepared 
22090 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72  (sqlite3Reprepar
220a0 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  e()) */.  const 
220b0 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20  char *zTail;    
220c0 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74      /* All SQL t
220d0 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73  ext past the las
220e0 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73  t semicolon pars
220f0 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ed */.  Table *p
22100 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20  NewTable;       
22110 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69    /* A table bei
22120 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ng constructed b
22130 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  y CREATE TABLE *
22140 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 77 49  /.  Index *pNewI
22150 6e 64 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a  ndex;         /*
22160 20 41 6e 20 69 6e 64 65 78 20 62 65 69 6e 67 20   An index being 
22170 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43  constructed by C
22180 52 45 41 54 45 20 49 4e 44 45 58 2e 0a 20 20 20  REATE INDEX..   
22190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221a0 20 20 20 20 20 20 20 20 20 2a 2a 20 41 6c 73 6f           ** Also
221b0 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 72 65   used to hold re
221c0 64 75 6e 64 61 6e 74 20 55 4e 49 51 55 45 20 63  dundant UNIQUE c
221d0 6f 6e 73 74 72 61 69 6e 74 73 0a 20 20 20 20 20  onstraints.     
221e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221f0 20 20 20 20 20 20 20 2a 2a 20 64 75 72 69 6e 67         ** during
22200 20 61 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e   a RENAME COLUMN
22210 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
22220 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20  NewTrigger;     
22230 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72  /* Trigger under
22240 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20   construct by a 
22250 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a  CREATE TRIGGER *
22260 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
22270 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a  zAuthContext; /*
22280 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74   The 6th paramet
22290 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20  er to db->xAuth 
222a0 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66  callbacks */.#if
222b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
222c0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
222d0 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20  Token sArg;     
222e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d            /* Com
222f0 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20  plete text of a 
22300 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20  module argument 
22310 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56  */.  Table **apV
22320 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f  tabLock;       /
22330 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72  * Pointer to vir
22340 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64  tual tables need
22350 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23  ing locking */.#
22360 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70  endif.  Table *p
22370 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20  ZombieTab;      
22380 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62    /* List of Tab
22390 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65  le objects to de
223a0 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64 65 20  lete after code 
223b0 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  gen */.  Trigger
223c0 50 72 67 20 2a 70 54 72 69 67 67 65 72 50 72 67  Prg *pTriggerPrg
223d0 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73  ;  /* Linked lis
223e0 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67  t of coded trigg
223f0 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ers */.  With *p
22400 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
22410 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49     /* Current WI
22420 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55  TH clause, or NU
22430 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  LL */.  With *pW
22440 69 74 68 54 6f 46 72 65 65 3b 20 20 20 20 20 20  ithToFree;      
22450 20 20 2f 2a 20 46 72 65 65 20 74 68 69 73 20 57    /* Free this W
22460 49 54 48 20 6f 62 6a 65 63 74 20 61 74 20 74 68  ITH object at th
22470 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61 72  e end of the par
22480 73 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  se */.#ifndef SQ
22490 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
224a0 41 42 4c 45 0a 20 20 52 65 6e 61 6d 65 54 6f 6b  ABLE.  RenameTok
224b0 65 6e 20 2a 70 52 65 6e 61 6d 65 3b 20 20 20 20  en *pRename;    
224c0 20 2f 2a 20 54 6f 6b 65 6e 73 20 73 75 62 6a 65   /* Tokens subje
224d0 63 74 20 74 6f 20 72 65 6e 61 6d 69 6e 67 20 62  ct to renaming b
224e0 79 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2a 2f  y ALTER TABLE */
224f0 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23 64 65 66  .#endif.};..#def
22500 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 4e  ine PARSE_MODE_N
22510 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 30 0a 23  ORMAL        0.#
22520 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44  define PARSE_MOD
22530 45 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 20  E_DECLARE_VTAB  
22540 31 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  1.#define PARSE_
22550 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55  MODE_RENAME_COLU
22560 4d 4e 20 32 0a 23 64 65 66 69 6e 65 20 50 41 52  MN 2.#define PAR
22570 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 54  SE_MODE_RENAME_T
22580 41 42 4c 45 20 20 33 0a 0a 2f 2a 0a 2a 2a 20 53  ABLE  3../*.** S
22590 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e 74 65 72  izes and pointer
225a0 73 20 6f 66 20 76 61 72 69 6f 75 73 20 70 61 72  s of various par
225b0 74 73 20 6f 66 20 74 68 65 20 50 61 72 73 65 20  ts of the Parse 
225c0 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66 69  object..*/.#defi
225d0 6e 65 20 50 41 52 53 45 5f 48 44 52 5f 53 5a 20  ne PARSE_HDR_SZ 
225e0 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61  offsetof(Parse,a
225f0 54 65 6d 70 52 65 67 29 20 2f 2a 20 52 65 63 75  TempReg) /* Recu
22600 72 73 69 76 65 20 70 61 72 74 20 77 2f 6f 20 61  rsive part w/o a
22610 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65 66 69  ColCache*/.#defi
22620 6e 65 20 50 41 52 53 45 5f 52 45 43 55 52 53 45  ne PARSE_RECURSE
22630 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72  _SZ offsetof(Par
22640 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 20  se,sLastToken)  
22650 20 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70    /* Recursive p
22660 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50  art */.#define P
22670 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28 73 69  ARSE_TAIL_SZ (si
22680 7a 65 6f 66 28 50 61 72 73 65 29 2d 50 41 52 53  zeof(Parse)-PARS
22690 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 2f 2a  E_RECURSE_SZ) /*
226a0 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65 20 70   Non-recursive p
226b0 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50  art */.#define P
226c0 41 52 53 45 5f 54 41 49 4c 28 58 29 20 28 28 28  ARSE_TAIL(X) (((
226d0 63 68 61 72 2a 29 28 58 29 29 2b 50 41 52 53 45  char*)(X))+PARSE
226e0 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 20 2f 2a  _RECURSE_SZ)  /*
226f0 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 61 69 6c   Pointer to tail
22700 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72   */../*.** Retur
22710 6e 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e  n true if curren
22720 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71  tly inside an sq
22730 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
22740 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69  ab() call..*/.#i
22750 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
22760 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
22770 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
22780 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a  RE_VTAB 0.#else.
22790 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
227a0 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73  LARE_VTAB (pPars
227b0 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3d 3d 50  e->eParseMode==P
227c0 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c 41 52  ARSE_MODE_DECLAR
227d0 45 5f 56 54 41 42 29 0a 23 65 6e 64 69 66 0a 0a  E_VTAB).#endif..
227e0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
227f0 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
22800 4c 45 29 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  LE).  #define IN
22810 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43 54 20 30  _RENAME_OBJECT 0
22820 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
22830 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43   IN_RENAME_OBJEC
22840 54 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72 73  T (pParse->ePars
22850 65 4d 6f 64 65 3e 3d 50 41 52 53 45 5f 4d 4f 44  eMode>=PARSE_MOD
22860 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29  E_RENAME_COLUMN)
22870 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
22880 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
22890 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 20 26  _VIRTUALTABLE) &
228a0 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
228b0 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
228c0 29 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 53  ).  #define IN_S
228d0 50 45 43 49 41 4c 5f 50 41 52 53 45 20 30 0a 23  PECIAL_PARSE 0.#
228e0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49  else.  #define I
228f0 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52 53 45 20  N_SPECIAL_PARSE 
22900 28 70 50 61 72 73 65 2d 3e 65 50 61 72 73 65 4d  (pParse->eParseM
22910 6f 64 65 21 3d 50 41 52 53 45 5f 4d 4f 44 45 5f  ode!=PARSE_MODE_
22920 4e 4f 52 4d 41 4c 29 0a 23 65 6e 64 69 66 0a 0a  NORMAL).#endif..
22930 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
22940 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
22950 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  ng structure can
22960 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20   be declared on 
22970 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64  a stack and used
22980 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20  .** to save the 
22990 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
229a0 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74  xt value so that
229b0 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f   it can be resto
229c0 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74  red later..*/.st
229d0 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74  ruct AuthContext
229e0 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
229f0 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20  *zAuthContext;  
22a00 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61   /* Put saved Pa
22a10 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74  rse.zAuthContext
22a20 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65   here */.  Parse
22a30 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
22a40 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61         /* The Pa
22a50 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  rse structure */
22a60 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69  .};../*.** Bitfi
22a70 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35  eld flags for P5
22a80 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75   value in variou
22a90 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a  s opcodes..**.**
22aa0 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
22ab0 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61  ts (enforced via
22ac0 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
22ad0 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41    OPFLAG_LENGTHA
22ae0 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f  RG    == SQLITE_
22af0 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20  FUNC_LENGTH.**  
22b00 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41    OPFLAG_TYPEOFA
22b10 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f  RG    == SQLITE_
22b20 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a 20 20  FUNC_TYPEOF.**  
22b30 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52    OPFLAG_BULKCSR
22b40 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 42        == BTREE_B
22b50 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f 50  ULKLOAD.**    OP
22b60 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20  FLAG_SEEKEQ     
22b70 20 20 3d 3d 20 42 54 52 45 45 5f 53 45 45 4b 5f    == BTREE_SEEK_
22b80 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  EQ.**    OPFLAG_
22b90 46 4f 52 44 45 4c 45 54 45 20 20 20 20 3d 3d 20  FORDELETE    == 
22ba0 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 0a  BTREE_FORDELETE.
22bb0 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 41 56  **    OPFLAG_SAV
22bc0 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42 54 52  EPOSITION == BTR
22bd0 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 0a  EE_SAVEPOSITION.
22be0 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41 55 58  **    OPFLAG_AUX
22bf0 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52  DELETE    == BTR
22c00 45 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a 2f 0a  EE_AUXDELETE.*/.
22c10 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e  #define OPFLAG_N
22c20 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30  CHANGE       0x0
22c30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72  1    /* OP_Inser
22c40 74 3a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65  t: Set to update
22c50 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a   db->nChange */.
22c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c80 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65       /* Also use
22c90 64 20 69 6e 20 50 32 20 28 6e 6f 74 20 50 35 29  d in P2 (not P5)
22ca0 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f   of OP_Delete */
22cb0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22cc0 4e 4f 43 48 4e 47 20 20 20 20 20 20 20 20 30 78  NOCHNG        0x
22cd0 30 31 20 20 20 20 2f 2a 20 4f 50 5f 56 43 6f 6c  01    /* OP_VCol
22ce0 75 6d 6e 20 6e 6f 63 68 61 6e 67 65 20 66 6f 72  umn nochange for
22cf0 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
22d00 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20  ne OPFLAG_EPHEM 
22d10 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
22d20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70  /* OP_Column: Ep
22d30 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69  hemeral output i
22d40 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20  s ok */.#define 
22d50 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
22d60 20 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20       0x20    /* 
22d70 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
22d80 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23  ->lastRowid */.#
22d90 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53  define OPFLAG_IS
22da0 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34  UPDATE      0x04
22db0 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49      /* This OP_I
22dc0 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20  nsert is an sql 
22dd0 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
22de0 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
22df0 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f         0x08    /
22e00 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79  * This is likely
22e10 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
22e20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22e30 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
22e40 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20   0x10    /* Try 
22e50 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20  to avoid a seek 
22e60 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29  in BtreeInsert()
22e70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22e80 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20 20  AG_ISNOOP       
22e90 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44   0x40    /* OP_D
22ea0 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d 75  elete does pre-u
22eb0 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20  pdate-hook only 
22ec0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22ed0 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20  G_LENGTHARG     
22ee0 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x40    /* OP_Co
22ef0 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
22f00 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23  or length() */.#
22f10 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59  define OPFLAG_TY
22f20 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30  PEOFARG     0x80
22f30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
22f40 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74   only used for t
22f50 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69  ypeof() */.#defi
22f60 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  ne OPFLAG_BULKCS
22f70 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  R       0x01    
22f80 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65  /* OP_Open** use
22f90 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63  d to open bulk c
22fa0 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  ursor */.#define
22fb0 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20   OPFLAG_SEEKEQ  
22fc0 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
22fd0 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f   OP_Open** curso
22fe0 72 20 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f  r uses EQ seek o
22ff0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  nly */.#define O
23000 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20  PFLAG_FORDELETE 
23010 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f      0x08    /* O
23020 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75 73  P_Open should us
23030 65 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54  e BTREE_FORDELET
23040 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
23050 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20  LAG_P2ISREG     
23060 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20    0x10    /* P2 
23070 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20  to OP_Open** is 
23080 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  a register numbe
23090 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
230a0 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20  LAG_PERMUTE     
230b0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
230c0 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65  Compare: use the
230d0 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a   permutation */.
230e0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53  #define OPFLAG_S
230f0 41 56 45 50 4f 53 49 54 49 4f 4e 20 20 30 78 30  AVEPOSITION  0x0
23100 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  2    /* OP_Delet
23110 65 2f 49 6e 73 65 72 74 3a 20 73 61 76 65 20 63  e/Insert: save c
23120 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65  ursor pos */.#de
23130 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58 44  fine OPFLAG_AUXD
23140 45 4c 45 54 45 20 20 20 20 20 30 78 30 34 20 20  ELETE     0x04  
23150 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20    /* OP_Delete: 
23160 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c 45 54  index in a DELET
23170 45 20 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  E op */.#define 
23180 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d 41  OPFLAG_NOCHNG_MA
23190 47 49 43 20 20 30 78 36 64 20 20 20 20 2f 2a 20  GIC  0x6d    /* 
231a0 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 73  OP_MakeRecord: s
231b0 65 72 69 61 6c 74 79 70 65 20 31 30 20 69 73 20  erialtype 10 is 
231c0 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63  ok */../*. * Eac
231d0 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e  h trigger presen
231e0 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
231f0 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72  e schema is stor
23200 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63  ed as an instanc
23210 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54  e of. * struct T
23220 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f  rigger.. *. * Po
23230 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e  inters to instan
23240 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
23250 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64  igger are stored
23260 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a   in two ways.. *
23270 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67   1. In the "trig
23280 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65  Hash" hash table
23290 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71   (part of the sq
232a0 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72  lite3* that repr
232b0 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20 20  esents the. *   
232c0 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73   database). This
232d0 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20   allows Trigger 
232e0 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65  structures to be
232f0 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61   retrieved by na
23300 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72  me.. * 2. All tr
23310 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65  iggers associate
23320 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  d with a single 
23330 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e  table form a lin
23340 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20  ked list, using 
23350 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20  the. *    pNext 
23360 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74  member of struct
23370 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e   Trigger. A poin
23380 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ter to the first
23390 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a   element of the.
233a0 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73   *    linked lis
233b0 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74  t is stored as t
233c0 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65  he "pTrigger" me
233d0 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f  mber of the asso
233e0 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72  ciated. *    str
233f0 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a  uct Table.. *. *
23400 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   The "step_list"
23410 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74   member points t
23420 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
23430 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20  ent of a linked 
23440 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69  list. * containi
23450 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ng the SQL state
23460 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
23470 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70  as the trigger p
23480 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75  rogram.. */.stru
23490 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63  ct Trigger {.  c
234a0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
234b0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61         /* The na
234c0 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  me of the trigge
234d0 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r               
234e0 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68           */.  ch
234f0 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20  ar *table;      
23500 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62        /* The tab
23510 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
23520 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
23530 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20  applies */.  u8 
23540 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
23550 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
23560 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
23570 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20  ATE, TK_INSERT  
23580 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74         */.  u8 t
23590 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20  r_tm;           
235a0 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52      /* One of TR
235b0 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52  IGGER_BEFORE, TR
235c0 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20  IGGER_AFTER */. 
235d0 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20   Expr *pWhen;   
235e0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
235f0 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
23600 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d  he expression (m
23610 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20  ay be NULL) */. 
23620 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e   IdList *pColumn
23630 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  s;       /* If t
23640 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45  his is an UPDATE
23650 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74   OF <column-list
23660 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20  > trigger,.     
23670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23680 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c          the <col
23690 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f  umn-list> is sto
236a0 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  red here */.  Sc
236b0 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
236c0 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
236d0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
236e0 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65  rigger */.  Sche
236f0 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20  ma *pTabSchema; 
23700 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
23710 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
23720 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  le */.  TriggerS
23730 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20  tep *step_list; 
23740 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20  /* Link list of 
23750 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
23760 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20  steps           
23770 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a    */.  Trigger *
23780 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
23790 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61  * Next trigger a
237a0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
237b0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  he table */.};..
237c0 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20  /*.** A trigger 
237d0 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f  is either a BEFO
237e0 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74  RE or an AFTER t
237f0 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c  rigger.  The fol
23800 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  lowing constants
23810 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68  .** determine wh
23820 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ich..**.** If th
23830 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65  ere are multiple
23840 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d   triggers, you m
23850 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46  ight of some BEF
23860 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54  ORE and some AFT
23870 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63  ER..** In that c
23880 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61  ases, the consta
23890 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65  nts below can be
238a0 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a   ORed together..
238b0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47  */.#define TRIGG
238c0 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65  ER_BEFORE  1.#de
238d0 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54  fine TRIGGER_AFT
238e0 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e  ER   2../*. * An
238f0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72   instance of str
23900 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
23910 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
23920 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74   a single SQL st
23930 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20  atement. * that 
23940 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74  is a part of a t
23950 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a  rigger-program..
23960 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20   *. * Instances 
23970 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
23980 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64  rStep are stored
23990 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e   in a singly lin
239a0 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64  ked list (linked
239b0 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70  . * using the "p
239c0 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65  Next" member) re
239d0 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20  ferenced by the 
239e0 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
239f0 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73 73  er of the. * ass
23a00 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54  ociated struct T
23a10 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e  rigger instance.
23a20 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
23a30 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64  nt of the linked
23a40 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20   list is. * the 
23a50 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68  first step of th
23a60 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  e trigger-progra
23a70 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70  m.. *. * The "op
23a80 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74  " member indicat
23a90 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20  es whether this 
23aa0 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22  is a "DELETE", "
23ab0 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45  INSERT", "UPDATE
23ac0 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22  " or. * "SELECT"
23ad0 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20   statement. The 
23ae0 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20  meanings of the 
23af0 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73  other members is
23b00 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
23b10 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22  he. * value of "
23b20 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  op" as follows:.
23b30 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
23b40 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e  INSERT). * orcon
23b50 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74  f    -> stores t
23b60 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  he ON CONFLICT a
23b70 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c  lgorithm. * pSel
23b80 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ect   -> If this
23b90 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
23ba0 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e  TO ... SELECT ..
23bb0 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
23bc0 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
23bd0 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20    this stores a 
23be0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53  pointer to the S
23bf0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
23c00 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
23c10 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
23c20 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
23c30 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69  f the table to i
23c40 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70  nsert into.. * p
23c50 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74  ExprList -> If t
23c60 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
23c70 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53   INTO ... VALUES
23c80 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
23c90 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
23ca0 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
23cb0 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e   values to be in
23cc0 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73  serted. Otherwis
23cd0 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69  e NULL.. * pIdLi
23ce0 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  st   -> If this 
23cf0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
23d00 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e  O ... (<column-n
23d10 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e  ames>) VALUES ..
23d20 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
23d30 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65    statement, the
23d40 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68  n this stores th
23d50 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74  e column-names t
23d60 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20  o be. *         
23d70 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e       inserted in
23d80 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  to.. *. * (op ==
23d90 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a   TK_DELETE). * z
23da0 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
23db0 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
23dc0 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65   table to delete
23dd0 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65   from.. * pWhere
23de0 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
23df0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44   clause of the D
23e00 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
23e10 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
23e20 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
23e30 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
23e40 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ULL.. *. * (op =
23e50 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20  = TK_UPDATE). * 
23e60 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
23e70 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
23e80 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74  e table to updat
23e90 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  e.. * pWhere    
23ea0 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
23eb0 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54  use of the UPDAT
23ec0 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
23ed0 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
23ee0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
23ef0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
23f00 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
23f10 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63   A list of the c
23f20 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65  olumns to update
23f30 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73   and the express
23f40 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20  ions to update. 
23f50 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
23f60 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69  hem to. See sqli
23f70 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75  te3Update() docu
23f80 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43  mentation of "pC
23f90 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20  hanges". *      
23fa0 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74          argument
23fb0 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20  .. *. */.struct 
23fc0 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20  TriggerStep {.  
23fd0 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
23fe0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
23ff0 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
24000 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20  ATE, TK_INSERT, 
24010 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75  TK_SELECT */.  u
24020 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  8 orconf;       
24030 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61      /* OE_Rollba
24040 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69  ck etc. */.  Tri
24050 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20  gger *pTrig;    
24060 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72    /* The trigger
24070 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20   that this step 
24080 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a  is a part of */.
24090 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
240a0 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54  t;     /* SELECT
240b0 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48   statement or RH
240c0 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f  S of INSERT INTO
240d0 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20   SELECT ... */. 
240e0 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20   char *zTarget; 
240f0 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20        /* Target 
24100 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45  table for DELETE
24110 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54  , UPDATE, INSERT
24120 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
24130 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  re;        /* Th
24140 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
24150 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  or DELETE or UPD
24160 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45  ATE steps */.  E
24170 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69  xprList *pExprLi
24180 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73  st; /* SET claus
24190 65 20 66 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  e for UPDATE */.
241a0 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73    IdList *pIdLis
241b0 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  t;     /* Column
241c0 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52   names for INSER
241d0 54 20 2a 2f 0a 20 20 55 70 73 65 72 74 20 2a 70  T */.  Upsert *p
241e0 55 70 73 65 72 74 3b 20 20 20 20 20 2f 2a 20 55  Upsert;     /* U
241f0 70 73 65 72 74 20 63 6c 61 75 73 65 73 20 6f 6e  psert clauses on
24200 20 61 6e 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20   an INSERT */.  
24210 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20  char *zSpan;    
24220 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
24230 20 53 51 4c 20 74 65 78 74 20 6f 66 20 74 68 69   SQL text of thi
24240 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 54  s command */.  T
24250 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78  riggerStep *pNex
24260 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74  t;  /* Next in t
24270 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a  he link-list */.
24280 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
24290 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65  Last;  /* Last e
242a0 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c  lement in link-l
242b0 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31  ist. Valid for 1
242c0 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a  st elem only */.
242d0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
242e0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
242f0 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
24300 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  mation used by t
24310 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a  he sqliteFix....
24320 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74  ** routines as t
24330 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72  hey walk the par
24340 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20  se tree to make 
24350 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e  database referen
24360 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e  ces.** explicit.
24370 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
24380 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78  ct DbFixer DbFix
24390 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78  er;.struct DbFix
243a0 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  er {.  Parse *pP
243b0 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68  arse;      /* Th
243c0 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78  e parsing contex
243d0 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67  t.  Error messag
243e0 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20  es written here 
243f0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
24400 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20  hema;    /* Fix 
24410 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63  items to this sc
24420 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56  hema */.  int bV
24430 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a  arOnly;       /*
24440 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61   Check for varia
24450 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f  ble references o
24460 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  nly */.  const c
24470 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20  har *zDb;    /* 
24480 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62  Make sure all ob
24490 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69  jects are contai
244a0 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61  ned in this data
244b0 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
244c0 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a  char *zType;  /*
244d0 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e   Type of the con
244e0 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
244f0 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
24500 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65   */.  const Toke
24510 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d  n *pName; /* Nam
24520 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
24530 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
24540 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
24550 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  };../*.** An obj
24560 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63  ected used to ac
24570 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78  cumulate the tex
24580 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68  t of a string wh
24590 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74  ere we.** do not
245a0 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f   necessarily kno
245b0 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74  w how big the st
245c0 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20  ring will be in 
245d0 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
245e0 63 74 20 73 71 6c 69 74 65 33 5f 73 74 72 20 7b  ct sqlite3_str {
245f0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
24600 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f          /* Optio
24610 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72  nal database for
24620 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e   lookaside.  Can
24630 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68   be NULL */.  ch
24640 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20  ar *zText;      
24650 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67     /* The string
24660 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61   collected so fa
24670 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c  r */.  u32  nAll
24680 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  oc;         /* A
24690 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61  mount of space a
246a0 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78  llocated in zTex
246b0 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c  t */.  u32  mxAl
246c0 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  loc;        /* M
246d0 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61  aximum allowed a
246e0 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f  llocation.  0 fo
246f0 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67  r no malloc usag
24700 65 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68 61  e */.  u32  nCha
24710 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  r;          /* L
24720 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
24730 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ing so far */.  
24740 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20  u8   accError;  
24750 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e       /* SQLITE_N
24760 4f 4d 45 4d 20 6f 72 20 53 51 4c 49 54 45 5f 54  OMEM or SQLITE_T
24770 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20 20  OOBIG */.  u8   
24780 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20 20  printfFlags;    
24790 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  /* SQLITE_PRINTF
247a0 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a   flags below */.
247b0 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  };.#define SQLIT
247c0 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41  E_PRINTF_INTERNA
247d0 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74 65 72  L 0x01  /* Inter
247e0 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e  nal-use-only con
247f0 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65 64 20  verters allowed 
24800 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
24810 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43  E_PRINTF_SQLFUNC
24820 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c 20 66    0x02  /* SQL f
24830 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
24840 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20 2a 2f  s to VXPrintf */
24850 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
24860 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 20  PRINTF_MALLOCED 
24870 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66  0x04  /* True if
24880 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f 63 61   xText is alloca
24890 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a 23 64  ted space */..#d
248a0 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63 65 64  efine isMalloced
248b0 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72 69 6e  (X)  (((X)->prin
248c0 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49 54 45  tfFlags & SQLITE
248d0 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44  _PRINTF_MALLOCED
248e0 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20  )!=0).../*.** A 
248f0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
24900 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
24910 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65  d to communicate
24920 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
24930 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74  from sqlite3Init
24940 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68   and OP_ParseSch
24950 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c  ema into the sql
24960 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
24970 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
24980 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  uct {.  sqlite3 
24990 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  *db;        /* T
249a0 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69 6e  he database bein
249b0 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
249c0 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d  .  char **pzErrM
249d0 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20  sg;    /* Error 
249e0 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20 68  message stored h
249f0 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  ere */.  int iDb
24a00 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
24a10 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62  0 for main datab
24a20 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50  ase.  1 for TEMP
24a30 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48  , 2.. for ATTACH
24a40 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  ed */.  int rc; 
24a50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
24a60 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65  esult code store
24a70 64 20 68 65 72 65 20 2a 2f 0a 20 20 75 33 32 20  d here */.  u32 
24a80 6d 49 6e 69 74 46 6c 61 67 73 3b 20 20 20 20 20  mInitFlags;     
24a90 2f 2a 20 46 6c 61 67 73 20 63 6f 6e 74 72 6f 6c  /* Flags control
24aa0 6c 69 6e 67 20 65 72 72 6f 72 20 6d 65 73 73 61  ling error messa
24ab0 67 65 73 20 2a 2f 0a 20 20 75 33 32 20 6e 49 6e  ges */.  u32 nIn
24ac0 69 74 52 6f 77 3b 20 20 20 20 20 20 20 2f 2a 20  itRow;       /* 
24ad0 4e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 70  Number of rows p
24ae0 72 6f 63 65 73 73 65 64 20 2a 2f 0a 7d 20 49 6e  rocessed */.} In
24af0 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 41  itData;../*.** A
24b00 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
24b10 72 20 6d 49 6e 69 74 46 6c 61 67 73 0a 2a 2f 0a  r mInitFlags.*/.
24b20 23 64 65 66 69 6e 65 20 49 4e 49 54 46 4c 41 47  #define INITFLAG
24b30 5f 41 6c 74 65 72 54 61 62 6c 65 20 20 20 30 78  _AlterTable   0x
24b40 30 30 30 31 20 20 2f 2a 20 54 68 69 73 20 69 73  0001  /* This is
24b50 20 61 20 72 65 70 61 72 73 65 20 61 66 74 65 72   a reparse after
24b60 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2a 2f 0a   ALTER TABLE */.
24b70 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65  ./*.** Structure
24b80 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62   containing glob
24b90 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  al configuration
24ba0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51   data for the SQ
24bb0 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a  Lite library..**
24bc0 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
24bd0 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73  re also contains
24be0 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f   some state info
24bf0 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
24c00 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
24c10 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61   {.  int bMemsta
24c20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
24c30 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
24c40 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20  o enable memory 
24c50 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20  status */.  int 
24c60 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20  bCoreMutex;     
24c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24c80 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
24c90 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f  core mutexing */
24ca0 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65  .  int bFullMute
24cb0 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
24cc0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
24cd0 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65  enable full mute
24ce0 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f  xing */.  int bO
24cf0 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20  penUri;         
24d00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
24d10 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74  rue to interpret
24d20 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52   filenames as UR
24d30 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65  Is */.  int bUse
24d40 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cis;            
24d50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
24d60 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65   covering indice
24d70 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73  s for full-scans
24d80 20 2a 2f 0a 20 20 69 6e 74 20 62 53 6d 61 6c 6c   */.  int bSmall
24d90 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  Malloc;         
24da0 20 20 20 20 20 20 20 20 2f 2a 20 41 76 6f 69 64          /* Avoid
24db0 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c   large memory al
24dc0 6c 6f 63 61 74 69 6f 6e 73 20 69 66 20 74 72 75  locations if tru
24dd0 65 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72  e */.  int mxStr
24de0 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  len;            
24df0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
24e00 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74  mum string lengt
24e10 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72  h */.  int never
24e20 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20 20  Corrupt;        
24e30 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
24e40 62 61 73 65 20 69 73 20 61 6c 77 61 79 73 20 77  base is always w
24e50 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20  ell-formed */.  
24e60 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b  int szLookaside;
24e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e80 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
24e90 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69  kaside buffer si
24ea0 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f  ze */.  int nLoo
24eb0 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
24ec0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
24ed0 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
24ee0 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20  uffer count */. 
24ef0 20 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b   int nStmtSpill;
24f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f10 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e     /* Stmt-journ
24f20 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b  al spill-to-disk
24f30 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20   threshold */.  
24f40 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
24f50 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20  ods m;          
24f60 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
24f70 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
24f80 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
24f90 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
24fa0 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20  thods mutex;    
24fb0 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
24fc0 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a  utex interface *
24fd0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63  /.  sqlite3_pcac
24fe0 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63  he_methods2 pcac
24ff0 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76  he2;  /* Low-lev
25000 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e  el page-cache in
25010 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69  terface */.  voi
25020 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20  d *pHeap;       
25030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25040 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73  * Heap storage s
25050 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
25060 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
25070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
25080 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a  ize of pHeap[] *
25090 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d  /.  int mnReq, m
250a0 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  xReq;           
250b0 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64        /* Min and
250c0 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73   max heap reques
250d0 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71  ts sizes */.  sq
250e0 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d  lite3_int64 szMm
250f0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
25100 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20  /* mmap() space 
25110 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f  per open file */
25120 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
25130 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   mxMmap;        
25140 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
25150 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70  value for szMmap
25160 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67   */.  void *pPag
25170 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
25180 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20          /* Page 
25190 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a  cache memory */.
251a0 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20    int szPage;   
251b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251c0 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
251d0 61 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67  ach page in pPag
251e0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61  e[] */.  int nPa
251f0 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
25200 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
25210 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
25220 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
25230 74 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b  t mxParserStack;
25240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25250 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68  /* maximum depth
25260 20 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73   of the parser s
25270 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68  tack */.  int sh
25280 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64  aredCacheEnabled
25290 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74  ;           /* t
252a0 72 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61  rue if shared-ca
252b0 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64  che mode enabled
252c0 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b   */.  u32 szPma;
252d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252e0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
252f0 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69  um Sorter PMA si
25300 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61  ze */.  /* The a
25310 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e  bove might be in
25320 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e  itialized to non
25330 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c  -zero.  The foll
25340 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c  owing need to al
25350 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61  ways.  ** initia
25360 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77  lly be zero, how
25370 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69  ever. */.  int i
25380 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  sInit;          
25390 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
253a0 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69  True after initi
253b0 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69  alization has fi
253c0 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20  nished */.  int 
253d0 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20  inProgress;     
253e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
253f0 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74   True while init
25400 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72  ialization in pr
25410 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20  ogress */.  int 
25420 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20  isMutexInit;    
25430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25440 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65   True after mute
25450 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69  xes are initiali
25460 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  zed */.  int isM
25470 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20  allocInit;      
25480 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
25490 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
254a0 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
254b0 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65  /.  int isPCache
254c0 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
254d0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
254e0 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
254f0 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
25500 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78  nt nRefInitMutex
25510 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25520 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
25530 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65  ers of pInitMute
25540 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  x */.  sqlite3_m
25550 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78  utex *pInitMutex
25560 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65  ;        /* Mute
25570 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  x used by sqlite
25580 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a  3_initialize() *
25590 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29  /.  void (*xLog)
255a0 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
255b0 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63   char*); /* Func
255c0 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67  tion for logging
255d0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67   */.  void *pLog
255e0 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
255f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
25600 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
25610 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66  xLog() */.#ifdef
25620 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
25630 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53  QLLOG.  void(*xS
25640 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c  qllog)(void*,sql
25650 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
25660 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
25670 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e  *pSqllogArg;.#en
25680 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
25690 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a  E_VDBE_COVERAGE.
256a0 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
256b0 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20  ng callback (if 
256c0 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76  not NULL) is inv
256d0 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44  oked on every VD
256e0 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f  BE branch.  ** o
256f0 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74  peration.  Set t
25700 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e  he callback usin
25710 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  g SQLITE_TESTCTR
25720 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e  L_VDBE_COVERAGE.
25730 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  .  */.  void (*x
25740 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64  VdbeBranch)(void
25750 2a 2c 75 6e 73 69 67 6e 65 64 20 69 53 72 63 4c  *,unsigned iSrcL
25760 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20  ine,u8 eThis,u8 
25770 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  eMx);  /* Callba
25780 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56  ck */.  void *pV
25790 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20  dbeBranchArg;   
257a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257c0 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e    /* 1st argumen
257d0 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64  t */.#endif.#ifd
257e0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
257f0 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a 20 20 73  _DESERIALIZE.  s
25800 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d  qlite3_int64 mxM
25810 65 6d 64 62 53 69 7a 65 3b 20 20 20 20 20 20 20  emdbSize;       
25820 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 20   /* Default max 
25830 6d 65 6d 64 62 20 73 69 7a 65 20 2a 2f 0a 23 65  memdb size */.#e
25840 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
25850 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20  ITE_UNTESTABLE. 
25860 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c   int (*xTestCall
25870 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20  back)(int);     
25880 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79     /* Invoked by
25890 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
258a0 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  () */.#endif.  i
258b0 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75  nt bLocaltimeFau
258c0 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  lt;             
258d0 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c   /* True to fail
258e0 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c   localtime() cal
258f0 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 62 49 6e 74  ls */.  int bInt
25900 65 72 6e 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 20  ernalFunctions; 
25910 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74            /* Int
25920 65 72 6e 61 6c 20 53 51 4c 20 66 75 6e 63 74 69  ernal SQL functi
25930 6f 6e 73 20 61 72 65 20 76 69 73 69 62 6c 65 20  ons are visible 
25940 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65 52 65  */.  int iOnceRe
25950 73 65 74 54 68 72 65 73 68 6f 6c 64 3b 20 20 20  setThreshold;   
25960 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 74         /* When t
25970 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63 65 20  o reset OP_Once 
25980 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 75 33  counters */.  u3
25990 32 20 73 7a 53 6f 72 74 65 72 52 65 66 3b 20 20  2 szSorterRef;  
259a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259b0 2f 2a 20 4d 69 6e 20 73 69 7a 65 20 69 6e 20 62  /* Min size in b
259c0 79 74 65 73 20 74 6f 20 75 73 65 20 73 6f 72 74  ytes to use sort
259d0 65 72 2d 72 65 66 73 20 2a 2f 0a 20 20 75 6e 73  er-refs */.  uns
259e0 69 67 6e 65 64 20 69 6e 74 20 69 50 72 6e 67 53  igned int iPrngS
259f0 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  eed;           /
25a00 2a 20 41 6c 74 65 72 6e 61 74 69 76 65 20 66 69  * Alternative fi
25a10 78 65 64 20 73 65 65 64 20 66 6f 72 20 74 68 65  xed seed for the
25a20 20 50 52 4e 47 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   PRNG */.};../*.
25a30 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73  ** This macro is
25a40 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20   used inside of 
25a50 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
25a60 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20  nts to indicate 
25a70 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65  that.** the asse
25a80 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  rt is only valid
25a90 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65   on a well-forme
25aa0 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73  d database.  Ins
25ab0 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20  tead of:.**.**  
25ac0 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a     assert( X );.
25ad0 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73  **.** One writes
25ae0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
25af0 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54  rt( X || CORRUPT
25b00 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52  _DB );.**.** COR
25b10 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65 20  RUPT_DB is true 
25b20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70  during normal op
25b30 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50  eration.  CORRUP
25b40 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e  T_DB does not in
25b50 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74  dicate.** that t
25b60 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 64  he database is d
25b70 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70  efinitely corrup
25b80 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20  t, only that it 
25b90 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70 74  might be corrupt
25ba0 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65  ..** For most te
25bb0 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50  st cases, CORRUP
25bc0 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20 66  T_DB is set to f
25bd0 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70 65  alse using a spe
25be0 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  cial.** sqlite3_
25bf0 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20  test_control(). 
25c00 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73   This enables as
25c10 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
25c20 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68  s to prove.** th
25c30 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61 6c  ings that are al
25c40 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77 65  ways true for we
25c50 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61  ll-formed databa
25c60 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ses..*/.#define 
25c70 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c  CORRUPT_DB  (sql
25c80 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72  ite3Config.never
25c90 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a  Corrupt==0)../*.
25ca0 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74  ** Context point
25cb0 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74  er passed down t
25cc0 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d  hrough the tree-
25cd0 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  walk..*/.struct 
25ce0 57 61 6c 6b 65 72 20 7b 0a 20 20 50 61 72 73 65  Walker {.  Parse
25cf0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
25d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d10 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63       /* Parser c
25d20 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e  ontext.  */.  in
25d30 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63  t (*xExprCallbac
25d40 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  k)(Walker*, Expr
25d50 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62  *);     /* Callb
25d60 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69  ack for expressi
25d70 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  ons */.  int (*x
25d80 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28  SelectCallback)(
25d90 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29  Walker*,Select*)
25da0 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66  ;  /* Callback f
25db0 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20  or SELECTs */.  
25dc0 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61  void (*xSelectCa
25dd0 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a  llback2)(Walker*
25de0 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63  ,Select*);/* Sec
25df0 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  ond callback for
25e00 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 69 6e   SELECTs */.  in
25e10 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20  t walkerDepth;  
25e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e30 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
25e40 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20  r of subqueries 
25e50 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20  */.  u8 eCode;  
25e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25e80 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73  * A small proces
25e90 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75  sing code */.  u
25ea0 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20  nion {          
25eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ec0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72           /* Extr
25ed0 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62  a data for callb
25ee0 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43  ack */.    NameC
25ef0 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20  ontext *pNC;    
25f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f10 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63       /* Naming c
25f20 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e  ontext */.    in
25f30 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  t n;            
25f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f50 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f 75          /* A cou
25f60 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  nter */.    int 
25f70 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20  iCur;           
25f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f90 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f        /* A curso
25fa0 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  r number */.    
25fb0 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73  SrcList *pSrcLis
25fc0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
25fd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f            /* FRO
25fe0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  M clause */.    
25ff0 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20  struct SrcCount 
26000 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20  *pSrcCount;     
26010 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
26020 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66  nting column ref
26030 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73  erences */.    s
26040 74 72 75 63 74 20 43 43 75 72 48 69 6e 74 20 2a  truct CCurHint *
26050 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20 20 20  pCCurHint;      
26060 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64           /* Used
26070 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72 48 69   by codeCursorHi
26080 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20  nt() */.    int 
26090 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  *aiCol;         
260a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260b0 20 20 20 20 20 20 2f 2a 20 61 72 72 61 79 20 6f        /* array o
260c0 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73  f column indexes
260d0 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49   */.    struct I
260e0 64 78 43 6f 76 65 72 20 2a 70 49 64 78 43 6f 76  dxCover *pIdxCov
260f0 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
26100 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 69    /* Check for i
26110 6e 64 65 78 20 63 6f 76 65 72 61 67 65 20 2a 2f  ndex coverage */
26120 0a 20 20 20 20 73 74 72 75 63 74 20 49 64 78 45  .    struct IdxE
26130 78 70 72 54 72 61 6e 73 20 2a 70 49 64 78 54 72  xprTrans *pIdxTr
26140 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ans;           /
26150 2a 20 43 6f 6e 76 65 72 74 20 69 64 78 65 64 20  * Convert idxed 
26160 65 78 70 72 20 74 6f 20 63 6f 6c 75 6d 6e 20 2a  expr to column *
26170 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  /.    ExprList *
26180 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 20 20  pGroupBy;       
26190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261a0 2f 2a 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  /* GROUP BY clau
261b0 73 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  se */.    Select
261c0 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20   *pSelect;      
261d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261e0 20 20 20 20 2f 2a 20 48 41 56 49 4e 47 20 74 6f      /* HAVING to
261f0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 74   WHERE clause ct
26200 78 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  x */.    struct 
26210 57 69 6e 64 6f 77 52 65 77 72 69 74 65 20 2a 70  WindowRewrite *p
26220 52 65 77 72 69 74 65 3b 20 20 20 20 20 20 20 20  Rewrite;        
26230 20 20 20 2f 2a 20 57 69 6e 64 6f 77 20 72 65 77     /* Window rew
26240 72 69 74 65 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  rite context */.
26250 20 20 20 20 73 74 72 75 63 74 20 57 68 65 72 65      struct Where
26260 43 6f 6e 73 74 20 2a 70 43 6f 6e 73 74 3b 20 20  Const *pConst;  
26270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26280 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 6f   WHERE clause co
26290 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 20 20 73  nstants */.    s
262a0 74 72 75 63 74 20 52 65 6e 61 6d 65 43 74 78 20  truct RenameCtx 
262b0 2a 70 52 65 6e 61 6d 65 3b 20 20 20 20 20 20 20  *pRename;       
262c0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 45 4e 41           /* RENA
262d0 4d 45 20 43 4f 4c 55 4d 4e 20 63 6f 6e 74 65 78  ME COLUMN contex
262e0 74 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a  t */.  } u;.};..
262f0 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61  /* Forward decla
26300 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73  rations */.int s
26310 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57  qlite3WalkExpr(W
26320 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
26330 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
26340 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c  xprList(Walker*,
26350 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
26360 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
26370 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  ct(Walker*, Sele
26380 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
26390 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28  3WalkSelectExpr(
263a0 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
263b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
263c0 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c  lkSelectFrom(Wal
263d0 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
263e0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 57  int sqlite3ExprW
263f0 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c  alkNoop(Walker*,
26400 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
26410 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 4e 6f  ite3SelectWalkNo
26420 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  op(Walker*, Sele
26430 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
26440 33 53 65 6c 65 63 74 57 61 6c 6b 46 61 69 6c 28  3SelectWalkFail(
26450 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
26460 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
26470 5f 44 45 42 55 47 0a 76 6f 69 64 20 73 71 6c 69  _DEBUG.void sqli
26480 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 41 73 73  te3SelectWalkAss
26490 65 72 74 32 28 57 61 6c 6b 65 72 2a 2c 20 53 65  ert2(Walker*, Se
264a0 6c 65 63 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  lect*);.#endif..
264b0 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64  /*.** Return cod
264c0 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65  e from the parse
264d0 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72  -tree walking pr
264e0 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65  imitives and the
264f0 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e  ir.** callbacks.
26500 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f  .*/.#define WRC_
26510 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20  Continue    0   
26520 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e  /* Continue down
26530 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a   into children *
26540 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72  /.#define WRC_Pr
26550 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a  une       1   /*
26560 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62   Omit children b
26570 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b  ut continue walk
26580 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a  ing siblings */.
26590 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72  #define WRC_Abor
265a0 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41  t       2   /* A
265b0 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20  bandon the tree 
265c0 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  walk */../*.** A
265d0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
265e0 69 73 20 73 74 72 75 63 74 75 72 65 20 72 65 70  is structure rep
265f0 72 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66  resents a set of
26600 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54 45   one or more CTE
26610 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62  s.** (common tab
26620 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29 20  le expressions) 
26630 63 72 65 61 74 65 64 20 62 79 20 61 20 73 69 6e  created by a sin
26640 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e  gle WITH clause.
26650 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68 20  .*/.struct With 
26660 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20  {.  int nCte;   
26670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26680 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
26690 20 43 54 45 73 20 69 6e 20 74 68 65 20 57 49 54   CTEs in the WIT
266a0 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69  H clause */.  Wi
266b0 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20 20  th *pOuter;     
266c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
266d0 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54 48   Containing WITH
266e0 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c   clause, or NULL
266f0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74 65   */.  struct Cte
26700 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
26710 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63        /* For eac
26720 68 20 43 54 45 20 69 6e 20 74 68 65 20 57 49 54  h CTE in the WIT
26730 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a  H clause.... */.
26740 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
26750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26760 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
26770 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 45  his CTE */.    E
26780 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20  xprList *pCols; 
26790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
267a0 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69 63  * List of explic
267b0 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c  it column names,
267c0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20   or NULL */.    
267d0 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
267e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267f0 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f  /* The definitio
26800 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f  n of this CTE */
26810 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
26820 2a 7a 43 74 65 45 72 72 3b 20 20 20 20 20 20 20  *zCteErr;       
26830 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65       /* Error me
26840 73 73 61 67 65 20 66 6f 72 20 63 69 72 63 75 6c  ssage for circul
26850 61 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  ar references */
26860 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23  .  } a[1];.};..#
26870 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
26880 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  UG./*.** An inst
26890 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65 65  ance of the Tree
268a0 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20 75  View object is u
268b0 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e 67  sed for printing
268c0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
268d0 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74 75 72  ** data structur
268e0 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65 62  es on sqlite3Deb
268f0 75 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e 67  ugPrintf() using
26900 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69 65   a tree-like vie
26910 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 65  w..*/.struct Tre
26920 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c  eView {.  int iL
26930 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
26940 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65 6c    /* Which level
26950 20 6f 66 20 74 68 65 20 74 72 65 65 20 77 65 20   of the tree we 
26960 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20  are on */.  u8  
26970 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20  bLine[100];     
26980 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72 74      /* Draw vert
26990 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69  ical in column i
269a0 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20   if bLine[i] is 
269b0 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69  true */.};.#endi
269c0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
269d0 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  G */../*.** This
269e0 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64 20   object is used 
269f0 69 6e 20 76 61 72 69 6f 75 73 20 77 61 79 73 2c  in various ways,
26a00 20 6d 6f 73 74 20 28 62 75 74 20 6e 6f 74 20 61   most (but not a
26a10 6c 6c 29 20 72 65 6c 61 74 65 64 20 74 6f 20 77  ll) related to w
26a20 69 6e 64 6f 77 0a 2a 2a 20 66 75 6e 63 74 69 6f  indow.** functio
26a30 6e 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 31 29 20  ns..**.**   (1) 
26a40 41 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63  A single instanc
26a50 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
26a60 75 72 65 20 69 73 20 61 74 74 61 63 68 65 64 20  ure is attached 
26a70 74 6f 20 74 68 65 0a 2a 2a 20 20 20 20 20 20 20  to the.**       
26a80 74 68 65 20 45 78 70 72 2e 79 2e 70 57 69 6e 20  the Expr.y.pWin 
26a90 66 69 65 6c 64 20 66 6f 72 20 65 61 63 68 20 77  field for each w
26aa0 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 69  indow function i
26ab0 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  n an expression 
26ac0 74 72 65 65 2e 0a 2a 2a 20 20 20 20 20 20 20 54  tree..**       T
26ad0 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73  his object holds
26ae0 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   the information
26af0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
26b00 65 20 4f 56 45 52 20 63 6c 61 75 73 65 2c 0a 2a  e OVER clause,.*
26b10 2a 20 20 20 20 20 20 20 70 6c 75 73 20 61 64 64  *       plus add
26b20 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75  itional fields u
26b30 73 65 64 20 64 75 72 69 6e 67 20 63 6f 64 65 20  sed during code 
26b40 67 65 6e 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  generation..**.*
26b50 2a 20 20 20 28 32 29 20 41 6c 6c 20 77 69 6e 64  *   (2) All wind
26b60 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  ow functions in 
26b70 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20  a single SELECT 
26b80 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  form a linked-li
26b90 73 74 0a 2a 2a 20 20 20 20 20 20 20 61 74 74 61  st.**       atta
26ba0 63 68 65 64 20 74 6f 20 53 65 6c 65 63 74 2e 70  ched to Select.p
26bb0 57 69 6e 2e 20 20 54 68 65 20 57 69 6e 64 6f 77  Win.  The Window
26bc0 2e 70 46 75 6e 63 20 61 6e 64 20 57 69 6e 64 6f  .pFunc and Windo
26bd0 77 2e 70 45 78 70 72 0a 2a 2a 20 20 20 20 20 20  w.pExpr.**      
26be0 20 66 69 65 6c 64 73 20 70 6f 69 6e 74 20 62 61   fields point ba
26bf0 63 6b 20 74 6f 20 74 68 65 20 65 78 70 72 65 73  ck to the expres
26c00 73 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65  sion that is the
26c10 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
26c20 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 33 29 20 54 68  ..**.**   (3) Th
26c30 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 57  e terms of the W
26c40 49 4e 44 4f 57 20 63 6c 61 75 73 65 20 6f 66 20  INDOW clause of 
26c50 61 20 53 45 4c 45 43 54 20 61 72 65 20 69 6e 73  a SELECT are ins
26c60 74 61 6e 63 65 73 20 6f 66 20 74 68 69 73 0a 2a  tances of this.*
26c70 2a 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 6f  *       object o
26c80 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
26c90 61 74 74 61 63 68 65 64 20 74 6f 20 53 65 6c 65  attached to Sele
26ca0 63 74 2e 70 57 69 6e 44 65 66 6e 2e 0a 2a 2a 0a  ct.pWinDefn..**.
26cb0 2a 2a 20 20 20 28 34 29 20 46 6f 72 20 61 6e 20  **   (4) For an 
26cc0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
26cd0 6f 6e 20 77 69 74 68 20 61 20 46 49 4c 54 45 52  on with a FILTER
26ce0 20 63 6c 61 75 73 65 2c 20 61 6e 20 69 6e 73 74   clause, an inst
26cf0 61 6e 63 65 0a 2a 2a 20 20 20 20 20 20 20 6f 66  ance.**       of
26d00 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20   this object is 
26d10 73 74 6f 72 65 64 20 69 6e 20 45 78 70 72 2e 79  stored in Expr.y
26d20 2e 70 57 69 6e 20 77 69 74 68 20 65 46 72 6d 54  .pWin with eFrmT
26d30 79 70 65 20 73 65 74 20 74 6f 0a 2a 2a 20 20 20  ype set to.**   
26d40 20 20 20 20 54 4b 5f 46 49 4c 54 45 52 2e 20 49      TK_FILTER. I
26d50 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
26d60 6f 6e 6c 79 20 66 69 65 6c 64 20 75 73 65 64 20  only field used 
26d70 69 73 20 57 69 6e 64 6f 77 2e 70 46 69 6c 74 65  is Window.pFilte
26d80 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 73 65  r..**.** The use
26d90 73 20 28 31 29 20 61 6e 64 20 28 32 29 20 61 72  s (1) and (2) ar
26da0 65 20 72 65 61 6c 6c 79 20 74 68 65 20 73 61 6d  e really the sam
26db0 65 20 57 69 6e 64 6f 77 20 6f 62 6a 65 63 74 20  e Window object 
26dc0 74 68 61 74 20 6a 75 73 74 20 68 61 70 70 65 6e  that just happen
26dd0 73 0a 2a 2a 20 74 6f 20 62 65 20 61 63 63 65 73  s.** to be acces
26de0 73 69 62 6c 65 20 69 6e 20 74 77 6f 20 64 69 66  sible in two dif
26df0 66 65 72 65 6e 74 20 77 61 79 73 2e 20 20 55 73  ferent ways.  Us
26e00 65 20 63 61 73 65 20 28 33 29 20 61 72 65 20 73  e case (3) are s
26e10 65 70 61 72 61 74 65 20 6f 62 6a 65 63 74 73 2e  eparate objects.
26e20 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 6e 64 6f  .*/.struct Windo
26e30 77 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  w {.  char *zNam
26e40 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
26e50 20 4e 61 6d 65 20 6f 66 20 77 69 6e 64 6f 77 20   Name of window 
26e60 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f  (may be NULL) */
26e70 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20  .  char *zBase; 
26e80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
26e90 6d 65 20 6f 66 20 62 61 73 65 20 77 69 6e 64 6f  me of base windo
26ea0 77 20 66 6f 72 20 63 68 61 69 6e 69 6e 67 20 28  w for chaining (
26eb0 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a  may be NULL) */.
26ec0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 50 61 72    ExprList *pPar
26ed0 74 69 74 69 6f 6e 3b 20 20 20 2f 2a 20 50 41 52  tition;   /* PAR
26ee0 54 49 54 49 4f 4e 20 42 59 20 63 6c 61 75 73 65  TITION BY clause
26ef0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
26f00 70 4f 72 64 65 72 42 79 3b 20 20 20 20 20 2f 2a  pOrderBy;     /*
26f10 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
26f20 20 2a 2f 0a 20 20 75 38 20 65 46 72 6d 54 79 70   */.  u8 eFrmTyp
26f30 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
26f40 20 54 4b 5f 52 41 4e 47 45 2c 20 54 4b 5f 47 52   TK_RANGE, TK_GR
26f50 4f 55 50 53 2c 20 54 4b 5f 52 4f 57 53 2c 20 6f  OUPS, TK_ROWS, o
26f60 72 20 30 20 2a 2f 0a 20 20 75 38 20 65 53 74 61  r 0 */.  u8 eSta
26f70 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
26f80 20 2f 2a 20 55 4e 42 4f 55 4e 44 45 44 2c 20 43   /* UNBOUNDED, C
26f90 55 52 52 45 4e 54 2c 20 50 52 45 43 45 44 49 4e  URRENT, PRECEDIN
26fa0 47 20 6f 72 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a  G or FOLLOWING *
26fb0 2f 0a 20 20 75 38 20 65 45 6e 64 3b 20 20 20 20  /.  u8 eEnd;    
26fc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
26fd0 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52 52 45 4e  NBOUNDED, CURREN
26fe0 54 2c 20 50 52 45 43 45 44 49 4e 47 20 6f 72 20  T, PRECEDING or 
26ff0 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 75  FOLLOWING */.  u
27000 38 20 62 49 6d 70 6c 69 63 69 74 46 72 61 6d 65  8 bImplicitFrame
27010 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  ;      /* True i
27020 66 20 66 72 61 6d 65 20 77 61 73 20 69 6d 70 6c  f frame was impl
27030 69 63 69 74 6c 79 20 73 70 65 63 69 66 69 65 64  icitly specified
27040 20 2a 2f 0a 20 20 75 38 20 65 45 78 63 6c 75 64   */.  u8 eExclud
27050 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
27060 20 54 4b 5f 4e 4f 2c 20 54 4b 5f 43 55 52 52 45   TK_NO, TK_CURRE
27070 4e 54 2c 20 54 4b 5f 54 49 45 53 2c 20 54 4b 5f  NT, TK_TIES, TK_
27080 47 52 4f 55 50 2c 20 6f 72 20 30 20 2a 2f 0a 20  GROUP, or 0 */. 
27090 20 45 78 70 72 20 2a 70 53 74 61 72 74 3b 20 20   Expr *pStart;  
270a0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
270b0 65 73 73 69 6f 6e 20 66 6f 72 20 22 3c 65 78 70  ession for "<exp
270c0 72 3e 20 50 52 45 43 45 44 49 4e 47 22 20 2a 2f  r> PRECEDING" */
270d0 0a 20 20 45 78 70 72 20 2a 70 45 6e 64 3b 20 20  .  Expr *pEnd;  
270e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
270f0 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 22 3c 65  pression for "<e
27100 78 70 72 3e 20 46 4f 4c 4c 4f 57 49 4e 47 22 20  xpr> FOLLOWING" 
27110 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 2a 70 70  */.  Window **pp
27120 54 68 69 73 3b 20 20 20 20 20 20 20 20 2f 2a 20  This;        /* 
27130 50 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  Pointer to this 
27140 6f 62 6a 65 63 74 20 69 6e 20 53 65 6c 65 63 74  object in Select
27150 2e 70 57 69 6e 20 6c 69 73 74 20 2a 2f 0a 20 20  .pWin list */.  
27160 57 69 6e 64 6f 77 20 2a 70 4e 65 78 74 57 69 6e  Window *pNextWin
27170 3b 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  ;       /* Next 
27180 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20  window function 
27190 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 69  belonging to thi
271a0 73 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 45 78  s SELECT */.  Ex
271b0 70 72 20 2a 70 46 69 6c 74 65 72 3b 20 20 20 20  pr *pFilter;    
271c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 49 4c        /* The FIL
271d0 54 45 52 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  TER expression *
271e0 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75  /.  FuncDef *pFu
271f0 6e 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  nc;         /* T
27200 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  he function */. 
27210 20 69 6e 74 20 69 45 70 68 43 73 72 3b 20 20 20   int iEphCsr;   
27220 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 74           /* Part
27230 69 74 69 6f 6e 20 62 75 66 66 65 72 20 6f 72 20  ition buffer or 
27240 50 65 65 72 20 62 75 66 66 65 72 20 2a 2f 0a 20  Peer buffer */. 
27250 20 69 6e 74 20 72 65 67 41 63 63 75 6d 3b 0a 20   int regAccum;. 
27260 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 0a   int regResult;.
27270 20 20 69 6e 74 20 63 73 72 41 70 70 3b 20 20 20    int csrApp;   
27280 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e            /* Fun
27290 63 74 69 6f 6e 20 63 75 72 73 6f 72 20 28 75 73  ction cursor (us
272a0 65 64 20 62 79 20 6d 69 6e 2f 6d 61 78 29 20 2a  ed by min/max) *
272b0 2f 0a 20 20 69 6e 74 20 72 65 67 41 70 70 3b 20  /.  int regApp; 
272c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
272d0 75 6e 63 74 69 6f 6e 20 72 65 67 69 73 74 65 72  unction register
272e0 20 28 61 6c 73 6f 20 75 73 65 64 20 62 79 20 6d   (also used by m
272f0 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74  in/max) */.  int
27300 20 72 65 67 50 61 72 74 3b 20 20 20 20 20 20 20   regPart;       
27310 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
27320 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 50   registers for P
27330 41 52 54 49 54 49 4f 4e 20 42 59 20 76 61 6c 75  ARTITION BY valu
27340 65 73 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f  es */.  Expr *pO
27350 77 6e 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  wner;           
27360 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 6f 62  /* Expression ob
27370 6a 65 63 74 20 74 68 69 73 20 77 69 6e 64 6f 77  ject this window
27380 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
27390 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 66 66 65 72  */.  int nBuffer
273a0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Col;         /* 
273b0 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
273c0 73 20 69 6e 20 62 75 66 66 65 72 20 74 61 62 6c  s in buffer tabl
273d0 65 20 2a 2f 0a 20 20 69 6e 74 20 69 41 72 67 43  e */.  int iArgC
273e0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ol;            /
273f0 2a 20 4f 66 66 73 65 74 20 6f 66 20 66 69 72 73  * Offset of firs
27400 74 20 61 72 67 75 6d 65 6e 74 20 66 6f 72 20 74  t argument for t
27410 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  his function */.
27420 20 20 69 6e 74 20 72 65 67 4f 6e 65 3b 20 20 20    int regOne;   
27430 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
27440 69 73 74 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67  ister containing
27450 20 63 6f 6e 73 74 61 6e 74 20 76 61 6c 75 65 20   constant value 
27460 31 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 53 74  1 */.  int regSt
27470 61 72 74 52 6f 77 69 64 3b 0a 20 20 69 6e 74 20  artRowid;.  int 
27480 72 65 67 45 6e 64 52 6f 77 69 64 3b 0a 7d 3b 0a  regEndRowid;.};.
27490 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
274a0 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a  OMIT_WINDOWFUNC.
274b0 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64  void sqlite3Wind
274c0 6f 77 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  owDelete(sqlite3
274d0 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69  *, Window*);.voi
274e0 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 55  d sqlite3WindowU
274f0 6e 6c 69 6e 6b 46 72 6f 6d 53 65 6c 65 63 74 28  nlinkFromSelect(
27500 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73  Window*);.void s
27510 71 6c 69 74 65 33 57 69 6e 64 6f 77 4c 69 73 74  qlite3WindowList
27520 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a  Delete(sqlite3 *
27530 64 62 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a  db, Window *p);.
27540 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57  Window *sqlite3W
27550 69 6e 64 6f 77 41 6c 6c 6f 63 28 50 61 72 73 65  indowAlloc(Parse
27560 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 45 78 70  *, int, int, Exp
27570 72 2a 2c 20 69 6e 74 20 2c 20 45 78 70 72 2a 2c  r*, int , Expr*,
27580 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
27590 65 33 57 69 6e 64 6f 77 41 74 74 61 63 68 28 50  e3WindowAttach(P
275a0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 57 69  arse*, Expr*, Wi
275b0 6e 64 6f 77 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ndow*);.int sqli
275c0 74 65 33 57 69 6e 64 6f 77 43 6f 6d 70 61 72 65  te3WindowCompare
275d0 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a  (Parse*, Window*
275e0 2c 20 57 69 6e 64 6f 77 2a 2c 20 69 6e 74 29 3b  , Window*, int);
275f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
27600 64 6f 77 43 6f 64 65 49 6e 69 74 28 50 61 72 73  dowCodeInit(Pars
27610 65 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f  e*, Window*);.vo
27620 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
27630 43 6f 64 65 53 74 65 70 28 50 61 72 73 65 2a 2c  CodeStep(Parse*,
27640 20 53 65 6c 65 63 74 2a 2c 20 57 68 65 72 65 49   Select*, WhereI
27650 6e 66 6f 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  nfo*, int, int);
27660 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64  .int sqlite3Wind
27670 6f 77 52 65 77 72 69 74 65 28 50 61 72 73 65 2a  owRewrite(Parse*
27680 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
27690 73 71 6c 69 74 65 33 45 78 70 61 6e 64 53 75 62  sqlite3ExpandSub
276a0 71 75 65 72 79 28 50 61 72 73 65 2a 2c 20 73 74  query(Parse*, st
276b0 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
276c0 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
276d0 33 57 69 6e 64 6f 77 55 70 64 61 74 65 28 50 61  3WindowUpdate(Pa
276e0 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57  rse*, Window*, W
276f0 69 6e 64 6f 77 2a 2c 20 46 75 6e 63 44 65 66 2a  indow*, FuncDef*
27700 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74  );.Window *sqlit
27710 65 33 57 69 6e 64 6f 77 44 75 70 28 73 71 6c 69  e3WindowDup(sqli
27720 74 65 33 20 2a 64 62 2c 20 45 78 70 72 20 2a 70  te3 *db, Expr *p
27730 4f 77 6e 65 72 2c 20 57 69 6e 64 6f 77 20 2a 70  Owner, Window *p
27740 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74  );.Window *sqlit
27750 65 33 57 69 6e 64 6f 77 4c 69 73 74 44 75 70 28  e3WindowListDup(
27760 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e  sqlite3 *db, Win
27770 64 6f 77 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71  dow *p);.void sq
27780 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74  lite3WindowFunct
27790 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
277a0 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 68   sqlite3WindowCh
277b0 61 69 6e 28 50 61 72 73 65 2a 2c 20 57 69 6e 64  ain(Parse*, Wind
277c0 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 57  ow*, Window*);.W
277d0 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69  indow *sqlite3Wi
277e0 6e 64 6f 77 41 73 73 65 6d 62 6c 65 28 50 61 72  ndowAssemble(Par
277f0 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 45 78  se*, Window*, Ex
27800 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  prList*, ExprLis
27810 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 23 65 6c  t*, Token*);.#el
27820 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
27830 74 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28  te3WindowDelete(
27840 61 2c 62 29 0a 23 20 64 65 66 69 6e 65 20 73 71  a,b).# define sq
27850 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74  lite3WindowFunct
27860 69 6f 6e 73 28 29 0a 23 20 64 65 66 69 6e 65 20  ions().# define 
27870 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74  sqlite3WindowAtt
27880 61 63 68 28 61 2c 62 2c 63 29 0a 23 65 6e 64 69  ach(a,b,c).#endi
27890 66 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e  f../*.** Assumin
278a0 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20  g zIn points to 
278b0 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
278c0 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63  f a UTF-8 charac
278d0 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20  ter,.** advance 
278e0 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  zIn to point to 
278f0 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
27900 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38  f the next UTF-8
27910 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23   character..*/.#
27920 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b  define SQLITE_SK
27930 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20  IP_UTF8(zIn) {  
27940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27950 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a        \.  if( (*
27960 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29  (zIn++))>=0xc0 )
27970 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
27980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
27990 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49  .    while( (*zI
279a0 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20  n & 0xc0)==0x80 
279b0 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20  ){ zIn++; }     
279c0 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20          \.  }   
279d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a00 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   \.}../*.** The 
27a10 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61  SQLITE_*_BKPT ma
27a20 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74  cros are substit
27a30 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72  utes for the err
27a40 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a  or codes with.**
27a50 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62   the same name b
27a60 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f  ut without the _
27a70 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68  BKPT suffix.  Th
27a80 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b  ese macros invok
27a90 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68  e.** routines th
27aa0 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69  at report the li
27ab0 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69  ne-number on whi
27ac0 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69  ch the error ori
27ad0 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67  ginated.** using
27ae0 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20   sqlite3_log(). 
27af0 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c   The routines al
27b00 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e  so provide a con
27b10 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a  venient place.**
27b20 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67   to set a debugg
27b30 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a  er breakpoint..*
27b40 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70  /.int sqlite3Rep
27b50 6f 72 74 45 72 72 6f 72 28 69 6e 74 20 69 45 72  ortError(int iEr
27b60 72 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63  r, int lineno, c
27b70 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65  onst char *zType
27b80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  );.int sqlite3Co
27b90 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b  rruptError(int);
27ba0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75  .int sqlite3Misu
27bb0 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  seError(int);.in
27bc0 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65  t sqlite3Cantope
27bd0 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65  nError(int);.#de
27be0 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  fine SQLITE_CORR
27bf0 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  UPT_BKPT sqlite3
27c00 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c  CorruptError(__L
27c10 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53  INE__).#define S
27c20 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
27c30 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  T sqlite3MisuseE
27c40 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
27c50 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41  define SQLITE_CA
27c60 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69  NTOPEN_BKPT sqli
27c70 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
27c80 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65  (__LINE__).#ifde
27c90 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
27ca0 20 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65   int sqlite3Nome
27cb0 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69  mError(int);.  i
27cc0 6e 74 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e  nt sqlite3Ioerrn
27cd0 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a  omemError(int);.
27ce0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72    int sqlite3Cor
27cf0 72 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e  ruptPgnoError(in
27d00 74 2c 50 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e  t,Pgno);.# defin
27d10 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  e SQLITE_NOMEM_B
27d20 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d  KPT sqlite3Nomem
27d30 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
27d40 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
27d50 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  IOERR_NOMEM_BKPT
27d60 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d   sqlite3Ioerrnom
27d70 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  emError(__LINE__
27d80 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
27d90 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50  E_CORRUPT_PGNO(P
27da0 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  ) sqlite3Corrupt
27db0 50 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  PgnoError(__LINE
27dc0 5f 5f 2c 28 50 29 29 0a 23 65 6c 73 65 0a 23 20  __,(P)).#else.# 
27dd0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
27de0 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f  MEM_BKPT SQLITE_
27df0 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53  NOMEM.# define S
27e00 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
27e10 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f  M_BKPT SQLITE_IO
27e20 45 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69  ERR_NOMEM.# defi
27e30 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ne SQLITE_CORRUP
27e40 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65  T_PGNO(P) sqlite
27e50 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f  3CorruptError(__
27e60 4c 49 4e 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a  LINE__).#endif..
27e70 2f 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46  /*.** FTS3 and F
27e80 54 53 34 20 62 6f 74 68 20 72 65 71 75 69 72 65  TS4 both require
27e90 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
27ea0 75 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65  upport.*/.#if de
27eb0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
27ec0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
27ed0 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
27ee0 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64  NABLE_FTS3.# und
27ef0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
27f00 5f 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _FTS4.#endif../*
27f10 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c  .** FTS4 is real
27f20 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20  ly an extension 
27f30 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73  for FTS3.  It is
27f40 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74   enabled using t
27f50 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41  he.** SQLITE_ENA
27f60 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20  BLE_FTS3 macro. 
27f70 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f   But to avoid co
27f80 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20  nfusion we also 
27f90 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49  call.** the SQLI
27fa0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d  TE_ENABLE_FTS4 m
27fb0 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73  acro to serve as
27fc0 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51   an alias for SQ
27fd0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
27fe0 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
27ff0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
28000 54 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64  TS4) && !defined
28010 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
28020 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51  TS3).# define SQ
28030 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
28040 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
28050 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61   The ctype.h hea
28060 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f  der is needed fo
28070 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74  r non-ASCII syst
28080 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  ems.  It is also
28090 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54  .** needed by FT
280a0 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20  S3 when FTS3 is 
280b0 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
280c0 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f  amalgamation..*/
280d0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
280e0 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c  LITE_ASCII) || \
280f0 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51  .    (defined(SQ
28100 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
28110 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
28120 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
28130 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74  )).# include <ct
28140 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  ype.h>.#endif../
28150 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
28160 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20  ng macros mimic 
28170 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62  the standard lib
28180 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74  rary functions t
28190 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73  oupper(),.** iss
281a0 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28  pace(), isalnum(
281b0 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64  ), isdigit() and
281c0 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73   isxdigit(), res
281d0 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a  pectively. The.*
281e0 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e  * sqlite version
281f0 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20  s only work for 
28200 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
28210 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
28220 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  locale..*/.#ifde
28230 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23  f SQLITE_ASCII.#
28240 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
28250 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26  oupper(x)  ((x)&
28260 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  ~(sqlite3CtypeMa
28270 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
28280 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64  )(x)]&0x20)).# d
28290 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
282a0 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74  pace(x)   (sqlit
282b0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
282c0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
282d0 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x01).# define sq
282e0 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
282f0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
28300 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
28310 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64  r)(x)]&0x06).# d
28320 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
28330 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74  lpha(x)   (sqlit
28340 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
28350 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
28360 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x02).# define sq
28370 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
28380 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
28390 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
283a0 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64  r)(x)]&0x04).# d
283b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
283c0 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74  digit(x)  (sqlit
283d0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
283e0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
283f0 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x08).# define sq
28400 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
28410 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54    (sqlite3UpperT
28420 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64  oLower[(unsigned
28430 20 63 68 61 72 29 28 78 29 5d 29 0a 23 20 64 65   char)(x)]).# de
28440 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75  fine sqlite3Isqu
28450 6f 74 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ote(x)   (sqlite
28460 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
28470 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
28480 38 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  80).#else.# defi
28490 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
284a0 72 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28  r(x)   toupper((
284b0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
284c0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
284d0 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20  te3Isspace(x)   
284e0 69 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65  isspace((unsigne
284f0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
28500 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
28510 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d  num(x)   isalnum
28520 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
28530 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
28540 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20  lite3Isalpha(x) 
28550 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67    isalpha((unsig
28560 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
28570 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
28580 64 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67  digit(x)   isdig
28590 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  it((unsigned cha
285a0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
285b0 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
285c0 78 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e  x)  isxdigit((un
285d0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
285e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
285f0 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f  3Tolower(x)   to
28600 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20  lower((unsigned 
28610 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
28620 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74  ne sqlite3Isquot
28630 65 28 78 29 20 20 20 28 28 78 29 3d 3d 27 22 27  e(x)   ((x)=='"'
28640 7c 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29  ||(x)=='\''||(x)
28650 3d 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29  =='['||(x)=='`')
28660 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
28670 74 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b  te3IsIdChar(u8);
28680 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c  ../*.** Internal
28690 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74   function protot
286a0 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ypes.*/.int sqli
286b0 74 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74  te3StrICmp(const
286c0 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
286d0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
286e0 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63  Strlen30(const c
286f0 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73  har*);.#define s
28700 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 4e 4e  qlite3Strlen30NN
28710 28 43 29 20 28 73 74 72 6c 65 6e 28 43 29 26 30  (C) (strlen(C)&0
28720 78 33 66 66 66 66 66 66 66 29 0a 63 68 61 72 20  x3fffffff).char 
28730 2a 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79  *sqlite3ColumnTy
28740 70 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a  pe(Column*,char*
28750 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  );.#define sqlit
28760 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74  e3StrNICmp sqlit
28770 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74  e3_strnicmp..int
28780 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e   sqlite3MallocIn
28790 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  it(void);.void s
287a0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28  qlite3MallocEnd(
287b0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  void);.void *sql
287c0 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b  ite3Malloc(u64);
287d0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
287e0 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76  llocZero(u64);.v
287f0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
28800 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33  llocZero(sqlite3
28810 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
28820 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
28830 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  w(sqlite3*, u64)
28840 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
28850 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c  bMallocRawNN(sql
28860 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61  ite3*, u64);.cha
28870 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44  r *sqlite3DbStrD
28880 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
28890 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a  t char*);.char *
288a0 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70  sqlite3DbStrNDup
288b0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
288c0 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61  char*, u64);.cha
288d0 72 20 2a 73 71 6c 69 74 65 33 44 62 53 70 61 6e  r *sqlite3DbSpan
288e0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
288f0 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
28900 68 61 72 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  har*);.void *sql
28910 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64  ite3Realloc(void
28920 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
28930 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f  qlite3DbReallocO
28940 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c  rFree(sqlite3 *,
28950 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76   void *, u64);.v
28960 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
28970 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c  alloc(sqlite3 *,
28980 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76   void *, u64);.v
28990 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65  oid sqlite3DbFre
289a0 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  e(sqlite3*, void
289b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
289c0 44 62 46 72 65 65 4e 4e 28 73 71 6c 69 74 65 33  DbFreeNN(sqlite3
289d0 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  *, void*);.int s
289e0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
289f0 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  (void*);.int sql
28a00 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65  ite3DbMallocSize
28a10 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
28a20 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
28a30 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  PageMalloc(int);
28a40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67  .void sqlite3Pag
28a50 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  eFree(void*);.vo
28a60 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74  id sqlite3MemSet
28a70 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23  Default(void);.#
28a80 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
28a90 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71  TESTABLE.void sq
28aa0 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f  lite3BenignMallo
28ab0 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28  cHooks(void (*)(
28ac0 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28  void), void (*)(
28ad0 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69  void));.#endif.i
28ae0 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65  nt sqlite3HeapNe
28af0 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a  arlyFull(void);.
28b00 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d  ./*.** On system
28b10 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61  s with ample sta
28b20 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61  ck space and tha
28b30 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61  t support alloca
28b40 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20  (), make.** use 
28b50 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f  of alloca() to o
28b60 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20  btain space for 
28b70 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20  large automatic 
28b80 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66  objects.  By def
28b90 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20  ault,.** obtain 
28ba0 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f  space from mallo
28bb0 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  c()..**.** The a
28bc0 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20  lloca() routine 
28bd0 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55  never returns NU
28be0 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  LL.  This will c
28bf0 61 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a  ause code paths.
28c00 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74  ** that deal wit
28c10 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  h sqlite3StackAl
28c20 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74  loc() failures t
28c30 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65  o be unreachable
28c40 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
28c50 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20  TE_USE_ALLOCA.# 
28c60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
28c70 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
28c80 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64     alloca(N).# d
28c90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
28ca0 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
28cb0 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28    memset(alloca(
28cc0 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69  N), 0, N).# defi
28cd0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
28ce0 72 65 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23  ree(D,P).#else.#
28cf0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
28d00 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e  tackAllocRaw(D,N
28d10 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  )   sqlite3DbMal
28d20 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65  locRaw(D,N).# de
28d30 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
28d40 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
28d50 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
28d60 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69  Zero(D,N).# defi
28d70 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
28d80 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73  ree(D,P)       s
28d90 71 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50  qlite3DbFree(D,P
28da0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20  ).#endif../* Do 
28db0 6e 6f 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d  not allow both M
28dc0 45 4d 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59  EMSYS5 and MEMSY
28dd0 53 33 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64  S3 to be defined
28de0 20 74 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74   together.  If t
28df0 68 65 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61  hey.** are, disa
28e00 62 6c 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23  ble MEMSYS3.*/.#
28e10 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
28e20 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73  BLE_MEMSYS5.cons
28e30 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
28e40 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
28e50 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64  mGetMemsys5(void
28e60 29 3b 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45  );.#undef SQLITE
28e70 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a  _ENABLE_MEMSYS3.
28e80 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
28e90 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
28ea0 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS3.const sqlite
28eb0 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
28ec0 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
28ed0 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys3(void);.#endi
28ee0 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  f...#ifndef SQLI
28ef0 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20  TE_MUTEX_OMIT.  
28f00 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
28f10 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
28f20 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78  ite3DefaultMutex
28f30 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
28f40 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
28f50 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f  const *sqlite3No
28f60 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20  opMutex(void);. 
28f70 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
28f80 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f  sqlite3MutexAllo
28f90 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  c(int);.  int sq
28fa0 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76  lite3MutexInit(v
28fb0 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  oid);.  int sqli
28fc0 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64  te3MutexEnd(void
28fd0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  );.#endif.#if !d
28fe0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55  efined(SQLITE_MU
28ff0 54 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65  TEX_OMIT) && !de
29000 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
29010 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20  EX_NOOP).  void 
29020 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72  sqlite3MemoryBar
29030 72 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73  rier(void);.#els
29040 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
29050 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28  e3MemoryBarrier(
29060 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65  ).#endif..sqlite
29070 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53  3_int64 sqlite3S
29080 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b  tatusValue(int);
29090 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
290a0 74 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b  tusUp(int, int);
290b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
290c0 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74  tusDown(int, int
290d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
290e0 74 61 74 75 73 48 69 67 68 77 61 74 65 72 28 69  tatusHighwater(i
290f0 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
29100 6c 69 74 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73  lite3LookasideUs
29110 65 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a  ed(sqlite3*,int*
29120 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f  );../* Access to
29130 20 6d 75 74 65 78 65 73 20 75 73 65 64 20 62 79   mutexes used by
29140 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28   sqlite3_status(
29150 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74  ) */.sqlite3_mut
29160 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68  ex *sqlite3Pcach
29170 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73  e1Mutex(void);.s
29180 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
29190 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78  lite3MallocMutex
291a0 28 76 6f 69 64 29 3b 0a 0a 23 69 66 20 64 65 66  (void);..#if def
291b0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
291c0 4c 45 5f 4d 55 4c 54 49 54 48 52 45 41 44 45 44  LE_MULTITHREADED
291d0 5f 43 48 45 43 4b 53 29 20 26 26 20 21 64 65 66  _CHECKS) && !def
291e0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
291f0 58 5f 4f 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c  X_OMIT).void sql
29200 69 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43  ite3MutexWarnOnC
29210 6f 6e 74 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65  ontention(sqlite
29220 33 5f 6d 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65  3_mutex*);.#else
29230 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29240 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74  3MutexWarnOnCont
29250 65 6e 74 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66  ention(x).#endif
29260 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
29270 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
29280 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 45 58  OINT.# define EX
29290 50 37 35 34 20 28 28 28 75 36 34 29 30 78 37 66  P754 (((u64)0x7f
292a0 66 29 3c 3c 35 32 29 0a 23 20 64 65 66 69 6e 65  f)<<52).# define
292b0 20 4d 41 4e 37 35 34 20 28 28 28 28 75 36 34 29   MAN754 ((((u64)
292c0 31 29 3c 3c 35 32 29 2d 31 29 0a 23 20 64 65 66  1)<<52)-1).# def
292d0 69 6e 65 20 49 73 4e 61 4e 28 58 29 20 28 28 28  ine IsNaN(X) (((
292e0 58 29 26 45 58 50 37 35 34 29 3d 3d 45 58 50 37  X)&EXP754)==EXP7
292f0 35 34 20 26 26 20 28 28 58 29 26 4d 41 4e 37 35  54 && ((X)&MAN75
29300 34 29 21 3d 30 29 0a 20 20 69 6e 74 20 73 71 6c  4)!=0).  int sql
29310 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65  ite3IsNaN(double
29320 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
29330 65 20 49 73 4e 61 4e 28 58 29 20 20 20 20 20 20  e IsNaN(X)      
29340 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71     0.# define sq
29350 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30  lite3IsNaN(X)  0
29360 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
29370 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
29380 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
29390 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
293a0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51  rmation about SQ
293b0 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61  L.** functions a
293c0 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72  rguments that ar
293d0 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  e the parameters
293e0 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29   to the printf()
293f0 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74   function..*/.st
29400 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d  ruct PrintfArgum
29410 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72  ents {.  int nAr
29420 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
29430 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65    /* Total numbe
29440 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
29450 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20  /.  int nUsed;  
29460 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
29470 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
29480 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  nts used so far 
29490 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  */.  sqlite3_val
294a0 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a  ue **apArg;   /*
294b0 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61   The argument va
294c0 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72  lues */.};..char
294d0 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66   *sqlite3MPrintf
294e0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
294f0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61  char*, ...);.cha
29500 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e  r *sqlite3VMPrin
29510 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
29520 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74  t char*, va_list
29530 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
29540 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20  QLITE_DEBUG) || 
29550 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
29560 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20  AVE_OS_TRACE).  
29570 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75  void sqlite3Debu
29580 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68  gPrintf(const ch
29590 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69  ar*, ...);.#endi
295a0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
295b0 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69  LITE_TEST).  voi
295c0 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65  d *sqlite3TestTe
295d0 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68  xtToPtr(const ch
295e0 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
295f0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
29600 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73  _DEBUG).  void s
29610 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78  qlite3TreeViewEx
29620 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  pr(TreeView*, co
29630 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a  nst Expr*, u8);.
29640 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
29650 65 65 56 69 65 77 42 61 72 65 45 78 70 72 4c 69  eeViewBareExprLi
29660 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  st(TreeView*, co
29670 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  nst ExprList*, c
29680 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
29690 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
296a0 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65  iewExprList(Tree
296b0 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70  View*, const Exp
296c0 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73  rList*, u8, cons
296d0 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
296e0 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
296f0 53 72 63 4c 69 73 74 28 54 72 65 65 56 69 65 77  SrcList(TreeView
29700 2a 2c 20 63 6f 6e 73 74 20 53 72 63 4c 69 73 74  *, const SrcList
29710 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
29720 65 33 54 72 65 65 56 69 65 77 53 65 6c 65 63 74  e3TreeViewSelect
29730 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
29740 74 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a  t Select*, u8);.
29750 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
29760 65 65 56 69 65 77 57 69 74 68 28 54 72 65 65 56  eeViewWith(TreeV
29770 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68  iew*, const With
29780 2a 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  *, u8);.#ifndef 
29790 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44  SQLITE_OMIT_WIND
297a0 4f 57 46 55 4e 43 0a 20 20 76 6f 69 64 20 73 71  OWFUNC.  void sq
297b0 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69 6e  lite3TreeViewWin
297c0 64 6f 77 28 54 72 65 65 56 69 65 77 2a 2c 20 63  dow(TreeView*, c
297d0 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38  onst Window*, u8
297e0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
297f0 33 54 72 65 65 56 69 65 77 57 69 6e 46 75 6e 63  3TreeViewWinFunc
29800 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
29810 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a  t Window*, u8);.
29820 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 0a  #endif.#endif...
29830 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53  void sqlite3SetS
29840 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73  tring(char **, s
29850 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
29860 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
29870 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73  te3ErrorMsg(Pars
29880 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
29890 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74   ...);.int sqlit
298a0 65 33 45 72 72 6f 72 54 6f 50 61 72 73 65 72 28  e3ErrorToParser(
298b0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
298c0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f  oid sqlite3Dequo
298d0 74 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  te(char*);.void 
298e0 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 45 78  sqlite3DequoteEx
298f0 70 72 28 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  pr(Expr*);.void 
29900 73 71 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74  sqlite3TokenInit
29910 28 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a  (Token*,char*);.
29920 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f  int sqlite3Keywo
29930 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73  rdCode(const uns
29940 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74  igned char*, int
29950 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
29960 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20  nParser(Parse*, 
29970 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
29980 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  r **);.void sqli
29990 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28  te3FinishCoding(
299a0 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
299b0 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50  ite3GetTempReg(P
299c0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
299d0 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
299e0 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  eg(Parse*,int);.
299f0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
29a00 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
29a10 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29a20 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67  3ReleaseTempRang
29a30 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74  e(Parse*,int,int
29a40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
29a50 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65  learTempRegCache
29a60 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66  (Parse*);.#ifdef
29a70 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e   SQLITE_DEBUG.in
29a80 74 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73  t sqlite3NoTemps
29a90 49 6e 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  InRange(Parse*,i
29aa0 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  nt,int);.#endif.
29ab0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
29ac0 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  rAlloc(sqlite3*,
29ad0 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  int,const Token*
29ae0 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
29af0 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33  ite3Expr(sqlite3
29b00 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
29b10 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29b20 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65  ExprAttachSubtre
29b30 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  es(sqlite3*,Expr
29b40 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
29b50 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78  Expr *sqlite3PEx
29b60 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  pr(Parse*, int, 
29b70 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  Expr*, Expr*);.v
29b80 6f 69 64 20 73 71 6c 69 74 65 33 50 45 78 70 72  oid sqlite3PExpr
29b90 41 64 64 53 65 6c 65 63 74 28 50 61 72 73 65 2a  AddSelect(Parse*
29ba0 2c 20 45 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a  , Expr*, Select*
29bb0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
29bc0 45 78 70 72 41 6e 64 28 50 61 72 73 65 2a 2c 45  ExprAnd(Parse*,E
29bd0 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  xpr*, Expr*);.Ex
29be0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53  pr *sqlite3ExprS
29bf0 69 6d 70 6c 69 66 69 65 64 41 6e 64 4f 72 28 45  implifiedAndOr(E
29c00 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
29c10 69 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e  ite3ExprFunction
29c20 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
29c30 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b  *, Token*, int);
29c40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
29c50 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72  rAssignVarNumber
29c60 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
29c70 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
29c80 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c  e3ExprDelete(sql
29c90 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  ite3*, Expr*);.v
29ca0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 55  oid sqlite3ExprU
29cb0 6e 6d 61 70 41 6e 64 44 65 6c 65 74 65 28 50 61  nmapAndDelete(Pa
29cc0 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  rse*, Expr*);.Ex
29cd0 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
29ce0 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61  xprListAppend(Pa
29cf0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  rse*,ExprList*,E
29d00 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20  xpr*);.ExprList 
29d10 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
29d20 41 70 70 65 6e 64 56 65 63 74 6f 72 28 50 61 72  AppendVector(Par
29d30 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 49 64  se*,ExprList*,Id
29d40 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f  List*,Expr*);.vo
29d50 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
29d60 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72 28 45  stSetSortOrder(E
29d70 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76  xprList*,int);.v
29d80 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
29d90 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65  istSetName(Parse
29da0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65  *,ExprList*,Toke
29db0 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  n*,int);.void sq
29dc0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
29dd0 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  Span(Parse*,Expr
29de0 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  List*,const char
29df0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
29e00 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
29e10 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
29e20 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  e3*, ExprList*);
29e30 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78 70 72  .u32 sqlite3Expr
29e40 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74 20  ListFlags(const 
29e50 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
29e60 73 71 6c 69 74 65 33 49 6e 64 65 78 48 61 73 44  sqlite3IndexHasD
29e70 75 70 6c 69 63 61 74 65 52 6f 6f 74 50 61 67 65  uplicateRootPage
29e80 28 49 6e 64 65 78 2a 29 3b 0a 69 6e 74 20 73 71  (Index*);.int sq
29e90 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65  lite3Init(sqlite
29ea0 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74  3*, char**);.int
29eb0 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
29ec0 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  back(void*, int,
29ed0 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29   char**, char**)
29ee0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
29ef0 74 4f 6e 65 28 73 71 6c 69 74 65 33 2a 2c 20 69  tOne(sqlite3*, i
29f00 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 75 33 32 29  nt, char**, u32)
29f10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
29f20 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65  agma(Parse*,Toke
29f30 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  n*,Token*,Token*
29f40 2c 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  ,int);.#ifndef S
29f50 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
29f60 41 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a  ALTABLE.Module *
29f70 73 71 6c 69 74 65 33 50 72 61 67 6d 61 56 74 61  sqlite3PragmaVta
29f80 62 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65  bRegister(sqlite
29f90 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  3*,const char *z
29fa0 4e 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  Name);.#endif.vo
29fb0 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41  id sqlite3ResetA
29fc0 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
29fd0 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b  ction(sqlite3*);
29fe0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
29ff0 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69  etOneSchema(sqli
2a000 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
2a010 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44  sqlite3CollapseD
2a020 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c  atabaseArray(sql
2a030 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
2a040 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e  ite3CommitIntern
2a050 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  alChanges(sqlite
2a060 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
2a070 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d  3DeleteColumnNam
2a080 65 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c  es(sqlite3*,Tabl
2a090 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
2a0a0 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c  ColumnsFromExprL
2a0b0 69 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ist(Parse*,ExprL
2a0c0 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e  ist*,i16*,Column
2a0d0 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
2a0e0 33 53 65 6c 65 63 74 41 64 64 43 6f 6c 75 6d 6e  3SelectAddColumn
2a0f0 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e  TypeAndCollation
2a100 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 53  (Parse*,Table*,S
2a110 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a  elect*);.Table *
2a120 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74  sqlite3ResultSet
2a130 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  OfSelect(Parse*,
2a140 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73  Select*);.void s
2a150 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72  qlite3OpenMaster
2a160 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69  Table(Parse *, i
2a170 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  nt);.Index *sqli
2a180 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64  te3PrimaryKeyInd
2a190 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20  ex(Table*);.i16 
2a1a0 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49  sqlite3ColumnOfI
2a1b0 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36  ndex(Index*, i16
2a1c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2a1d0 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a  tartTable(Parse*
2a1e0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
2a1f0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  nt,int,int,int);
2a200 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  .#if SQLITE_ENAB
2a210 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e  LE_HIDDEN_COLUMN
2a220 53 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  S.  void sqlite3
2a230 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73  ColumnProperties
2a240 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c  FromName(Table*,
2a250 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65   Column*);.#else
2a260 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2a270 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65  3ColumnPropertie
2a280 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20 2f  sFromName(T,C) /
2a290 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69  * no-op */.#endi
2a2a0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  f.void sqlite3Ad
2a2b0 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54  dColumn(Parse*,T
2a2c0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76  oken*,Token*);.v
2a2d0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f  oid sqlite3AddNo
2a2e0 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e  tNull(Parse*, in
2a2f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2a300 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61  AddPrimaryKey(Pa
2a310 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2a320 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2a330 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
2a340 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28  CheckConstraint(
2a350 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
2a360 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 44  void sqlite3AddD
2a370 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73  efaultValue(Pars
2a380 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63  e*,Expr*,const c
2a390 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
2a3a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2a3b0 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61  ddCollateType(Pa
2a3c0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
2a3d0 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61  oid sqlite3EndTa
2a3e0 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
2a3f0 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65  *,Token*,u8,Sele
2a400 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
2a410 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20  3ParseUri(const 
2a420 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
2a430 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c  *,unsigned int*,
2a440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a450 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73       sqlite3_vfs
2a460 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a  **,char**,char *
2a470 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
2a480 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 69 6e  E_HAS_CODEC.  in
2a490 74 20 73 71 6c 69 74 65 33 43 6f 64 65 63 51 75  t sqlite3CodecQu
2a4a0 65 72 79 50 61 72 61 6d 65 74 65 72 73 28 73 71  eryParameters(sq
2a4b0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
2a4c0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2a4d0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2a4e0 73 71 6c 69 74 65 33 43 6f 64 65 63 51 75 65 72  sqlite3CodecQuer
2a4f0 79 50 61 72 61 6d 65 74 65 72 73 28 41 2c 42 2c  yParameters(A,B,
2a500 43 29 20 30 0a 23 65 6e 64 69 66 0a 42 74 72 65  C) 0.#endif.Btre
2a510 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65  e *sqlite3DbName
2a520 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a  ToBtree(sqlite3*
2a530 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 0a  ,const char*);..
2a540 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  #ifdef SQLITE_UN
2a550 54 45 53 54 41 42 4c 45 0a 23 20 64 65 66 69 6e  TESTABLE.# defin
2a560 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  e sqlite3FaultSi
2a570 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  m(X) SQLITE_OK.#
2a580 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74  else.  int sqlit
2a590 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b  e3FaultSim(int);
2a5a0 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20  .#endif..Bitvec 
2a5b0 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72  *sqlite3BitvecCr
2a5c0 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73  eate(u32);.int s
2a5d0 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
2a5e0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
2a5f0 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
2a600 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74  cTestNotNull(Bit
2a610 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  vec*, u32);.int 
2a620 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74  sqlite3BitvecSet
2a630 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
2a640 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
2a650 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c  ecClear(Bitvec*,
2a660 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f   u32, void*);.vo
2a670 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  id sqlite3Bitvec
2a680 44 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29  Destroy(Bitvec*)
2a690 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74  ;.u32 sqlite3Bit
2a6a0 76 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29  vecSize(Bitvec*)
2a6b0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2a6c0 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e 74 20  _UNTESTABLE.int 
2a6d0 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69  sqlite3BitvecBui
2a6e0 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74  ltinTest(int,int
2a6f0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53  *);.#endif..RowS
2a700 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65  et *sqlite3RowSe
2a710 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b  tInit(sqlite3*);
2a720 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
2a730 53 65 74 44 65 6c 65 74 65 28 76 6f 69 64 2a 29  SetDelete(void*)
2a740 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
2a750 77 53 65 74 43 6c 65 61 72 28 76 6f 69 64 2a 29  wSetClear(void*)
2a760 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
2a770 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65  wSetInsert(RowSe
2a780 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  t*, i64);.int sq
2a790 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
2a7a0 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61  RowSet*, int iBa
2a7b0 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  tch, i64);.int s
2a7c0 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
2a7d0 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b  (RowSet*, i64*);
2a7e0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ..void sqlite3Cr
2a7f0 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c  eateView(Parse*,
2a800 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
2a810 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  ken*,ExprList*,S
2a820 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  elect*,int,int);
2a830 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
2a840 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
2a850 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c   || !defined(SQL
2a860 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2a870 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c  TABLE).  int sql
2a880 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
2a890 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61  nNames(Parse*,Ta
2a8a0 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ble*);.#else.# d
2a8b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65  efine sqlite3Vie
2a8c0 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
2a8d0 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23  A,B) 0.#endif..#
2a8e0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
2a8f0 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20  TACHED>30.  int 
2a900 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
2a910 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23  Zero(yDbMask);.#
2a920 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2a930 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  e3DropTable(Pars
2a940 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
2a950 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2a960 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62  lite3CodeDropTab
2a970 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  le(Parse*, Table
2a980 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
2a990 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
2a9a0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
2a9b0 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Table*);.void sq
2a9c0 6c 69 74 65 33 46 72 65 65 49 6e 64 65 78 28 73  lite3FreeIndex(s
2a9d0 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29  qlite3*, Index*)
2a9e0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2a9f0 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
2aa00 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ENT.  void sqlit
2aa10 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
2aa20 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72  egin(Parse *pPar
2aa30 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  se);.  void sqli
2aa40 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
2aa50 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73  End(Parse *pPars
2aa60 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
2aa70 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
2aa80 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a  crementBegin(X).
2aa90 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2aaa0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
2aab0 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  (X).#endif.void 
2aac0 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61  sqlite3Insert(Pa
2aad0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2aae0 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a  Select*, IdList*
2aaf0 2c 20 69 6e 74 2c 20 55 70 73 65 72 74 2a 29 3b  , int, Upsert*);
2ab00 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72  .void *sqlite3Ar
2ab10 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69  rayAllocate(sqli
2ab20 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69  te3*,void*,int,i
2ab30 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73  nt*,int*);.IdLis
2ab40 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
2ab50 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 20 49  Append(Parse*, I
2ab60 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  dList*, Token*);
2ab70 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69  .int sqlite3IdLi
2ab80 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c  stIndex(IdList*,
2ab90 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72  const char*);.Sr
2aba0 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
2abb0 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 50 61 72  cListEnlarge(Par
2abc0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
2abd0 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73  nt, int);.SrcLis
2abe0 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
2abf0 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 20  tAppend(Parse*, 
2ac00 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
2ac10 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69  , Token*);.SrcLi
2ac20 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
2ac30 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d  stAppendFromTerm
2ac40 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2ac50 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2ac60 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2ac70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac80 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c           Token*,
2ac90 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c   Select*, Expr*,
2aca0 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
2acb0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e  sqlite3SrcListIn
2acc0 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c  dexedBy(Parse *,
2acd0 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65   SrcList *, Toke
2ace0 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n *);.void sqlit
2acf0 65 33 53 72 63 4c 69 73 74 46 75 6e 63 41 72 67  e3SrcListFuncArg
2ad00 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  s(Parse*, SrcLis
2ad10 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  t*, ExprList*);.
2ad20 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
2ad30 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65  edByLookup(Parse
2ad40 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69   *, struct SrcLi
2ad50 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64  st_item *);.void
2ad60 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
2ad70 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63  hiftJoinType(Src
2ad80 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
2ad90 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69 67  ite3SrcListAssig
2ada0 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c  nCursors(Parse*,
2adb0 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64   SrcList*);.void
2adc0 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65   sqlite3IdListDe
2add0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49  lete(sqlite3*, I
2ade0 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
2adf0 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65  lite3SrcListDele
2ae00 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  te(sqlite3*, Src
2ae10 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  List*);.Index *s
2ae20 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e  qlite3AllocateIn
2ae30 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65  dexObject(sqlite
2ae40 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a  3*,i16,int,char*
2ae50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ae60 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73  CreateIndex(Pars
2ae70 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
2ae80 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ,SrcList*,ExprLi
2ae90 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a  st*,int,Token*,.
2aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aeb0 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
2aec0 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
2aed0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
2aee0 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72  Index(Parse*, Sr
2aef0 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  cList*, int);.in
2af00 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28  t sqlite3Select(
2af10 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
2af20 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53   SelectDest*);.S
2af30 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65  elect *sqlite3Se
2af40 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45  lectNew(Parse*,E
2af50 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  xprList*,SrcList
2af60 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
2af70 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2af80 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
2af90 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 33 32 2c  *,ExprList*,u32,
2afa0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2afb0 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65  ite3SelectDelete
2afc0 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63  (sqlite3*, Selec
2afd0 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  t*);.Table *sqli
2afe0 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70  te3SrcListLookup
2aff0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2b000 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
2b010 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a  sReadOnly(Parse*
2b020 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
2b030 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
2b040 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e  Table(Parse*, in
2b050 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c  t iCur, int iDb,
2b060 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23   Table*, int);.#
2b070 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2b080 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
2b090 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26  DELETE_LIMIT) &&
2b0a0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2b0b0 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a  _OMIT_SUBQUERY).
2b0c0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d  Expr *sqlite3Lim
2b0d0 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53  itWhere(Parse*,S
2b0e0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
2b0f0 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 63 68  prList*,Expr*,ch
2b100 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ar*);.#endif.voi
2b110 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
2b120 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
2b130 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  ist*, Expr*, Exp
2b140 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  rList*, Expr*);.
2b150 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61  void sqlite3Upda
2b160 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  te(Parse*, SrcLi
2b170 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45  st*, ExprList*,E
2b180 78 70 72 2a 2c 69 6e 74 2c 45 78 70 72 4c 69 73  xpr*,int,ExprLis
2b190 74 2a 2c 45 78 70 72 2a 2c 0a 20 20 20 20 20 20  t*,Expr*,.      
2b1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 55 70 73               Ups
2b1b0 65 72 74 2a 29 3b 0a 57 68 65 72 65 49 6e 66 6f  ert*);.WhereInfo
2b1c0 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42 65   *sqlite3WhereBe
2b1d0 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  gin(Parse*,SrcLi
2b1e0 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
2b1f0 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31  st*,ExprList*,u1
2b200 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  6,int);.void sql
2b210 69 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65  ite3WhereEnd(Whe
2b220 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74  reInfo*);.LogEst
2b230 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75 74   sqlite3WhereOut
2b240 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65 72  putRowCount(Wher
2b250 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
2b260 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69  ite3WhereIsDisti
2b270 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  nct(WhereInfo*);
2b280 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
2b290 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72 65  eIsOrdered(Where
2b2a0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
2b2b0 74 65 33 57 68 65 72 65 4f 72 64 65 72 42 79 4c  te3WhereOrderByL
2b2c0 69 6d 69 74 4f 70 74 4c 61 62 65 6c 28 57 68 65  imitOptLabel(Whe
2b2d0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
2b2e0 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
2b2f0 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ed(WhereInfo*);.
2b300 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
2b310 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68  ContinueLabel(Wh
2b320 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
2b330 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61 6b  qlite3WhereBreak
2b340 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
2b350 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
2b360 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65  ereOkOnePass(Whe
2b370 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a  reInfo*, int*);.
2b380 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f  #define ONEPASS_
2b390 4f 46 46 20 20 20 20 20 20 30 20 20 20 20 20 20  OFF      0      
2b3a0 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50    /* Use of ONEP
2b3b0 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20  ASS not allowed 
2b3c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  */.#define ONEPA
2b3d0 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20 20 20  SS_SINGLE   1   
2b3e0 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20       /* ONEPASS 
2b3f0 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69 6e 67  valid for a sing
2b400 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20 2a 2f  le row update */
2b410 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53  .#define ONEPASS
2b420 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20 20 20  _MULTI    2     
2b430 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73     /* ONEPASS is
2b440 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69   valid for multi
2b450 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64  ple rows */.void
2b460 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2b470 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28  LoadIndexColumn(
2b480 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
2b490 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
2b4a0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2b4b0 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72  odeGetColumn(Par
2b4c0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2b4d0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
2b4e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2b4f0 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66  rCodeGetColumnOf
2b500 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62  Table(Vdbe*, Tab
2b510 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
2b520 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2b530 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61  3ExprCodeMove(Pa
2b540 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
2b550 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b560 65 33 45 78 70 72 43 6f 64 65 28 50 61 72 73 65  e3ExprCode(Parse
2b570 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2b580 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2b590 43 6f 64 65 43 6f 70 79 28 50 61 72 73 65 2a 2c  CodeCopy(Parse*,
2b5a0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
2b5b0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
2b5c0 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72  deFactorable(Par
2b5d0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
2b5e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2b5f0 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73  rCodeAtInit(Pars
2b600 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
2b610 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2b620 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c  CodeTemp(Parse*,
2b630 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69   Expr*, int*);.i
2b640 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2b650 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c  deTarget(Parse*,
2b660 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
2b670 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
2b680 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65  deAndCache(Parse
2b690 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2b6a0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2b6b0 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73  odeExprList(Pars
2b6c0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
2b6d0 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64  nt, int, u8);.#d
2b6e0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
2b6f0 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30 31 20  L_DUP      0x01 
2b700 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68   /* Deep, not sh
2b710 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a  allow copies */.
2b720 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
2b730 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30  CEL_FACTOR   0x0
2b740 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74  2  /* Factor out
2b750 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20   constant terms 
2b760 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
2b770 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20 20 20  E_ECEL_REF      
2b780 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45 78 70  0x04  /* Use Exp
2b790 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72  rList.u.x.iOrder
2b7a0 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e 65  ByCol */.#define
2b7b0 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 4f 4d 49   SQLITE_ECEL_OMI
2b7c0 54 52 45 46 20 20 30 78 30 38 20 20 2f 2a 20 4f  TREF  0x08  /* O
2b7d0 6d 69 74 20 69 66 20 45 78 70 72 4c 69 73 74 2e  mit if ExprList.
2b7e0 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20  u.x.iOrderByCol 
2b7f0 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  */.void sqlite3E
2b800 78 70 72 49 66 54 72 75 65 28 50 61 72 73 65 2a  xprIfTrue(Parse*
2b810 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
2b820 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2b830 45 78 70 72 49 66 46 61 6c 73 65 28 50 61 72 73  ExprIfFalse(Pars
2b840 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
2b850 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b860 65 33 45 78 70 72 49 66 46 61 6c 73 65 44 75 70  e3ExprIfFalseDup
2b870 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2b880 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65  int, int);.Table
2b890 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62   *sqlite3FindTab
2b8a0 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  le(sqlite3*,cons
2b8b0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2b8c0 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4c  har*);.#define L
2b8d0 4f 43 41 54 45 5f 56 49 45 57 20 20 20 20 30 78  OCATE_VIEW    0x
2b8e0 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54  01.#define LOCAT
2b8f0 45 5f 4e 4f 45 52 52 20 20 20 30 78 30 32 0a 54  E_NOERR   0x02.T
2b900 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
2b910 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ateTable(Parse*,
2b920 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73 74 20  u32 flags,const 
2b930 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2b940 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  r*);.Table *sqli
2b950 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74  te3LocateTableIt
2b960 65 6d 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c  em(Parse*,u32 fl
2b970 61 67 73 2c 73 74 72 75 63 74 20 53 72 63 4c 69  ags,struct SrcLi
2b980 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65  st_item *);.Inde
2b990 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  x *sqlite3FindIn
2b9a0 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  dex(sqlite3*,con
2b9b0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2b9c0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
2b9d0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2b9e0 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33  eteTable(sqlite3
2b9f0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
2ba00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ba10 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49  UnlinkAndDeleteI
2ba20 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e  ndex(sqlite3*,in
2ba30 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
2ba40 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75  void sqlite3Vacu
2ba50 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  um(Parse*,Token*
2ba60 2c 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  ,Expr*);.int sql
2ba70 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68  ite3RunVacuum(ch
2ba80 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20  ar**, sqlite3*, 
2ba90 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  int, sqlite3_val
2baa0 75 65 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ue*);.char *sqli
2bab0 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e  te3NameFromToken
2bac0 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
2bad0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2bae0 78 70 72 43 6f 6d 70 61 72 65 28 50 61 72 73 65  xprCompare(Parse
2baf0 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  *,Expr*, Expr*, 
2bb00 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2bb10 33 45 78 70 72 43 6f 6d 70 61 72 65 53 6b 69 70  3ExprCompareSkip
2bb20 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  (Expr*, Expr*, i
2bb30 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2bb40 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28  ExprListCompare(
2bb50 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c  ExprList*, ExprL
2bb60 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
2bb70 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69  sqlite3ExprImpli
2bb80 65 73 45 78 70 72 28 50 61 72 73 65 2a 2c 45 78  esExpr(Parse*,Ex
2bb90 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
2bba0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2bbb0 72 49 6d 70 6c 69 65 73 4e 6f 6e 4e 75 6c 6c 52  rImpliesNonNullR
2bbc0 6f 77 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76  ow(Expr*,int);.v
2bbd0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
2bbe0 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73  nalyzeAggregates
2bbf0 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
2bc00 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2bc10 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67  te3ExprAnalyzeAg
2bc20 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78  gList(NameContex
2bc30 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  t*,ExprList*);.i
2bc40 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2bc50 76 65 72 65 64 42 79 49 6e 64 65 78 28 45 78 70  veredByIndex(Exp
2bc60 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 49 6e  r*, int iCur, In
2bc70 64 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e 74 20  dex *pIdx);.int 
2bc80 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55  sqlite3FunctionU
2bc90 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72 2a  sesThisSrc(Expr*
2bca0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62  , SrcList*);.Vdb
2bcb0 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62  e *sqlite3GetVdb
2bcc0 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64  e(Parse*);.#ifnd
2bcd0 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
2bce0 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65  ABLE.void sqlite
2bcf0 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76  3PrngSaveState(v
2bd00 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
2bd10 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61  e3PrngRestoreSta
2bd20 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  te(void);.#endif
2bd30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
2bd40 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33  lbackAll(sqlite3
2bd50 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2bd60 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
2bd70 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74  hema(Parse*, int
2bd80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2bd90 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63  odeVerifyNamedSc
2bda0 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e  hema(Parse*, con
2bdb0 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76  st char *zDb);.v
2bdc0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
2bdd0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
2bde0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
2bdf0 71 6c 69 74 65 33 45 6e 64 54 72 61 6e 73 61 63  qlite3EndTransac
2be00 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e 74 29  tion(Parse*,int)
2be10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61  ;.void sqlite3Sa
2be20 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20  vepoint(Parse*, 
2be30 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  int, Token*);.vo
2be40 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53  id sqlite3CloseS
2be50 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65  avepoints(sqlite
2be60 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  3 *);.void sqlit
2be70 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43  e3LeaveMutexAndC
2be80 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74  loseZombie(sqlit
2be90 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
2bea0 33 45 78 70 72 49 64 54 6f 54 72 75 65 46 61 6c  3ExprIdToTrueFal
2beb0 73 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  se(Expr*);.int s
2bec0 71 6c 69 74 65 33 45 78 70 72 54 72 75 74 68 56  qlite3ExprTruthV
2bed0 61 6c 75 65 28 63 6f 6e 73 74 20 45 78 70 72 2a  alue(const Expr*
2bee0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2bef0 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70  prIsConstant(Exp
2bf00 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2bf10 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f  ExprIsConstantNo
2bf20 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  tJoin(Expr*);.in
2bf30 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
2bf40 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f  onstantOrFunctio
2bf50 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e  n(Expr*, u8);.in
2bf60 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
2bf70 6f 6e 73 74 61 6e 74 4f 72 47 72 6f 75 70 42 79  onstantOrGroupBy
2bf80 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2bf90 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
2bfa0 73 71 6c 69 74 65 33 45 78 70 72 49 73 54 61 62  sqlite3ExprIsTab
2bfb0 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a  leConstant(Expr*
2bfc0 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51  ,int);.#ifdef SQ
2bfd0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53  LITE_ENABLE_CURS
2bfe0 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c  OR_HINTS.int sql
2bff0 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69 6e 73  ite3ExprContains
2c000 53 75 62 71 75 65 72 79 28 45 78 70 72 2a 29 3b  Subquery(Expr*);
2c010 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2c020 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65 72  te3ExprIsInteger
2c030 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69  (Expr*, int*);.i
2c040 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  nt sqlite3ExprCa
2c050 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78  nBeNull(const Ex
2c060 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2c070 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69  3ExprNeedsNoAffi
2c080 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74  nityChange(const
2c090 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69   Expr*, char);.i
2c0a0 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69  nt sqlite3IsRowi
2c0b0 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  d(const char*);.
2c0c0 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
2c0d0 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 0a 20  rateRowDelete(. 
2c0e0 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a     Parse*,Table*
2c0f0 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e  ,Trigger*,int,in
2c100 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c  t,int,i16,u8,u8,
2c110 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  u8,int);.void sq
2c120 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77  lite3GenerateRow
2c130 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72 73  IndexDelete(Pars
2c140 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
2c150 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
2c160 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e  ;.int sqlite3Gen
2c170 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61  erateIndexKey(Pa
2c180 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e  rse*, Index*, in
2c190 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  t, int, int, int
2c1a0 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76  *,Index*,int);.v
2c1b0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
2c1c0 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50  vePartIdxLabel(P
2c1d0 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  arse*,int);.int 
2c1e0 73 71 6c 69 74 65 33 45 78 70 72 52 65 66 65 72  sqlite3ExprRefer
2c1f0 65 6e 63 65 73 55 70 64 61 74 65 64 43 6f 6c 75  encesUpdatedColu
2c200 6d 6e 28 45 78 70 72 2a 2c 69 6e 74 2a 2c 69 6e  mn(Expr*,int*,in
2c210 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2c220 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69  GenerateConstrai
2c230 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c  ntChecks(Parse*,
2c240 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c  Table*,int*,int,
2c250 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20  int,int,int,.   
2c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c280 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a    u8,u8,int,int*
2c290 2c 69 6e 74 2a 2c 55 70 73 65 72 74 2a 29 3b 0a  ,int*,Upsert*);.
2c2a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2c2b0 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20  ABLE_NULL_TRIM. 
2c2c0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74   void sqlite3Set
2c2d0 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 56 64 62  MakeRecordP5(Vdb
2c2e0 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73  e*,Table*);.#els
2c2f0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2c300 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50  e3SetMakeRecordP
2c310 35 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f  5(A,B).#endif.vo
2c320 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65  id sqlite3Comple
2c330 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73  teInsertion(Pars
2c340 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e  e*,Table*,int,in
2c350 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69  t,int,int*,int,i
2c360 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  nt,int);.int sql
2c370 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
2c380 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20  Indices(Parse*, 
2c390 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c  Table*, int, u8,
2c3a0 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c   int, u8*, int*,
2c3b0 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   int*);.void sql
2c3c0 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70  ite3BeginWriteOp
2c3d0 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  eration(Parse*, 
2c3e0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2c3f0 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74  sqlite3MultiWrit
2c400 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  e(Parse*);.void 
2c410 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28  sqlite3MayAbort(
2c420 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
2c430 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61  lite3HaltConstra
2c440 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
2c450 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c   int, char*, i8,
2c460 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
2c470 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69  e3UniqueConstrai
2c480 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
2c490 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
2c4a0 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72  lite3RowidConstr
2c4b0 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
2c4c0 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20  , Table*);.Expr 
2c4d0 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28  *sqlite3ExprDup(
2c4e0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
2c4f0 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  nt);.ExprList *s
2c500 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75  qlite3ExprListDu
2c510 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c  p(sqlite3*,ExprL
2c520 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69  ist*,int);.SrcLi
2c530 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
2c540 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53  stDup(sqlite3*,S
2c550 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64  rcList*,int);.Id
2c560 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
2c570 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
2c580 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74  IdList*);.Select
2c590 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44   *sqlite3SelectD
2c5a0 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  up(sqlite3*,Sele
2c5b0 63 74 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65  ct*,int);.FuncDe
2c5c0 66 20 2a 73 71 6c 69 74 65 33 46 75 6e 63 74 69  f *sqlite3Functi
2c5d0 6f 6e 53 65 61 72 63 68 28 69 6e 74 2c 63 6f 6e  onSearch(int,con
2c5e0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2c5f0 73 71 6c 69 74 65 33 49 6e 73 65 72 74 42 75 69  sqlite3InsertBui
2c600 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e 63 44 65  ltinFuncs(FuncDe
2c610 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66  f*,int);.FuncDef
2c620 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e   *sqlite3FindFun
2c630 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63  ction(sqlite3*,c
2c640 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75  onst char*,int,u
2c650 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  8,u8);.void sqli
2c660 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74  te3RegisterBuilt
2c670 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  inFunctions(void
2c680 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2c690 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46  egisterDateTimeF
2c6a0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
2c6b0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
2c6c0 73 74 65 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f  sterPerConnectio
2c6d0 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  nBuiltinFunction
2c6e0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  s(sqlite3*);.int
2c6f0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
2c700 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  eckOk(sqlite3*);
2c710 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
2c720 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28  tyCheckSickOrOk(
2c730 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
2c740 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f  sqlite3ChangeCoo
2c750 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  kie(Parse*, int)
2c760 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
2c770 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
2c780 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
2c790 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2c7a0 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  R).void sqlite3M
2c7b0 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50  aterializeView(P
2c7c0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
2c7d0 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  xpr*, ExprList*,
2c7e0 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  Expr*,int);.#end
2c7f0 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
2c800 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
2c810 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
2c820 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65  ginTrigger(Parse
2c830 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  *, Token*,Token*
2c840 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a  ,int,int,IdList*
2c850 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20  ,SrcList*,.     
2c860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c870 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c        Expr*,int,
2c880 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2c890 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67  lite3FinishTrigg
2c8a0 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
2c8b0 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29  erStep*, Token*)
2c8c0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2c8d0 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73  DropTrigger(Pars
2c8e0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
2c8f0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
2c900 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
2c910 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
2c920 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  *);.  Trigger *s
2c930 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
2c940 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62  ist(Parse *, Tab
2c950 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  le*, int, ExprLi
2c960 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29  st*, int *pMask)
2c970 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
2c980 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
2c990 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a  Parse *, Table *
2c9a0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2c9b0 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
2c9c0 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20  Parse*, Trigger 
2c9d0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
2c9e0 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c  *, int, Table *,
2c9f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ca00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
2ca10 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
2ca20 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
2ca30 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
2ca40 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72  Parse *, Trigger
2ca50 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
2ca60 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
2ca70 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72  oid sqliteViewTr
2ca80 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54  iggers(Parse*, T
2ca90 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
2caa0 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20  t, ExprList*);. 
2cab0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c   void sqlite3Del
2cac0 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73  eteTriggerStep(s
2cad0 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
2cae0 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65  Step*);.  Trigge
2caf0 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
2cb00 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28  iggerSelectStep(
2cb10 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
2cb20 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2cb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb40 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
2cb50 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
2cb60 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
2cb70 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
2cb80 72 49 6e 73 65 72 74 53 74 65 70 28 50 61 72 73  rInsertStep(Pars
2cb90 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73  e*,Token*, IdLis
2cba0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
2cbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbc0 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65              Sele
2cbd0 63 74 2a 2c 75 38 2c 55 70 73 65 72 74 2a 2c 0a  ct*,u8,Upsert*,.
2cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc00 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
2cc10 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
2cc20 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
2cc30 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55  *sqlite3TriggerU
2cc40 70 64 61 74 65 53 74 65 70 28 50 61 72 73 65 2a  pdateStep(Parse*
2cc50 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
2cc60 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 0a 20 20  *, Expr*, u8,.  
2cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc90 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2cca0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
2ccb0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
2ccc0 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c  qlite3TriggerDel
2ccd0 65 74 65 53 74 65 70 28 50 61 72 73 65 2a 2c 54  eteStep(Parse*,T
2cce0 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20 20  oken*, Expr*,.  
2ccf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd10 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2cd20 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
2cd30 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
2cd40 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
2cd50 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  te3*, Trigger*);
2cd60 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
2cd70 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
2cd80 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69  igger(sqlite3*,i
2cd90 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
2cda0 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72  .  u32 sqlite3Tr
2cdb0 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72  iggerColmask(Par
2cdc0 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70  se*,Trigger*,Exp
2cdd0 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54  rList*,int,int,T
2cde0 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65  able*,int);.# de
2cdf0 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
2ce00 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  eToplevel(p) ((p
2ce10 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28  )->pToplevel ? (
2ce20 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20  p)->pToplevel : 
2ce30 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (p)).# define sq
2ce40 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
2ce50 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
2ce60 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64  el==0).#else.# d
2ce70 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
2ce80 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44  ggersExist(B,C,D
2ce90 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65  ,E,F) 0.# define
2cea0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
2ceb0 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66  igger(A,B).# def
2cec0 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54  ine sqlite3DropT
2ced0 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23  riggerPtr(A,B).#
2cee0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55   define sqlite3U
2cef0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
2cf00 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64  igger(A,B,C).# d
2cf10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
2cf20 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c  eRowTrigger(A,B,
2cf30 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23  C,D,E,F,G,H,I).#
2cf40 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
2cf50 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
2cf60 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29  ect(A,B,C,D,E,F)
2cf70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2cf80 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20  3TriggerList(X, 
2cf90 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  Y) 0.# define sq
2cfa0 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
2cfb0 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65  el(p) p.# define
2cfc0 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76   sqlite3IsToplev
2cfd0 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65  el(p) 1.# define
2cfe0 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
2cff0 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45  olmask(A,B,C,D,E
2d000 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a  ,F,G) 0.#endif..
2d010 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54  int sqlite3JoinT
2d020 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
2d030 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
2d040 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2d050 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65  3CreateForeignKe
2d060 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
2d070 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70  st*, Token*, Exp
2d080 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
2d090 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46  id sqlite3DeferF
2d0a0 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
2d0b0 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  , int);.#ifndef 
2d0c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
2d0d0 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64  ORIZATION.  void
2d0e0 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
2d0f0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63  (Parse*,Expr*,Sc
2d100 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b  hema*,SrcList*);
2d110 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
2d120 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69  thCheck(Parse*,i
2d130 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
2d140 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2d150 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
2d160 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
2d170 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a  ntextPush(Parse*
2d180 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20  , AuthContext*, 
2d190 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2d1a0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
2d1b0 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43  ContextPop(AuthC
2d1c0 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20  ontext*);.  int 
2d1d0 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43  sqlite3AuthReadC
2d1e0 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ol(Parse*, const
2d1f0 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
2d200 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  har *, int);.#el
2d210 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2d220 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c  te3AuthRead(a,b,
2d230 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71  c,d).# define sq
2d240 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61  lite3AuthCheck(a
2d250 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c  ,b,c,d,e)    SQL
2d260 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20  ITE_OK.# define 
2d270 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
2d280 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20  xtPush(a,b,c).# 
2d290 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
2d2a0 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20  thContextPop(a) 
2d2b0 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e   ((void)(a)).#en
2d2c0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2d2d0 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
2d2e0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  xpr*, Expr*, Exp
2d2f0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2d300 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Detach(Parse*, 
2d310 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2d320 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69  ite3FixInit(DbFi
2d330 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e  xer*, Parse*, in
2d340 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
2d350 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69  const Token*);.i
2d360 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63  nt sqlite3FixSrc
2d370 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53  List(DbFixer*, S
2d380 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
2d390 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44  lite3FixSelect(D
2d3a0 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a  bFixer*, Select*
2d3b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2d3c0 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20  xExpr(DbFixer*, 
2d3d0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2d3e0 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44  te3FixExprList(D
2d3f0 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73  bFixer*, ExprLis
2d400 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2d410 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44  FixTriggerStep(D
2d420 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72  bFixer*, Trigger
2d430 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Step*);.int sqli
2d440 74 65 33 52 65 61 6c 53 61 6d 65 41 73 49 6e 74  te3RealSameAsInt
2d450 28 64 6f 75 62 6c 65 2c 73 71 6c 69 74 65 33 5f  (double,sqlite3_
2d460 69 6e 74 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  int64);.int sqli
2d470 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
2d480 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20  ar *z, double*, 
2d490 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
2d4a0 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
2d4b0 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a  nst char *, int*
2d4c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
2d4d0 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  oi(const char*);
2d4e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2d4f0 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e 74 20 73  OMIT_UTF16.int s
2d500 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c  qlite3Utf16ByteL
2d510 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  en(const void *p
2d520 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29  Data, int nChar)
2d530 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
2d540 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28  ite3Utf8CharLen(
2d550 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74  const char *pDat
2d560 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75  a, int nByte);.u
2d570 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65  32 sqlite3Utf8Re
2d580 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a  ad(const u8**);.
2d590 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
2d5a0 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73  gEst(u64);.LogEs
2d5b0 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41  t sqlite3LogEstA
2d5c0 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74  dd(LogEst,LogEst
2d5d0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2d5e0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2d5f0 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  BLE.LogEst sqlit
2d600 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62  e3LogEstFromDoub
2d610 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64  le(double);.#end
2d620 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
2d630 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
2d640 54 5f 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c  T_SCANSTATUS) ||
2d650 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53   \.    defined(S
2d660 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
2d670 54 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20  T3_OR_STAT4) || 
2d680 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51  \.    defined(SQ
2d690 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54  LITE_EXPLAIN_EST
2d6a0 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34  IMATED_ROWS).u64
2d6b0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f   sqlite3LogEstTo
2d6c0 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e  Int(LogEst);.#en
2d6d0 64 69 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74  dif.VList *sqlit
2d6e0 65 33 56 4c 69 73 74 41 64 64 28 73 71 6c 69 74  e3VListAdd(sqlit
2d6f0 65 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74  e3*,VList*,const
2d700 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b   char*,int,int);
2d710 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2d720 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61  ite3VListNumToNa
2d730 6d 65 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  me(VList*,int);.
2d740 69 6e 74 20 73 71 6c 69 74 65 33 56 4c 69 73 74  int sqlite3VList
2d750 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a  NameToNum(VList*
2d760 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2d770 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e  );../*.** Routin
2d780 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77  es to read and w
2d790 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65  rite variable-le
2d7a0 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20  ngth integers.  
2d7b0 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a  These used to.**
2d7c0 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61   be defined loca
2d7d0 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20  lly, but now we 
2d7e0 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72  use the varint r
2d7f0 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75  outines in the u
2d800 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  til.c.** file..*
2d810 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74  /.int sqlite3Put
2d820 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20  Varint(unsigned 
2d830 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20  char*, u64);.u8 
2d840 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2d850 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
2d860 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a  char *, u64 *);.
2d870 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
2d880 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69  int32(const unsi
2d890 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32  gned char *, u32
2d8a0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2d8b0 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29  VarintLen(u64 v)
2d8c0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  ;../*.** The com
2d8d0 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20  mon case is for 
2d8e0 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61  a varint to be a
2d8f0 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54   single byte.  T
2d900 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  hey following.**
2d910 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74   macros handle t
2d920 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77  he common case w
2d930 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75  ithout a procedu
2d940 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65  re call, but the
2d950 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72  n call.** the pr
2d960 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67  ocedure for larg
2d970 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23  er varints..*/.#
2d980 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
2d990 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
2d9a0 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30  )((*(A)<(u8)0x80
2d9b0 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29  )?((B)=(u32)*(A)
2d9c0 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61  ),1:sqlite3GetVa
2d9d0 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20  rint32((A),(u32 
2d9e0 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65  *)&(B))).#define
2d9f0 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42   putVarint32(A,B
2da00 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33  )  \.  (u8)(((u3
2da10 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29  2)(B)<(u32)0x80)
2da20 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64  ?(*(A)=(unsigned
2da30 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20   char)(B)),1:\. 
2da40 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
2da50 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66  t((A),(B))).#def
2da60 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20  ine getVarint   
2da70 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
2da80 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  t.#define putVar
2da90 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75  int    sqlite3Pu
2daa0 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20  tVarint...const 
2dab0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64  char *sqlite3Ind
2dac0 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 73 71  exAffinityStr(sq
2dad0 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b  lite3*, Index*);
2dae0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62  .void sqlite3Tab
2daf0 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a  leAffinity(Vdbe*
2db00 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
2db10 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70  char sqlite3Comp
2db20 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72  areAffinity(Expr
2db30 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66   *pExpr, char af
2db40 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  f2);.int sqlite3
2db50 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28  IndexAffinityOk(
2db60 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
2db70 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b  r idx_affinity);
2db80 0a 63 68 61 72 20 73 71 6c 69 74 65 33 54 61 62  .char sqlite3Tab
2db90 6c 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  leColumnAffinity
2dba0 28 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68  (Table*,int);.ch
2dbb0 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66  ar sqlite3ExprAf
2dbc0 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
2dbd0 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
2dbe0 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61  Atoi64(const cha
2dbf0 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75  r*, i64*, int, u
2dc00 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  8);.int sqlite3D
2dc10 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e  ecOrHexToI64(con
2dc20 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b  st char*, i64*);
2dc30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
2dc40 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65  orWithMsg(sqlite
2dc50 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
2dc60 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20  har*,...);.void 
2dc70 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c  sqlite3Error(sql
2dc80 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
2dc90 20 73 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72   sqlite3SystemEr
2dca0 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ror(sqlite3*,int
2dcb0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
2dcc0 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65  HexToBlob(sqlite
2dcd0 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  3*, const char *
2dce0 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71  z, int n);.u8 sq
2dcf0 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e  lite3HexToInt(in
2dd00 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t h);.int sqlite
2dd10 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72  3TwoPartName(Par
2dd20 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  se *, Token *, T
2dd30 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a  oken *, Token **
2dd40 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  );..#if defined(
2dd50 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f  SQLITE_NEED_ERR_
2dd60 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72  NAME).const char
2dd70 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65   *sqlite3ErrName
2dd80 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  (int);.#endif..#
2dd90 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2dda0 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a  BLE_DESERIALIZE.
2ddb0 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 62  int sqlite3Memdb
2ddc0 49 6e 69 74 28 76 6f 69 64 29 3b 0a 23 65 6e 64  Init(void);.#end
2ddd0 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  if..const char *
2dde0 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e  sqlite3ErrStr(in
2ddf0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  t);.int sqlite3R
2de00 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20  eadSchema(Parse 
2de10 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65  *pParse);.CollSe
2de20 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f  q *sqlite3FindCo
2de30 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75  llSeq(sqlite3*,u
2de40 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61  8 enc, const cha
2de50 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  r*,int);.int sql
2de60 69 74 65 33 49 73 42 69 6e 61 72 79 28 63 6f 6e  ite3IsBinary(con
2de70 73 74 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a 43 6f  st CollSeq*);.Co
2de80 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f  llSeq *sqlite3Lo
2de90 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  cateCollSeq(Pars
2dea0 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74  e *pParse, const
2deb0 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f   char*zName);.Co
2dec0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78  llSeq *sqlite3Ex
2ded0 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  prCollSeq(Parse 
2dee0 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
2def0 45 78 70 72 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  Expr);.CollSeq *
2df00 73 71 6c 69 74 65 33 45 78 70 72 4e 4e 43 6f 6c  sqlite3ExprNNCol
2df10 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
2df20 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29  se, Expr *pExpr)
2df30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2df40 72 43 6f 6c 6c 53 65 71 4d 61 74 63 68 28 50 61  rCollSeqMatch(Pa
2df50 72 73 65 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  rse*,Expr*,Expr*
2df60 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2df70 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f  ExprAddCollateTo
2df80 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  ken(Parse *pPars
2df90 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20  e, Expr*, const 
2dfa0 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78  Token*, int);.Ex
2dfb0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
2dfc0 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28  ddCollateString(
2dfd0 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e  Parse*,Expr*,con
2dfe0 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20  st char*);.Expr 
2dff0 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70  *sqlite3ExprSkip
2e000 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a  Collate(Expr*);.
2e010 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
2e020 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
2e030 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74   CollSeq *);.int
2e040 20 73 71 6c 69 74 65 33 57 72 69 74 61 62 6c 65   sqlite3Writable
2e050 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 29  Schema(sqlite3*)
2e060 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
2e070 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72  ckObjectName(Par
2e080 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  se *, const char
2e090 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2e0a0 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
2e0b0 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b  sqlite3 *, int);
2e0c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49  .int sqlite3AddI
2e0d0 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
2e0e0 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e  int sqlite3SubIn
2e0f0 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
2e100 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74  nt sqlite3MulInt
2e110 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
2e120 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33  t sqlite3AbsInt3
2e130 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53  2(int);.#ifdef S
2e140 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33  QLITE_ENABLE_8_3
2e150 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69  _NAMES.void sqli
2e160 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 63  te3FileSuffix3(c
2e170 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
2e180 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2e190 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75  ne sqlite3FileSu
2e1a0 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69  ffix3(X,Y).#endi
2e1b0 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 42  f.u8 sqlite3GetB
2e1c0 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61  oolean(const cha
2e1d0 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74  r *z,u8);..const
2e1e0 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61   void *sqlite3Va
2e1f0 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f  lueText(sqlite3_
2e200 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74  value*, u8);.int
2e210 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74   sqlite3ValueByt
2e220 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  es(sqlite3_value
2e230 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  *, u8);.void sql
2e240 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
2e250 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2e260 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  int, const void 
2e270 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20  *,u8,.          
2e280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f                vo
2e290 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
2e2a0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2e2b0 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f  SetNull(sqlite3_
2e2c0 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71  value*);.void sq
2e2d0 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 73  lite3ValueFree(s
2e2e0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
2e2f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55  #ifndef SQLITE_U
2e300 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73  NTESTABLE.void s
2e310 71 6c 69 74 65 33 52 65 73 75 6c 74 49 6e 74 52  qlite3ResultIntR
2e320 65 61 6c 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  eal(sqlite3_cont
2e330 65 78 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 73 71  ext*);.#endif.sq
2e340 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c  lite3_value *sql
2e350 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c  ite3ValueNew(sql
2e360 69 74 65 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66  ite3 *);.#ifndef
2e370 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
2e380 31 36 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  16.char *sqlite3
2e390 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33  Utf16to8(sqlite3
2e3a0 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c   *, const void*,
2e3b0 20 69 6e 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69   int, u8);.#endi
2e3c0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  f.int sqlite3Val
2e3d0 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74  ueFromExpr(sqlit
2e3e0 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38  e3 *, Expr *, u8
2e3f0 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61  , u8, sqlite3_va
2e400 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  lue **);.void sq
2e410 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41  lite3ValueApplyA
2e420 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f  ffinity(sqlite3_
2e430 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29  value *, u8, u8)
2e440 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2e450 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78  _AMALGAMATION.ex
2e460 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
2e470 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
2e480 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  OpcodeProperty[]
2e490 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63  ;.extern const c
2e4a0 68 61 72 20 73 71 6c 69 74 65 33 53 74 72 42 49  har sqlite3StrBI
2e4b0 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  NARY[];.extern c
2e4c0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2e4d0 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54  ar sqlite3UpperT
2e4e0 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e  oLower[];.extern
2e4f0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
2e500 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70  char sqlite3Ctyp
2e510 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  eMap[];.extern c
2e520 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74  onst Token sqlit
2e530 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65  e3IntTokens[];.e
2e540 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
2e550 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43   struct Sqlite3C
2e560 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
2e570 66 69 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63  fig;.extern Func
2e580 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 42  DefHash sqlite3B
2e590 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b  uiltinFunctions;
2e5a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2e5b0 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20  OMIT_WSD.extern 
2e5c0 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69  int sqlite3Pendi
2e5d0 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23  ngByte;.#endif.#
2e5e0 65 6e 64 69 66 0a 23 69 66 64 65 66 20 56 44 42  endif.#ifdef VDB
2e5f0 45 5f 50 52 4f 46 49 4c 45 0a 65 78 74 65 72 6e  E_PROFILE.extern
2e600 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20   sqlite3_uint64 
2e610 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65 43  sqlite3NProfileC
2e620 6e 74 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  nt;.#endif.void 
2e630 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
2e640 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69  oved(sqlite3*, i
2e650 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
2e660 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64  oid sqlite3Reind
2e670 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ex(Parse*, Token
2e680 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
2e690 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e   sqlite3AlterFun
2e6a0 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
2e6b0 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52  id sqlite3AlterR
2e6c0 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65  enameTable(Parse
2e6d0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
2e6e0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2e6f0 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 43 6f 6c  e3AlterRenameCol
2e700 75 6d 6e 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  umn(Parse*, SrcL
2e710 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
2e720 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2e730 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74  e3GetToken(const
2e740 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
2e750 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73  , int *);.void s
2e760 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73  qlite3NestedPars
2e770 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  e(Parse*, const 
2e780 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
2e790 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50  d sqlite3ExpireP
2e7a0 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
2e7b0 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  s(sqlite3*, int)
2e7c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
2e7d0 64 65 52 68 73 4f 66 49 4e 28 50 61 72 73 65 2a  deRhsOfIN(Parse*
2e7e0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
2e7f0 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75  nt sqlite3CodeSu
2e800 62 73 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20  bselect(Parse*, 
2e810 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2e820 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50  ite3SelectPrep(P
2e830 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
2e840 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
2e850 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
2e860 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72  tWrongNumTermsEr
2e870 72 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72 73  ror(Parse *pPars
2e880 65 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69  e, Select *p);.i
2e890 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53  nt sqlite3MatchS
2e8a0 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68  panName(const ch
2e8b0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2e8c0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2e8d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
2e8e0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
2e8f0 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  xprNames(NameCon
2e900 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  text*, Expr*);.i
2e910 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
2e920 65 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e  eExprListNames(N
2e930 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
2e940 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  rList*);.void sq
2e950 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65  lite3ResolveSele
2e960 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20  ctNames(Parse*, 
2e970 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
2e980 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  text*);.int sqli
2e990 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65  te3ResolveSelfRe
2e9a0 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54  ference(Parse*,T
2e9b0 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c  able*,int,Expr*,
2e9c0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
2e9d0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72  sqlite3ResolveOr
2e9e0 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73 65  derGroupBy(Parse
2e9f0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72  *, Select*, Expr
2ea00 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
2ea10 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2ea20 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56  3ColumnDefault(V
2ea30 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  dbe *, Table *, 
2ea40 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2ea50 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69  sqlite3AlterFini
2ea60 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  shAddColumn(Pars
2ea70 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76  e *, Token *);.v
2ea80 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
2ea90 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50  BeginAddColumn(P
2eaa0 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20  arse *, SrcList 
2eab0 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
2eac0 33 52 65 6e 61 6d 65 54 6f 6b 65 6e 4d 61 70 28  3RenameTokenMap(
2ead0 50 61 72 73 65 2a 2c 20 76 6f 69 64 2a 2c 20 54  Parse*, void*, T
2eae0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2eaf0 69 74 65 33 52 65 6e 61 6d 65 54 6f 6b 65 6e 52  ite3RenameTokenR
2eb00 65 6d 61 70 28 50 61 72 73 65 2a 2c 20 76 6f 69  emap(Parse*, voi
2eb10 64 20 2a 70 54 6f 2c 20 76 6f 69 64 20 2a 70 46  d *pTo, void *pF
2eb20 72 6f 6d 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  rom);.void sqlit
2eb30 65 33 52 65 6e 61 6d 65 45 78 70 72 55 6e 6d 61  e3RenameExprUnma
2eb40 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  p(Parse*, Expr*)
2eb50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2eb60 6e 61 6d 65 45 78 70 72 6c 69 73 74 55 6e 6d 61  nameExprlistUnma
2eb70 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  p(Parse*, ExprLi
2eb80 73 74 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  st*);.CollSeq *s
2eb90 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71  qlite3GetCollSeq
2eba0 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c  (Parse*, u8, Col
2ebb0 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68  lSeq *, const ch
2ebc0 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  ar*);.char sqlit
2ebd0 65 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63  e3AffinityType(c
2ebe0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 43 6f 6c 75  onst char*, Colu
2ebf0 6d 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  mn*);.void sqlit
2ec00 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a  e3Analyze(Parse*
2ec10 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2ec20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
2ec30 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28  vokeBusyHandler(
2ec40 42 75 73 79 48 61 6e 64 6c 65 72 2a 2c 20 73 71  BusyHandler*, sq
2ec50 6c 69 74 65 33 5f 66 69 6c 65 2a 29 3b 0a 69 6e  lite3_file*);.in
2ec60 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28  t sqlite3FindDb(
2ec70 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
2ec80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2ec90 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33  ndDbName(sqlite3
2eca0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2ecb0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e  );.int sqlite3An
2ecc0 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74  alysisLoad(sqlit
2ecd0 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f  e3*,int iDB);.vo
2ece0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
2ecf0 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c  IndexSamples(sql
2ed00 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76  ite3*,Index*);.v
2ed10 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75  oid sqlite3Defau
2ed20 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29  ltRowEst(Index*)
2ed30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2ed40 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69  gisterLikeFuncti
2ed50 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ons(sqlite3*, in
2ed60 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  t);.int sqlite3I
2ed70 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71  sLikeFunction(sq
2ed80 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
2ed90 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  *,char*);.void s
2eda0 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61  qlite3SchemaClea
2edb0 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d  r(void *);.Schem
2edc0 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61  a *sqlite3Schema
2edd0 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42  Get(sqlite3 *, B
2ede0 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  tree *);.int sql
2edf0 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65  ite3SchemaToInde
2ee00 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53  x(sqlite3 *db, S
2ee10 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66  chema *);.KeyInf
2ee20 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
2ee30 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  oAlloc(sqlite3*,
2ee40 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
2ee50 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72  qlite3KeyInfoUnr
2ee60 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65  ef(KeyInfo*);.Ke
2ee70 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
2ee80 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f  yInfoRef(KeyInfo
2ee90 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
2eea0 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64  ite3KeyInfoOfInd
2eeb0 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78  ex(Parse*, Index
2eec0 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
2eed0 69 74 65 33 4b 65 79 49 6e 66 6f 46 72 6f 6d 45  ite3KeyInfoFromE
2eee0 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20  xprList(Parse*, 
2eef0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
2ef00 69 6e 74 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  int);..#ifdef SQ
2ef10 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73  LITE_DEBUG.int s
2ef20 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57  qlite3KeyInfoIsW
2ef30 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f  riteable(KeyInfo
2ef40 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  *);.#endif.int s
2ef50 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63  qlite3CreateFunc
2ef60 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
2ef70 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69  t char *, int, i
2ef80 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f  nt, void *,.  vo
2ef90 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
2efa0 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
2efb0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20  te3_value **),. 
2efc0 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
2efd0 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
2efe0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
2eff0 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  , .  void (*)(sq
2f000 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c  lite3_context*),
2f010 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
2f020 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20  te3_context*),. 
2f030 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
2f040 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
2f050 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
2f060 2c 20 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63  , .  FuncDestruc
2f070 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
2f080 0a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
2f090 4e 6f 6f 70 44 65 73 74 72 75 63 74 6f 72 28 76  NoopDestructor(v
2f0a0 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
2f0b0 74 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c 69  te3OomFault(sqli
2f0c0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
2f0d0 74 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c 69  te3OomClear(sqli
2f0e0 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
2f0f0 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65  e3ApiExit(sqlite
2f100 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74  3 *db, int);.int
2f110 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70   sqlite3OpenTemp
2f120 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a  Database(Parse *
2f130 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
2f140 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72  StrAccumInit(Str
2f150 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a  Accum*, sqlite3*
2f160 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e  , char*, int, in
2f170 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  t);.char *sqlite
2f180 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28  3StrAccumFinish(
2f190 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
2f1a0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
2f1b0 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73  stInit(SelectDes
2f1c0 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70  t*,int,int);.Exp
2f1d0 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65  r *sqlite3Create
2f1e0 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74  ColumnExpr(sqlit
2f1f0 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  e3 *, SrcList *,
2f200 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69   int, int);..voi
2f210 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52  d sqlite3BackupR
2f220 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62  estart(sqlite3_b
2f230 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73  ackup *);.void s
2f240 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61  qlite3BackupUpda
2f250 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  te(sqlite3_backu
2f260 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74  p *, Pgno, const
2f270 20 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65 66   u8 *);..#ifndef
2f280 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42   SQLITE_OMIT_SUB
2f290 51 55 45 52 59 0a 69 6e 74 20 73 71 6c 69 74 65  QUERY.int sqlite
2f2a0 33 45 78 70 72 43 68 65 63 6b 49 4e 28 50 61 72  3ExprCheckIN(Par
2f2b0 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65 6c  se*, Expr*);.#el
2f2c0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2f2d0 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 78  te3ExprCheckIN(x
2f2e0 2c 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65  ,y) SQLITE_OK.#e
2f2f0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2f300 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
2f310 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73  _OR_STAT4.void s
2f320 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e  qlite3AnalyzeFun
2f330 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e  ctions(void);.in
2f340 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  t sqlite3Stat4Pr
2f350 6f 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20 20  obeSetValue(.   
2f360 20 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55   Parse*,Index*,U
2f370 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c  npackedRecord**,
2f380 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  Expr*,int,int,in
2f390 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2f3a0 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78  Stat4ValueFromEx
2f3b0 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  pr(Parse*, Expr*
2f3c0 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61  , u8, sqlite3_va
2f3d0 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lue**);.void sql
2f3e0 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 46 72  ite3Stat4ProbeFr
2f3f0 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  ee(UnpackedRecor
2f400 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
2f410 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69  Stat4Column(sqli
2f420 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  te3*, const void
2f430 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c  *, int, int, sql
2f440 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 63  ite3_value**);.c
2f450 68 61 72 20 73 71 6c 69 74 65 33 49 6e 64 65 78  har sqlite3Index
2f460 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73  ColumnAffinity(s
2f470 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 2c  qlite3*, Index*,
2f480 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f   int);.#endif../
2f490 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
2f4a0 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d  ce to the LEMON-
2f4b0 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72  generated parser
2f4c0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
2f4d0 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
2f4e0 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50    void *sqlite3P
2f4f0 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a  arserAlloc(void*
2f500 28 2a 29 28 75 36 34 29 2c 20 50 61 72 73 65 2a  (*)(u64), Parse*
2f510 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2f520 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64  3ParserFree(void
2f530 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a  *, void(*)(void*
2f540 29 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  ));.#endif.void 
2f550 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f  sqlite3Parser(vo
2f560 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 29  id*, int, Token)
2f570 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72  ;.int sqlite3Par
2f580 73 65 72 46 61 6c 6c 62 61 63 6b 28 69 6e 74 29  serFallback(int)
2f590 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b  ;.#ifdef YYTRACK
2f5a0 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20  MAXSTACKDEPTH.  
2f5b0 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
2f5c0 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a  rStackPeak(void*
2f5d0 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20  );.#endif..void 
2f5e0 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45  sqlite3AutoLoadE
2f5f0 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
2f600 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  3*);.#ifndef SQL
2f610 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58  ITE_OMIT_LOAD_EX
2f620 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73  TENSION.  void s
2f630 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
2f640 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
2f650 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2f660 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
2f670 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66  nsions(X).#endif
2f680 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2f690 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
2f6a0 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  HE.  void sqlite
2f6b0 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65  3TableLock(Parse
2f6c0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38   *, int, int, u8
2f6d0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2f6e0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2f6f0 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
2f700 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e  k(v,w,x,y,z).#en
2f710 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2f720 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71  TE_TEST.  int sq
2f730 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73  lite3Utf8To8(uns
2f740 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65  igned char*);.#e
2f750 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2f760 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2f770 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
2f780 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
2f790 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (Y).#  define sq
2f7a0 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c  lite3VtabSync(X,
2f7b0 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20  Y) SQLITE_OK.#  
2f7c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2f7d0 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20  abRollback(X).# 
2f7e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2f7f0 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20  tabCommit(X).#  
2f800 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2f810 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23  abInSync(db) 0.#
2f820 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2f830 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20 64  VtabLock(X).#  d
2f840 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2f850 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65  bUnlock(X).#  de
2f860 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2f870 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20  UnlockList(X).# 
2f880 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2f890 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20  tabSavepoint(X, 
2f8a0 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  Y, Z) SQLITE_OK.
2f8b0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2f8c0 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20  3GetVTable(X,Y) 
2f8d0 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65   ((VTable*)0).#e
2f8e0 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  lse.   void sqli
2f8f0 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c  te3VtabClear(sql
2f900 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a  ite3 *db, Table*
2f910 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2f920 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74  e3VtabDisconnect
2f930 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
2f940 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20  ble *p);.   int 
2f950 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
2f960 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62  sqlite3 *db, Vdb
2f970 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  e*);.   int sqli
2f980 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
2f990 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
2f9a0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
2f9b0 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a  Commit(sqlite3 *
2f9c0 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  db);.   void sql
2f9d0 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61  ite3VtabLock(VTa
2f9e0 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
2f9f0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2fa00 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
2fa10 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2fa20 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74  UnlockList(sqlit
2fa30 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  e3*);.   int sql
2fa40 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
2fa50 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  t(sqlite3 *, int
2fa60 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20  , int);.   void 
2fa70 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
2fa80 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73  tErrmsg(Vdbe*, s
2fa90 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20  qlite3_vtab*);. 
2faa0 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65    VTable *sqlite
2fab0 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74  3GetVTable(sqlit
2fac0 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  e3*, Table*);.  
2fad0 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33   Module *sqlite3
2fae0 56 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c 65  VtabCreateModule
2faf0 28 0a 20 20 20 20 20 73 71 6c 69 74 65 33 2a 2c  (.     sqlite3*,
2fb00 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  .     const char
2fb10 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 73 71  *,.     const sq
2fb20 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a 20  lite3_module*,. 
2fb30 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20 20      void*,.     
2fb40 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a 20  void(*)(void*). 
2fb50 20 20 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73    );.#  define s
2fb60 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
2fb70 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72  (db) ((db)->nVTr
2fb80 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61  ans>0 && (db)->a
2fb90 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69  VTrans==0).#endi
2fba0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  f.int sqlite3Vta
2fbb0 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49  bEponymousTableI
2fbc0 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c  nit(Parse*,Modul
2fbd0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2fbe0 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61  3VtabEponymousTa
2fbf0 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65 33  bleClear(sqlite3
2fc00 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64  *,Module*);.void
2fc10 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65   sqlite3VtabMake
2fc20 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c  Writable(Parse*,
2fc30 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Table*);.void sq
2fc40 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61  lite3VtabBeginPa
2fc50 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  rse(Parse*, Toke
2fc60 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
2fc70 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  n*, int);.void s
2fc80 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68  qlite3VtabFinish
2fc90 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f  Parse(Parse*, To
2fca0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2fcb0 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50  te3VtabArgInit(P
2fcc0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
2fcd0 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e  ite3VtabArgExten
2fce0 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  d(Parse*, Token*
2fcf0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
2fd00 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c  abCallCreate(sql
2fd10 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
2fd20 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a  t char *, char *
2fd30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2fd40 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50  tabCallConnect(P
2fd50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  arse*, Table*);.
2fd60 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
2fd70 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74  allDestroy(sqlit
2fd80 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
2fd90 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
2fda0 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71  ite3VtabBegin(sq
2fdb0 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20  lite3 *, VTable 
2fdc0 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  *);.FuncDef *sql
2fdd0 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64  ite3VtabOverload
2fde0 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
2fdf0 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74   *,FuncDef*, int
2fe00 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 73   nArg, Expr*);.s
2fe10 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c  qlite3_int64 sql
2fe20 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54  ite3StmtCurrentT
2fe30 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ime(sqlite3_cont
2fe40 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ext*);.int sqlit
2fe50 65 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49  e3VdbeParameterI
2fe60 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73  ndex(Vdbe*, cons
2fe70 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69  t char*, int);.i
2fe80 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66  nt sqlite3Transf
2fe90 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74  erBindings(sqlit
2fea0 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74  e3_stmt *, sqlit
2feb0 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64  e3_stmt *);.void
2fec0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 52 65   sqlite3ParserRe
2fed0 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 23 69 66  set(Parse*);.#if
2fee0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2fef0 45 5f 4e 4f 52 4d 41 4c 49 5a 45 0a 63 68 61 72  E_NORMALIZE.char
2ff00 20 2a 73 71 6c 69 74 65 33 4e 6f 72 6d 61 6c 69   *sqlite3Normali
2ff10 7a 65 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20  ze(Vdbe*, const 
2ff20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69  char*);.#endif.i
2ff30 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  nt sqlite3Reprep
2ff40 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64  are(Vdbe*);.void
2ff50 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
2ff60 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73  CheckLength(Pars
2ff70 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  e*, ExprList*, c
2ff80 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c  onst char*);.Col
2ff90 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e  lSeq *sqlite3Bin
2ffa0 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65  aryCompareCollSe
2ffb0 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  q(Parse *, Expr 
2ffc0 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20  *, Expr *);.int 
2ffd0 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d  sqlite3TempInMem
2ffe0 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65  ory(const sqlite
2fff0 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  3*);.const char 
30000 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  *sqlite3JournalM
30010 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69  odename(int);.#i
30020 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
30030 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69  T_WAL.  int sqli
30040 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71  te3Checkpoint(sq
30050 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
30060 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20  , int*, int*);. 
30070 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44   int sqlite3WalD
30080 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a  efaultHook(void*
30090 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
300a0 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  char*,int);.#end
300b0 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
300c0 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74  E_OMIT_CTE.  Wit
300d0 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64  h *sqlite3WithAd
300e0 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54  d(Parse*,With*,T
300f0 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
30100 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
30110 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
30120 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68  te(sqlite3*,With
30130 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
30140 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65  e3WithPush(Parse
30150 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  *, With*, u8);.#
30160 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c  else.#define sql
30170 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79  ite3WithPush(x,y
30180 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  ,z).#define sqli
30190 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c  te3WithDelete(x,
301a0 79 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  y).#endif.#ifnde
301b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 50  f SQLITE_OMIT_UP
301c0 53 45 52 54 0a 20 20 55 70 73 65 72 74 20 2a 73  SERT.  Upsert *s
301d0 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77 28  qlite3UpsertNew(
301e0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
301f0 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
30200 74 2a 2c 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  t*,Expr*);.  voi
30210 64 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  d sqlite3UpsertD
30220 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 55  elete(sqlite3*,U
30230 70 73 65 72 74 2a 29 3b 0a 20 20 55 70 73 65 72  psert*);.  Upser
30240 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65 72 74  t *sqlite3Upsert
30250 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 55 70 73  Dup(sqlite3*,Ups
30260 65 72 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ert*);.  int sql
30270 69 74 65 33 55 70 73 65 72 74 41 6e 61 6c 79 7a  ite3UpsertAnalyz
30280 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 53  eTarget(Parse*,S
30290 72 63 4c 69 73 74 2a 2c 55 70 73 65 72 74 2a 29  rcList*,Upsert*)
302a0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
302b0 55 70 73 65 72 74 44 6f 55 70 64 61 74 65 28 50  UpsertDoUpdate(P
302c0 61 72 73 65 2a 2c 55 70 73 65 72 74 2a 2c 54 61  arse*,Upsert*,Ta
302d0 62 6c 65 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29  ble*,Index*,int)
302e0 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  ;.#else.#define 
302f0 73 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77  sqlite3UpsertNew
30300 28 76 2c 77 2c 78 2c 79 2c 7a 29 20 28 28 55 70  (v,w,x,y,z) ((Up
30310 73 65 72 74 2a 29 30 29 0a 23 64 65 66 69 6e 65  sert*)0).#define
30320 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 65   sqlite3UpsertDe
30330 6c 65 74 65 28 78 2c 79 29 0a 23 64 65 66 69 6e  lete(x,y).#defin
30340 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  e sqlite3UpsertD
30350 75 70 28 78 2c 79 29 20 20 20 20 20 20 20 28 28  up(x,y)       ((
30360 55 70 73 65 72 74 2a 29 30 29 0a 23 65 6e 64 69  Upsert*)0).#endi
30370 66 0a 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69  f.../* Declarati
30380 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ons for function
30390 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c  s in fkey.c. All
303a0 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65   of these are re
303b0 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d  placed by.** no-
303c0 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49  op macros if OMI
303d0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
303e0 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69   defined. In thi
303f0 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67  s case no foreig
30400 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f  n.** key functio
30410 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61  nality is availa
30420 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49  ble. If OMIT_TRI
30430 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20  GGER is defined 
30440 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45  but.** OMIT_FORE
30450 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20  IGN_KEY is not, 
30460 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65  only some of the
30470 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e   functions are n
30480 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68  o-oped. In.** th
30490 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20  is case foreign 
304a0 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c  keys are parsed,
304b0 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75   but no other fu
304c0 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a  nctionality is.*
304d0 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f  * provided (enfo
304e0 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f  rcement of FK co
304f0 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72  nstraints requir
30500 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20  es the triggers 
30510 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a  sub-system)..*/.
30520 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
30530 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
30540 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65  _KEY) && !define
30550 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
30560 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71  IGGER).  void sq
30570 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72  lite3FkCheck(Par
30580 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
30590 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
305a0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
305b0 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72  3FkDropTable(Par
305c0 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  se*, SrcList *, 
305d0 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20  Table*);.  void 
305e0 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
305f0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
30600 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
30610 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69   int*, int);.  i
30620 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  nt sqlite3FkRequ
30630 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62  ired(Parse*, Tab
30640 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  le*, int*, int);
30650 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b  .  u32 sqlite3Fk
30660 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20  Oldmask(Parse*, 
30670 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20  Table*);.  FKey 
30680 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65  *sqlite3FkRefere
30690 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23  nces(Table *);.#
306a0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
306b0 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
306c0 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
306d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
306e0 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c  Check(a,b,c,d,e,
306f0 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  f).  #define sql
30700 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
30710 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65  a,b,c).  #define
30720 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
30730 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30  k(a,b)         0
30740 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
30750 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62  e3FkRequired(a,b
30760 2c 63 2c 64 29 20 20 20 20 30 0a 20 20 23 64 65  ,c,d)    0.  #de
30770 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65  fine sqlite3FkRe
30780 66 65 72 65 6e 63 65 73 28 61 29 20 20 20 20 20  ferences(a)     
30790 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e     0.#endif.#ifn
307a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
307b0 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f  FOREIGN_KEY.  vo
307c0 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  id sqlite3FkDele
307d0 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61  te(sqlite3 *, Ta
307e0 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ble*);.  int sql
307f0 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
30800 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  x(Parse*,Table*,
30810 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e  FKey*,Index**,in
30820 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t**);.#else.  #d
30830 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
30840 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65  elete(a,b).  #de
30850 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f  fine sqlite3FkLo
30860 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c  cateIndex(a,b,c,
30870 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  d,e).#endif.../*
30880 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61  .** Available fa
30890 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20  ult injectors.  
308a0 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72  Should be number
308b0 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
308c0 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  h 0..*/.#define 
308d0 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
308e0 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  CTOR_MALLOC     
308f0 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  0.#define SQLITE
30900 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43  _FAULTINJECTOR_C
30910 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OUNT      1../*.
30920 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
30930 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20   to the code in 
30940 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72  fault.c used for
30950 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65   identifying "be
30960 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  nign".** malloc 
30970 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69  failures. This i
30980 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69  s only present i
30990 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
309a0 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65  BLE.** is not de
309b0 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  fined..*/.#ifnde
309c0 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
309d0 42 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BLE.  void sqlit
309e0 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
309f0 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69  loc(void);.  voi
30a00 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  d sqlite3EndBeni
30a10 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
30a20 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
30a30 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
30a40 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65  gnMalloc().  #de
30a50 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42  fine sqlite3EndB
30a60 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65  enignMalloc().#e
30a70 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
30a80 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
30a90 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69  s from sqlite3Fi
30aa0 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23  ndInIndex().*/.#
30ab0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
30ac0 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20  ROWID        1  
30ad0 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72   /* Search the r
30ae0 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
30af0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  e */.#define IN_
30b00 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20  INDEX_EPH       
30b10 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68     2   /* Search
30b20 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d   an ephemeral b-
30b30 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
30b40 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41  IN_INDEX_INDEX_A
30b50 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69  SC    3   /* Exi
30b60 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45  sting index ASCE
30b70 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
30b80 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
30b90 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78  DESC   4   /* Ex
30ba0 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53  isting index DES
30bb0 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
30bc0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
30bd0 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20           5   /* 
30be0 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62  No table availab
30bf0 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73  le. Use comparis
30c00 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ons */./*.** All
30c10 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74  owed flags for t
30c20 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72  he 3rd parameter
30c30 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49   to sqlite3FindI
30c40 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65  nIndex()..*/.#de
30c50 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
30c60 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31  OP_OK     0x0001
30c70 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72    /* OK to retur
30c80 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  n IN_INDEX_NOOP 
30c90 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
30ca0 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20  DEX_MEMBERSHIP  
30cb0 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70  0x0002  /* IN op
30cc0 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20  erator used for 
30cd0 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20  membership test 
30ce0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
30cf0 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20  DEX_LOOP        
30d00 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70  0x0004  /* IN op
30d10 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61  erator used as a
30d20 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c   loop */.int sql
30d30 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
30d40 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
30d50 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   u32, int*, int*
30d60 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73 71  , int*);..int sq
30d70 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e  lite3JournalOpen
30d80 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20  (sqlite3_vfs *, 
30d90 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71  const char *, sq
30da0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e  lite3_file *, in
30db0 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
30dc0 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  ite3JournalSize(
30dd0 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a  sqlite3_vfs *);.
30de0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
30df0 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43  TE_ENABLE_ATOMIC
30e00 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c 20 64 65  _WRITE) \. || de
30e10 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
30e20 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
30e30 5f 57 52 49 54 45 29 0a 20 20 69 6e 74 20 73 71  _WRITE).  int sq
30e40 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61  lite3JournalCrea
30e50 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  te(sqlite3_file 
30e60 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  *);.#endif..int 
30e70 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49 73  sqlite3JournalIs
30e80 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65 33  InMemory(sqlite3
30e90 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64 20  _file *p);.void 
30ea0 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61  sqlite3MemJourna
30eb0 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69  lOpen(sqlite3_fi
30ec0 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  le *);..void sql
30ed0 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68  ite3ExprSetHeigh
30ee0 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20  tAndFlags(Parse 
30ef0 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
30f00 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  );.#if SQLITE_MA
30f10 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
30f20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65   int sqlite3Sele
30f30 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c  ctExprHeight(Sel
30f40 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ect *);.  int sq
30f50 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
30f60 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  ight(Parse*, int
30f70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
30f80 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  ne sqlite3Select
30f90 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a  ExprHeight(x) 0.
30fa0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
30fb0 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
30fc0 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33  (x,y).#endif..u3
30fd0 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74  2 sqlite3Get4byt
30fe0 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f  e(const u8*);.vo
30ff0 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79  id sqlite3Put4by
31000 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23  te(u8*, u32);..#
31010 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
31020 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
31030 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  Y.  void sqlite3
31040 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
31050 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c  d(sqlite3 *, sql
31060 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20  ite3 *);.  void 
31070 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
31080 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  nUnlocked(sqlite
31090 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73  3 *db);.  void s
310a0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
310b0 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a  Closed(sqlite3 *
310c0 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  db);.#else.  #de
310d0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
310e0 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c  ectionBlocked(x,
310f0 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  y).  #define sql
31100 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
31110 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66  locked(x).  #def
31120 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
31130 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23  ctionClosed(x).#
31140 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
31150 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69  LITE_DEBUG.  voi
31160 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54  d sqlite3ParserT
31170 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72  race(FILE*, char
31180 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20   *);.#endif.#if 
31190 64 65 66 69 6e 65 64 28 59 59 43 4f 56 45 52 41  defined(YYCOVERA
311a0 47 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  GE).  int sqlite
311b0 33 50 61 72 73 65 72 43 6f 76 65 72 61 67 65 28  3ParserCoverage(
311c0 46 49 4c 45 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  FILE*);.#endif..
311d0 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  /*.** If the SQL
311e0 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41  ITE_ENABLE IOTRA
311f0 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74  CE exists then t
31200 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
31210 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54  le.** sqlite3IoT
31220 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65  race is a pointe
31230 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69  r to a printf-li
31240 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20  ke routine used 
31250 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20  to.** print I/O 
31260 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73  tracing messages
31270 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
31280 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43  TE_ENABLE_IOTRAC
31290 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  E.# define IOTRA
312a0 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74  CE(A)  if( sqlit
312b0 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c  e3IoTrace ){ sql
312c0 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d  ite3IoTrace A; }
312d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56  .  void sqlite3V
312e0 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64  dbeIOTraceSql(Vd
312f0 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49  be*);.SQLITE_API
31300 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76   SQLITE_EXTERN v
31310 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43  oid (SQLITE_CDEC
31320 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63  L *sqlite3IoTrac
31330 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  e)(const char*,.
31340 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  ..);.#else.# def
31350 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23  ine IOTRACE(A).#
31360 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
31370 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29  dbeIOTraceSql(X)
31380 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
31390 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72  hese routines ar
313a0 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  e available for 
313b0 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67  the mem2.c debug
313c0 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ging memory allo
313d0 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  cator.** only.  
313e0 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f  They are used to
313f0 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66   verify that dif
31400 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f  ferent "types" o
31410 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f  f memory.** allo
31420 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70  cations are prop
31430 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20  erly tracked by 
31440 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a  the system..**.*
31450 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
31460 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20  gSetType() sets 
31470 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e  the "type" of an
31480 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f   allocation to o
31490 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d  ne of.** the MEM
314a0 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65  TYPE_* macros de
314b0 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68  fined below.  Th
314c0 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61  e type must be a
314d0 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a   bitmask with.**
314e0 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65   a single bit se
314f0 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  t..**.** sqlite3
31500 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
31510 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
31520 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74  f any of the bit
31530 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
31540 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
31550 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
31560 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
31570 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
31580 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69  tType()..** sqli
31590 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
315a0 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64  pe() is intended
315b0 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20   for use inside 
315c0 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
315d0 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  nts..**.** sqlit
315e0 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
315f0 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
31600 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62  if none of the b
31610 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
31620 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
31630 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
31640 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
31650 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
31660 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a  SetType()..**.**
31670 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73   Perhaps the mos
31680 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e  t important poin
31690 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65  t is the differe
316a0 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54  nce between MEMT
316b0 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20  YPE_HEAP.** and 
316c0 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
316d0 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61  E.  If an alloca
316e0 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f  tion is MEMTYPE_
316f0 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20  LOOKASIDE, that 
31700 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68  means.** it migh
31710 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  t have been allo
31720 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  cated by lookasi
31730 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61  de, except the a
31740 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a  llocation was.**
31750 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f   too large or lo
31760 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65  okaside was alre
31770 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73  ady full.  It is
31780 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65   important to ve
31790 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c  rify.** that all
317a0 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ocations that mi
317b0 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61  ght have been sa
317c0 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61  tisfied by looka
317d0 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20  side are not.** 
317e0 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e  passed back to n
317f0 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
31800 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41  e() routines.  A
31810 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74  sserts such as t
31820 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62  he.** example ab
31830 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f  ove are placed o
31840 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  n the non-lookas
31850 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
31860 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  nes to verify.**
31870 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74   this constraint
31880 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74  ..**.** All of t
31890 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72  his is no-op for
318a0 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75   a production bu
318b0 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f  ild.  It only co
318c0 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79  mes into.** play
318d0 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45   when the SQLITE
318e0 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c  _MEMDEBUG compil
318f0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
31900 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66   used..*/.#ifdef
31910 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
31920 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
31930 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76  emdebugSetType(v
31940 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
31950 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
31960 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  asType(void*,u8)
31970 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
31980 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f  emdebugNoType(vo
31990 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23  id*,u8);.#else.#
319a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
319b0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58  emdebugSetType(X
319c0 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  ,Y)  /* no-op */
319d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
319e0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
319f0 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e  (X,Y)  1.# defin
31a00 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
31a10 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31  gNoType(X,Y)   1
31a20 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20  .#endif.#define 
31a30 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20  MEMTYPE_HEAP    
31a40 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65     0x01  /* Gene
31a50 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74  ral heap allocat
31a60 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
31a70 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
31a80 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70  E  0x02  /* Heap
31a90 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
31aa0 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20   been lookaside 
31ab0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
31ac0 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
31ad0 30 34 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  04  /* Page cach
31ae0 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
31af0 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e  ../*.** Threadin
31b00 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23  g interface.*/.#
31b10 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  if SQLITE_MAX_WO
31b20 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69  RKER_THREADS>0.i
31b30 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
31b40 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72  Create(SQLiteThr
31b50 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76  ead**,void*(*)(v
31b60 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e  oid*),void*);.in
31b70 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a  t sqlite3ThreadJ
31b80 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64  oin(SQLiteThread
31b90 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64  *, void**);.#end
31ba0 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
31bb0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42  SQLITE_ENABLE_DB
31bc0 50 41 47 45 5f 56 54 41 42 29 20 7c 7c 20 64 65  PAGE_VTAB) || de
31bd0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
31be0 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  T).int sqlite3Db
31bf0 70 61 67 65 52 65 67 69 73 74 65 72 28 73 71 6c  pageRegister(sql
31c00 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 23  ite3*);.#endif.#
31c10 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
31c20 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f  E_ENABLE_DBSTAT_
31c30 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64  VTAB) || defined
31c40 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e  (SQLITE_TEST).in
31c50 74 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52  t sqlite3DbstatR
31c60 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a  egister(sqlite3*
31c70 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73  );.#endif..int s
31c80 71 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f 72  qlite3ExprVector
31c90 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72  Size(Expr *pExpr
31ca0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
31cb0 70 72 49 73 56 65 63 74 6f 72 28 45 78 70 72 20  prIsVector(Expr 
31cc0 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73  *pExpr);.Expr *s
31cd0 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c  qlite3VectorFiel
31ce0 64 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20  dSubexpr(Expr*, 
31cf0 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
31d00 74 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72  te3ExprForVector
31d10 46 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70  Field(Parse*,Exp
31d20 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  r*,int);.void sq
31d30 6c 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72  lite3VectorError
31d40 4d 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Msg(Parse*, Expr
31d50 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  *);..#ifndef SQL
31d60 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
31d70 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e  OPTION_DIAGS.con
31d80 73 74 20 63 68 61 72 20 2a 2a 73 71 6c 69 74 65  st char **sqlite
31d90 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 28  3CompileOptions(
31da0 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e  int *pnOpt);.#en
31db0 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  dif..#endif /* S
31dc0 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a        QLITEINT_H */.