/ Hex Artifact Content
Login

Artifact e96520f27310016d0dabb496e13346244bbea83a6adc3134810e026f1d4a02b6:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  ed(__PTRDIFF_TYP
1f20: 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61  E__)  /* This ca
1f30: 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66  se should work f
1f40: 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69  or GCC */.# defi
1f50: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
1f60: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
1f70: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1f80: 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  __)(X)).# define
1f90: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
1fa0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f  NT(X)  ((int)(__
1fb0: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
1fc0: 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  X)).#elif !defin
1fd0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20  ed(__GNUC__)    
1fe0: 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20     /* Works for 
1ff0: 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20  compilers other 
2000: 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64  than LLVM */.# d
2010: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2020: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2030: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
2040: 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X]).# define SQL
2050: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2060: 29 20 20 28 28 69 6e 74 29 28 28 28 63 68 61 72  )  ((int)(((char
2070: 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a  *)X)-(char*)0)).
2080: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41  #elif defined(HA
2090: 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f  VE_STDINT_H)   /
20a0: 2a 20 55 73 65 20 74 68 69 73 20 63 61 73 65 20  * Use this case 
20b0: 69 66 20 77 65 20 68 61 76 65 20 41 4e 53 49 20  if we have ANSI 
20c0: 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66  headers */.# def
20d0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
20e0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
20f0: 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  *)(intptr_t)(X))
2100: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2110: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2120: 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29  ((int)(intptr_t)
2130: 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  (X)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
6950: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 28 64 65  |    \.      (de
6960: 66 69 6e 65 64 28 5f 5f 54 4f 53 5f 41 49 58 5f  fined(__TOS_AIX_
6970: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
6980: 5f 36 34 42 49 54 5f 5f 29 29 0a 23 20 20 20 64  _64BIT__)).#   d
6990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
69a0: 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20  SIZE 4.# else.# 
69b0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
69c0: 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69  PTRSIZE 8.# endi
69d0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  f.#endif../* The
69e0: 20 75 70 74 72 20 74 79 70 65 20 69 73 20 61 6e   uptr type is an
69f0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6a00: 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
6a10: 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72  o hold a pointer
6a20: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6a30: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20  HAVE_STDINT_H). 
6a40: 20 74 79 70 65 64 65 66 20 75 69 6e 74 70 74 72   typedef uintptr
6a50: 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53  _t uptr;.#elif S
6a60: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34  QLITE_PTRSIZE==4
6a70: 0a 20 20 74 79 70 65 64 65 66 20 75 33 32 20 75  .  typedef u32 u
6a80: 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ptr;.#else.  typ
6a90: 65 64 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23  edef u64 uptr;.#
6aa0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6ab0: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6ac0: 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63  ,S,E) macro chec
6ad0: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69  ks to see if poi
6ae0: 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f  nter P points to
6af0: 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65  .** something be
6b00: 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69  tween S (inclusi
6b10: 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75  ve) and E (exclu
6b20: 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  sive)..**.** In 
6b30: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69  other words, S i
6b40: 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 45  s a buffer and E
6b50: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6b60: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
6b70: 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64  after.** the end
6b80: 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20 54   of buffer S.  T
6b90: 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e  his macro return
6ba0: 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e  s true if P poin
6bb0: 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a  ts to something.
6bc0: 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  ** contained wit
6bd0: 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 53  hin the buffer S
6be0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
6bf0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
6c00: 29 20 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28  ) (((uptr)(P)>=(
6c10: 75 70 74 72 29 28 53 29 29 26 26 28 28 75 70 74  uptr)(S))&&((upt
6c20: 72 29 28 50 29 3c 28 75 70 74 72 29 28 45 29 29  r)(P)<(uptr)(E))
6c30: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  ).../*.** Macros
6c40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
6c50: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
6c60: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
6c70: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
6c80: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
6c90: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
6ca0: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
6cb0: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
6cc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
6cd0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
6ce0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
6cf0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
6d00: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
6d10: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
6d20: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
6d30: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
6d40: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
6d50: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6d60: 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  =0 is set, then 
6d70: 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65  byte-order is de
6d80: 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72  termined.** at r
6d90: 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e  un-time..*/.#ifn
6da0: 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  def SQLITE_BYTEO
6db0: 52 44 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65  RDER.# if define
6dc0: 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64  d(i386)     || d
6dd0: 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29  efined(__i386__)
6de0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d     || defined(_M
6df0: 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20  _IX86) ||    \. 
6e00: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38      defined(__x8
6e10: 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64  6_64) || defined
6e20: 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20  (__x86_64__) || 
6e30: 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20  defined(_M_X64) 
6e40: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
6e50: 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20  fined(_M_AMD64) 
6e60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52  || defined(_M_AR
6e70: 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  M)     || define
6e80: 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20  d(__x86)   ||   
6e90: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6ea0: 5f 5f 61 72 6d 5f 5f 29 20 20 7c 7c 20 64 65 66  __arm__)  || def
6eb0: 69 6e 65 64 28 5f 4d 5f 41 52 4d 36 34 29 0a 23  ined(_M_ARM64).#
6ec0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6ed0: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32  _BYTEORDER    12
6ee0: 33 34 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65  34.# elif define
6ef0: 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64  d(sparc)    || d
6f00: 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a  efined(__ppc__).
6f10: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6f20: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34  E_BYTEORDER    4
6f30: 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  321.# else.#   d
6f40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
6f50: 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66  EORDER 0.# endif
6f60: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
6f70: 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33  TE_BYTEORDER==43
6f80: 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  21.# define SQLI
6f90: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
6fa0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
6fb0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30  E_LITTLEENDIAN 0
6fc0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6fd0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
6fe0: 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c  LITE_UTF16BE.#el
6ff0: 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  if SQLITE_BYTEOR
7000: 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69  DER==1234.# defi
7010: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
7020: 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e  IAN    0.# defin
7030: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7040: 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65  NDIAN 1.# define
7050: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
7060: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
7070: 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65  6LE.#else.# ifde
7080: 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
7090: 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e  ATION.  const in
70a0: 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31  t sqlite3one = 1
70b0: 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72  ;.# else.  exter
70c0: 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69  n const int sqli
70d0: 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a  te3one;.# endif.
70e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
70f0: 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28  BIGENDIAN    (*(
7100: 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33  char *)(&sqlite3
7110: 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e  one)==0).# defin
7120: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7130: 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29  NDIAN (*(char *)
7140: 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31  (&sqlite3one)==1
7150: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
7160: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 28  E_UTF16NATIVE  (
7170: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
7180: 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a  ?SQLITE_UTF16BE:
7190: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a  SQLITE_UTF16LE).
71a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f  #endif../*.** Co
71b0: 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20  nstants for the 
71c0: 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c  largest and smal
71d0: 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34  lest possible 64
71e0: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
71f0: 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d  gers..** These m
7200: 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e  acros are design
7210: 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65  ed to work corre
7220: 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d  ctly on both 32-
7230: 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a  bit and 64-bit.*
7240: 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a  * compilers..*/.
7250: 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f  #define LARGEST_
7260: 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66 66  INT64  (0xffffff
7270: 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66 66  ff|(((i64)0x7fff
7280: 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66  ffff)<<32)).#def
7290: 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  ine SMALLEST_INT
72a0: 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20  64 (((i64)-1) - 
72b0: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a  LARGEST_INT64)..
72c0: 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61  /*.** Round up a
72d0: 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e   number to the n
72e0: 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69  ext larger multi
72f0: 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20  ple of 8.  This 
7300: 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f  is used.** to fo
7310: 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e  rce 8-byte align
7320: 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61  ment on 64-bit a
7330: 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f  rchitectures..*/
7340: 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28  .#define ROUND8(
7350: 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26  x)     (((x)+7)&
7360: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64  ~7)../*.** Round
7370: 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61   down to the nea
7380: 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66  rest multiple of
7390: 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f   8.*/.#define RO
73a0: 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29  UNDDOWN8(x) ((x)
73b0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65  &~7)../*.** Asse
73c0: 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e  rt that the poin
73d0: 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64  ter X is aligned
73e0: 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f   to an 8-byte bo
73f0: 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a  undary.  This.**
7400: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f   macro is used o
7410: 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72  nly within asser
7420: 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68  t() to verify th
7430: 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73  at the code gets
7440: 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e  .** all alignmen
7450: 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63  t restrictions c
7460: 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78  orrect..**.** Ex
7470: 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f  cept, if SQLITE_
7480: 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d  4_BYTE_ALIGNED_M
7490: 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64  ALLOC is defined
74a0: 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e  , then the.** un
74b0: 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28  derlying malloc(
74c0: 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  ) implementation
74d0: 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73   might return us
74e0: 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a   4-byte aligned.
74f0: 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e  ** pointers.  In
7500: 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79   that case, only
7510: 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61   verify 4-byte a
7520: 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66  lignment..*/.#if
7530: 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54  def SQLITE_4_BYT
7540: 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43  E_ALIGNED_MALLOC
7550: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
7560: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
7570: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
7580: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29  ) - (char*)0)&3)
7590: 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
75a0: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
75b0: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
75c0: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
75d0: 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23  har*)0)&7)==0).#
75e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73  endif../*.** Dis
75f0: 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61  able MMAP on pla
7600: 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20  tforms where it 
7610: 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20  is known to not 
7620: 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69  work.*/.#if defi
7630: 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29  ned(__OpenBSD__)
7640: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e   || defined(__QN
7650: 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20  XNTO__).# undef 
7660: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
7670: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7680: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7690: 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ZE 0.#endif../*.
76a0: 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d  ** Default maxim
76b0: 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72  um size of memor
76c0: 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79  y used by memory
76d0: 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74  -mapped I/O in t
76e0: 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66  he VFS.*/.#ifdef
76f0: 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63   __APPLE__.# inc
7700: 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64  lude <TargetCond
7710: 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64  itionals.h>.#end
7720: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
7730: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
7740: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
7750: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
7760: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
7770: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
7780: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
7790: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
77a0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
77b0: 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66  _sun) \.  || def
77c0: 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f  ined(__FreeBSD__
77d0: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
77e0: 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a  (__DragonFly__).
77f0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
7800: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
7810: 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32  0x7fff0000  /* 2
7820: 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65  147418112 */.# e
7830: 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53  lse.#   define S
7840: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
7850: 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 0.# endif.#e
7860: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
7870: 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a  default MMAP_SIZ
7880: 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c  E is zero on all
7890: 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c   platforms.  Or,
78a0: 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65   even if a large
78b0: 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41  r.** default MMA
78c0: 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66  P_SIZE is specif
78d0: 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ied at compile-t
78e0: 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74  ime, make sure t
78f0: 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e  hat it does.** n
7900: 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61  ot exceed the ma
7910: 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e  ximum mmap size.
7920: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
7930: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7940: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7950: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
7960: 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a  P_SIZE 0.#endif.
7970: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
7980: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
7990: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
79a0: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
79b0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
79c0: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
79d0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
79e0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
79f0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
7a00: 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65  ../*.** Only one
7a10: 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   of SQLITE_ENABL
7a20: 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54  E_STAT3 or SQLIT
7a30: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63  E_ENABLE_STAT4 c
7a40: 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a  an be defined..*
7a50: 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69  * Priority is gi
7a60: 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e  ven to SQLITE_EN
7a70: 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20  ABLE_STAT4.  If 
7a80: 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e  either are defin
7a90: 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69  ed, also.** defi
7aa0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7ab0: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
7ac0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
7ad0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20  _ENABLE_STAT4.# 
7ae0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
7af0: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
7b00: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7b10: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
7b20: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
7b30: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
7b40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
7b50: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
7b60: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
7b70: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
7b80: 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53  _STAT4.# undef S
7b90: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7ba0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64  T3_OR_STAT4.#end
7bb0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54  if../*.** SELECT
7bc0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69  TRACE_ENABLED wi
7bd0: 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f  ll be either 1 o
7be0: 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  r 0 depending on
7bf0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a   whether or not.
7c00: 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75  ** the Select qu
7c10: 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72  ery generator tr
7c20: 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74  acing logic is t
7c30: 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66  urned on..*/.#if
7c40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
7c50: 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41  ENABLE_SELECTTRA
7c60: 43 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c  CE).# define SEL
7c70: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
7c80: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
7c90: 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  e SELECTTRACE_EN
7ca0: 41 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a  ABLED 0.#endif..
7cb0: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
7cc0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
7cd0: 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
7ce0: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
7cf0: 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a  e busy-handler.*
7d00: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  * callback for a
7d10: 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61   given sqlite ha
7d20: 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndle..**.** The 
7d30: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
7d40: 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  er member of the
7d50: 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63   sqlite struct c
7d60: 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79  ontains the busy
7d70: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
7d80: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
7d90: 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72  ndle. Each pager
7da0: 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20   opened via the 
7db0: 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65  sqlite.** handle
7dc0: 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69   is passed a poi
7dd0: 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62  nter to sqlite.b
7de0: 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20  usyHandler. The 
7df0: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
7e00: 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72  callback is curr
7e10: 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e  ently invoked on
7e20: 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70  ly from within p
7e30: 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64  ager.c..*/.typed
7e40: 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61  ef struct BusyHa
7e50: 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65  ndler BusyHandle
7e60: 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61  r;.struct BusyHa
7e70: 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  ndler {.  int (*
7e80: 78 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f  xBusyHandler)(vo
7e90: 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54  id *,int);  /* T
7ea0: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
7eb0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73   */.  void *pBus
7ec0: 79 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  yArg;           
7ed0: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
7ee0: 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c   arg to busy cal
7ef0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
7f00: 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  Busy;           
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7f20: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
7f30: 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20   each busy call 
7f40: 2a 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69  */.  u8 bExtraFi
7f50: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
7f60: 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64         /* Includ
7f70: 65 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61  e sqlite3_file a
7f80: 73 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a  s callback arg *
7f90: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65  /.};../*.** Name
7fa0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
7fb0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20  atabase table.  
7fc0: 54 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  The master datab
7fd0: 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  ase table.** is 
7fe0: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20  a special table 
7ff0: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e  that holds the n
8000: 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75  ames and attribu
8010: 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73  tes of all.** us
8020: 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  er tables and in
8030: 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  dices..*/.#defin
8040: 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20  e MASTER_NAME   
8050: 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74      "sqlite_mast
8060: 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50  er".#define TEMP
8070: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73  _MASTER_NAME  "s
8080: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
8090: 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f  r"../*.** The ro
80a0: 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d  ot-page of the m
80b0: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
80c0: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
80d0: 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20   MASTER_ROOT    
80e0: 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
80f0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65  name of the sche
8100: 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  ma table..*/.#de
8110: 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c  fine SCHEMA_TABL
8120: 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45  E(x)  ((!OMIT_TE
8130: 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45  MPDB)&&(x==1)?TE
8140: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d  MP_MASTER_NAME:M
8150: 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a  ASTER_NAME)../*.
8160: 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65  ** A convenience
8170: 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75   macro that retu
8180: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
8190: 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a  f elements in.**
81a0: 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64   an array..*/.#d
81b0: 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28  efine ArraySize(
81c0: 58 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a  X)    ((int)(siz
81d0: 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b  eof(X)/sizeof(X[
81e0: 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  0])))../*.** Det
81f0: 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72  ermine if the ar
8200: 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65  gument is a powe
8210: 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66  r of two.*/.#def
8220: 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f  ine IsPowerOfTwo
8230: 28 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31  (X) (((X)&((X)-1
8240: 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  ))==0)../*.** Th
8250: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75  e following valu
8260: 65 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f  e as a destructo
8270: 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73  r means to use s
8280: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a  qlite3DbFree()..
8290: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62  ** The sqlite3Db
82a0: 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72  Free() routine r
82b0: 65 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61  equires two para
82c0: 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f  meters instead o
82d0: 66 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72  f the.** one par
82e0: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
82f0: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
8300: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
8310: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a  ve to introduce.
8320: 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61  ** this magic va
8330: 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64  lue that the cod
8340: 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c  e knows to handl
8350: 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20  e differently.  
8360: 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77  Any.** pointer w
8370: 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73  ill work here as
8380: 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64   long as it is d
8390: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c  istinct from SQL
83a0: 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e  ITE_STATIC.** an
83b0: 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  d SQLITE_TRANSIE
83c0: 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NT..*/.#define S
83d0: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20  QLITE_DYNAMIC   
83e0: 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75  ((sqlite3_destru
83f0: 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65  ctor_type)sqlite
8400: 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a  3MallocSize)../*
8410: 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f  .** When SQLITE_
8420: 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69  OMIT_WSD is defi
8430: 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ned, it means th
8440: 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c  at the target pl
8450: 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e  atform does.** n
8460: 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61  ot support Writa
8470: 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20  ble Static Data 
8480: 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c  (WSD) such as gl
8490: 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20  obal and static 
84a0: 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c  variables..** Al
84b0: 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74  l variables must
84c0: 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68   either be on th
84d0: 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d  e stack or dynam
84e0: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
84f0: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61   from.** the hea
8500: 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20  p.  When WSD is 
8510: 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  unsupported, the
8520: 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72   variable declar
8530: 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64  ations scattered
8540: 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74  .** throughout t
8550: 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d  he SQLite code m
8560: 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ust become const
8570: 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54  ants instead.  T
8580: 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a  he SQLITE_WSD.**
8590: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
85a0: 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e  or this purpose.
85b0: 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66    And instead of
85c0: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65   referencing the
85d0: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72   variable.** dir
85e0: 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74  ectly, we use it
85f0: 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20  s constant as a 
8600: 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68  key to lookup th
8610: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8620: 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74  ated.** buffer t
8630: 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76  hat holds real v
8640: 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f  ariable.  The co
8650: 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74  nstant is also t
8660: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a  he initializer.*
8670: 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69  * for the run-ti
8680: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  me allocated buf
8690: 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  fer..**.** In th
86a0: 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65  e usual case whe
86b0: 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72  re WSD is suppor
86c0: 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  ted, the SQLITE_
86d0: 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a  WSD and GLOBAL.*
86e0: 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20  * macros become 
86f0: 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20  no-ops and have 
8700: 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65  zero performance
8710: 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64   impact..*/.#ifd
8720: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
8730: 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  SD.  #define SQL
8740: 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20  ITE_WSD const.  
8750: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
8760: 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65  ,v) (*(t*)sqlite
8770: 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64  3_wsd_find((void
8780: 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76  *)&(v), sizeof(v
8790: 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ))).  #define sq
87a0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
87b0: 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20  g GLOBAL(struct 
87c0: 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73  Sqlite3Config, s
87d0: 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20  qlite3Config).  
87e0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f  int sqlite3_wsd_
87f0: 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20  init(int N, int 
8800: 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  J);.  void *sqli
8810: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69  te3_wsd_find(voi
8820: 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65  d *K, int L);.#e
8830: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51  lse.  #define SQ
8840: 4c 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69  LITE_WSD.  #defi
8850: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76  ne GLOBAL(t,v) v
8860: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
8870: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73  e3GlobalConfig s
8880: 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e  qlite3Config.#en
8890: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
88a0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
88b0: 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70  are used to supp
88c0: 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61  ress compiler wa
88d0: 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a  rnings and to.**
88e0: 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74   make it clear t
88f0: 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20  o human readers 
8900: 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  when a function 
8910: 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c  parameter is del
8920: 69 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66  iberately.** lef
8930: 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20  t unused within 
8940: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
8950: 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75  nction. This usu
8960: 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65  ally happens whe
8970: 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20  n.** a function 
8980: 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20  is called via a 
8990: 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
89a0: 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  . For example th
89b0: 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
89c0: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
89d0: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
89e0: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
89f0: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
8a00: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
8a10: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
8a20: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
8a30: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
8a40: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
8a50: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
8a60: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
8a70: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
8a80: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
8a90: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
8aa0: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
8ab0: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
8ac0: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
8ad0: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
8ae0: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
8af0: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
8b00: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
8b10: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
8b20: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
8b30: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
8b40: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
8b50: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
8b60: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
8b70: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
8b80: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
8b90: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
8ba0: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
8bb0: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
8bc0: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
8bd0: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
8be0: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
8bf0: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
8c00: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
8c10: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
8c20: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
8c30: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
8c40: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
8c50: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
8c60: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
8c70: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
8c80: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
8c90: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
8ca0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
8cb0: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
8cc0: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
8cd0: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
8ce0: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
8cf0: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
8d00: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
8d10: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8d20: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
8d30: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
8d40: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
8d50: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
8d60: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
8d70: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
8d80: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
8d90: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
8da0: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
8db0: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
8dc0: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
8dd0: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
8de0: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
8df0: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
8e00: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
8e10: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
8e20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e30: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
8e40: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
8e50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e60: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
8e70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e80: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
8e90: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
8ea0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
8eb0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
8ec0: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
8ed0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8ee0: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
8ef0: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
8f00: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
8f10: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
8f20: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
8f30: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
8f40: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
8f50: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
8f60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
8f70: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
8f80: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
8f90: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
8fa0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
8fb0: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
8fc0: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
8fd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8fe0: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
8ff0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55  edef struct PreU
9000: 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b  pdate PreUpdate;
9010: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9020: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
9030: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b  PrintfArguments;
9040: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9050: 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e 61  RenameToken Rena
9060: 6d 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66  meToken;.typedef
9070: 20 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52   struct RowSet R
9080: 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73  owSet;.typedef s
9090: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
90a0: 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64  Savepoint;.typed
90b0: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
90c0: 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66   Select;.typedef
90d0: 20 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68   struct SQLiteTh
90e0: 72 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61  read SQLiteThrea
90f0: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
9100: 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c  t SelectDest Sel
9110: 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66  ectDest;.typedef
9120: 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20   struct SrcList 
9130: 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66  SrcList;.typedef
9140: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f   struct sqlite3_
9150: 73 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f 2a  str StrAccum; /*
9160: 20 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73 20   Internal alias 
9170: 66 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72 20  for sqlite3_str 
9180: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
9190: 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74  t Table Table;.t
91a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
91b0: 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63  bleLock TableLoc
91c0: 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  k;.typedef struc
91d0: 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74  t Token Token;.t
91e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
91f0: 65 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b  eeView TreeView;
9200: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9210: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
9220: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9230: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
9240: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
9250: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
9260: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
9270: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
9280: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
9290: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
92a0: 65 64 65 66 20 73 74 72 75 63 74 20 55 70 73 65  edef struct Upse
92b0: 72 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65 64  rt Upsert;.typed
92c0: 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65  ef struct VTable
92d0: 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66   VTable;.typedef
92e0: 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20   struct VtabCtx 
92f0: 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66  VtabCtx;.typedef
9300: 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57   struct Walker W
9310: 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73  alker;.typedef s
9320: 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20  truct WhereInfo 
9330: 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64  WhereInfo;.typed
9340: 65 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77  ef struct Window
9350: 20 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65 66   Window;.typedef
9360: 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74   struct With Wit
9370: 68 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62  h;.../*.** The b
9380: 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20  itmask datatype 
9390: 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73  defined below is
93a0: 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75   used for variou
93b0: 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
93c0: 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20  .**.** Changing 
93d0: 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62  this from a 64-b
93e0: 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74  it to a 32-bit t
93f0: 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e  ype limits the n
9400: 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c  umber of.** tabl
9410: 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20  es in a join to 
9420: 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34  32 instead of 64
9430: 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72  .  But it also r
9440: 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a  educes the size.
9450: 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  ** of the librar
9460: 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f  y by 738 bytes o
9470: 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65  n ix86..*/.#ifde
9480: 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b  f SQLITE_BITMASK
9490: 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20  _TYPE.  typedef 
94a0: 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54  SQLITE_BITMASK_T
94b0: 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c  YPE Bitmask;.#el
94c0: 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34  se.  typedef u64
94d0: 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66   Bitmask;.#endif
94e0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
94f0: 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20  er of bits in a 
9500: 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20  Bitmask.  "BMS" 
9510: 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53  means "BitMask S
9520: 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ize"..*/.#define
9530: 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a   BMS  ((int)(siz
9540: 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29  eof(Bitmask)*8))
9550: 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e  ../*.** A bit in
9560: 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64   a Bitmask.*/.#d
9570: 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29  efine MASKBIT(n)
9580: 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29     (((Bitmask)1)
9590: 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d  <<(n)).#define M
95a0: 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75  ASKBIT32(n) (((u
95b0: 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c  nsigned int)1)<<
95c0: 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c  (n)).#define ALL
95d0: 42 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d  BITS      ((Bitm
95e0: 61 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56 4c  ask)-1)../* A VL
95f0: 69 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f 72  ist object recor
9600: 64 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65 74  ds a mapping bet
9610: 77 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73 2f  ween parameters/
9620: 76 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63 61  variables/wildca
9630: 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53 51  rds.** in the SQ
9640: 4c 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75 63  L statement (suc
9650: 68 20 61 73 20 24 61 62 63 2c 20 40 70 71 72 2c  h as $abc, @pqr,
9660: 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74 68   or :xyz) and th
9670: 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 72  e integer.** var
9680: 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73 73  iable number ass
9690: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61  ociated with tha
96a0: 74 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53 65  t parameter.  Se
96b0: 65 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65 73  e the format des
96c0: 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74  cription.** on t
96d0: 68 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74 41  he sqlite3VListA
96e0: 64 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72  dd() routine for
96f0: 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f   more informatio
9700: 6e 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20 72  n.  A VList is r
9710: 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61 6e  eally.** just an
9720: 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65   array of intege
9730: 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 69  rs..*/.typedef i
9740: 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a  nt VList;../*.**
9750: 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20   Defer sourcing 
9760: 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65  vdbe.h and btree
9770: 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74  .h until after t
9780: 68 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22  he "u8" and.** "
9790: 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70  BusyHandler" typ
97a0: 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c  edefs. vdbe.h al
97b0: 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65  so requires a fe
97c0: 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a  w of the opaque.
97d0: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73  ** pointer types
97e0: 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20   (i.e. FuncDef) 
97f0: 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a  defined above..*
9800: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65  /.#include "btre
9810: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76  e.h".#include "v
9820: 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  dbe.h".#include 
9830: 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75  "pager.h".#inclu
9840: 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69  de "pcache.h".#i
9850: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
9860: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
9870: 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  ../* The SQLITE_
9880: 45 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f  EXTRA_DURABLE co
9890: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
98a0: 6e 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68  n used to set th
98b0: 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e  e default.** syn
98c0: 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67  chronous setting
98d0: 20 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69   to EXTRA.  It i
98e0: 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70  s no longer supp
98f0: 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  orted..*/.#ifdef
9900: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9910: 52 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20  RABLE.# warning 
9920: 55 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  Use SQLITE_DEFAU
9930: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33  LT_SYNCHRONOUS=3
9940: 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49   instead of SQLI
9950: 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45  TE_EXTRA_DURABLE
9960: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
9970: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
9980: 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f  NOUS 3.#endif../
9990: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e  *.** Default syn
99a0: 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e  chronous levels.
99b0: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
99c0: 20 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20   (for historcal 
99d0: 72 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47  reasons) the PAG
99e0: 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a  ER_SYNCHRONOUS_*
99f0: 20 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a   macros differ.*
9a00: 2a 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54  * from the SQLIT
9a10: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
9a20: 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31  ONOUS value by 1
9a30: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  ..**.**         
9a40: 20 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e    PAGER_SYNCHRON
9a50: 4f 55 53 20 20 20 20 20 20 20 44 45 46 41 55 4c  OUS       DEFAUL
9a60: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a  T_SYNCHRONOUS.**
9a70: 20 20 20 4f 46 46 20 20 20 20 20 20 20 20 20 20     OFF          
9a80: 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
9a90: 20 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20             0.** 
9aa0: 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20    NORMAL        
9ab0: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2               
9ac0: 20 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20            1.**  
9ad0: 20 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33   FULL          3
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9af0: 20 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20           2.**   
9b00: 45 58 54 52 41 20 20 20 20 20 20 20 20 20 34 20  EXTRA         4 
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b20: 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20          3.**.** 
9b30: 54 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63  The "PRAGMA sync
9b40: 68 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65  hronous" stateme
9b50: 6e 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65  nt also uses the
9b60: 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62   zero-based numb
9b70: 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ers..** In other
9b80: 20 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f   words, the zero
9b90: 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61  -based numbers a
9ba0: 72 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20  re used for all 
9bb0: 65 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61  external interfa
9bc0: 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f  ces.** and the o
9bd0: 6e 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20  ne-based values 
9be0: 61 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61  are used interna
9bf0: 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  lly..*/.#ifndef 
9c00: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9c10: 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66  YNCHRONOUS.# def
9c20: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
9c30: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 32  LT_SYNCHRONOUS 2
9c40: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
9c50: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
9c60: 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23  AL_SYNCHRONOUS.#
9c70: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
9c80: 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48  EFAULT_WAL_SYNCH
9c90: 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45  RONOUS SQLITE_DE
9ca0: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
9cb0: 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  S.#endif../*.** 
9cc0: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69  Each database fi
9cd0: 6c 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65  le to be accesse
9ce0: 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20  d by the system 
9cf0: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
9d00: 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * of the followi
9d10: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  ng structure.  T
9d20: 68 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  here are normall
9d30: 79 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73  y two of these s
9d40: 74 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20  tructures.** in 
9d50: 74 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d  the sqlite.aDb[]
9d60: 20 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20   array.  aDb[0] 
9d70: 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
9d80: 62 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a  base file and.**
9d90: 20 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64   aDb[1] is the d
9da0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
9db0: 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72  d to hold tempor
9dc0: 61 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64  ary tables.  Add
9dd0: 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62  itional.** datab
9de0: 61 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61  ases may be atta
9df0: 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ched..*/.struct 
9e00: 44 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62  Db {.  char *zDb
9e10: 53 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  SName;      /* N
9e20: 61 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61  ame of this data
9e30: 62 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e 61  base. (schema na
9e40: 6d 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65  me, not filename
9e50: 29 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  ) */.  Btree *pB
9e60: 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  t;          /* T
9e70: 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74  he B*Tree struct
9e80: 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74  ure for this dat
9e90: 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20  abase file */.  
9ea0: 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b  u8 safety_level;
9eb0: 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72       /* How aggr
9ec0: 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e  essive at syncin
9ed0: 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a  g data to disk *
9ee0: 2f 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b  /.  u8 bSyncSet;
9ef0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
9f00: 20 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63   if "PRAGMA sync
9f10: 68 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62  hronous=N" has b
9f20: 65 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68  een run */.  Sch
9f30: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
9f40: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
9f50: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
9f60: 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64  (possibly shared
9f70: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ) */.};../*.** A
9f80: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
9f90: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
9fa0: 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64  cture stores a d
9fb0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
9fc0: 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d  **.** Most Schem
9fd0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73  a objects are as
9fe0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
9ff0: 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65  Btree.  The exce
a000: 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20  ption is.** the 
a010: 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54  Schema for the T
a020: 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71  EMP databaes (sq
a030: 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68  lite3.aDb[1]) wh
a040: 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e  ich is free-stan
a050: 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72  ding..** In shar
a060: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61  ed cache mode, a
a070: 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f   single Schema o
a080: 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61  bject can be sha
a090: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a  red by multiple.
a0a0: 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72  ** Btrees that r
a0b0: 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65  efer to the same
a0c0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68   underlying BtSh
a0d0: 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a  ared object..**.
a0e0: 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  ** Schema object
a0f0: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
a100: 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20  lly deallocated 
a110: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74  when the last Bt
a120: 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65  ree that.** refe
a130: 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64  rences them is d
a140: 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20  estroyed.   The 
a150: 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d  TEMP Schema is m
a160: 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79  anually freed by
a170: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  .** sqlite3_clos
a180: 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65  e()..*.** A thre
a190: 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69  ad must be holdi
a1a0: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
a1b0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
a1c0: 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a  Btree in order.*
a1d0: 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65  * to access Sche
a1e0: 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69  ma content.  Thi
a1f0: 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74  s implies that t
a200: 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61  he thread must a
a210: 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e  lso be.** holdin
a220: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
a230: 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74   sqlite3 connect
a240: 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ion pointer that
a250: 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e   owns the Btree.
a260: 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53  .** For a TEMP S
a270: 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20  chema, only the 
a280: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  connection mutex
a290: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   is required..*/
a2a0: 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b  .struct Schema {
a2b0: 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f  .  int schema_co
a2c0: 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62  okie;   /* Datab
a2d0: 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  ase schema versi
a2e0: 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  on number for th
a2f0: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74  is file */.  int
a300: 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20   iGeneration;   
a310: 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20    /* Generation 
a320: 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d  counter.  Increm
a330: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
a340: 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68  change */.  Hash
a350: 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20   tblHash;       
a360: 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69   /* All tables i
a370: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
a380: 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68  /.  Hash idxHash
a390: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
a3a0: 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20  (named) indices 
a3b0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
a3c0: 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61  */.  Hash trigHa
a3d0: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
a3e0: 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65   triggers indexe
a3f0: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
a400: 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20  ash fkeyHash;   
a410: 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69      /* All forei
a420: 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72  gn keys by refer
a430: 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65  enced table name
a440: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65   */.  Table *pSe
a450: 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68  qTab;      /* Th
a460: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
a470: 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20  e table used by 
a480: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
a490: 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61  .  u8 file_forma
a4a0: 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  t;      /* Schem
a4b0: 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  a format version
a4c0: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
a4d0: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
a4e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
a4f0: 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62   encoding used b
a500: 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  y this database 
a510: 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46  */.  u16 schemaF
a520: 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61  lags;     /* Fla
a530: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
a540: 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  th this schema *
a550: 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69  /.  int cache_si
a560: 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ze;      /* Numb
a570: 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75  er of pages to u
a580: 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20  se in the cache 
a590: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
a5a0: 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
a5b0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
a5c0: 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
a5d0: 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70  s in the.** Db.p
a5e0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
a5f0: 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
a600: 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c  DbHasProperty(D,
a610: 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e  I,P)     (((D)->
a620: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a630: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
a640: 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44  ==(P)).#define D
a650: 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28  bHasAnyProperty(
a660: 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61  D,I,P)  (((D)->a
a670: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a680: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21  chemaFlags&(P))!
a690: 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65  =0).#define DbSe
a6a0: 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  tProperty(D,I,P)
a6b0: 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d       (D)->aDb[I]
a6c0: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
a6d0: 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  Flags|=(P).#defi
a6e0: 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72  ne DbClearProper
a6f0: 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d  ty(D,I,P)   (D)-
a700: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
a710: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28  >schemaFlags&=~(
a720: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
a730: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
a740: 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   DB.pSchema->fla
a750: 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
a760: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
a770: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
a780: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
a790: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
a7a0: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
a7b0: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
a7c0: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
a7d0: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
a7e0: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
a7f0: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
a800: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
a810: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
a820: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
a830: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
a840: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
a850: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
a860: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
a870: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
a880: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
a890: 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61  define DB_Schema
a8a0: 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31  Loaded    0x0001
a8b0: 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20    /* The schema 
a8c0: 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  has been loaded 
a8d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e  */.#define DB_Un
a8e0: 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78  resetViews    0x
a8f0: 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69  0002  /* Some vi
a900: 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64  ews have defined
a910: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   column names */
a920: 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74  .#define DB_Empt
a930: 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  y           0x00
a940: 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20  04  /* The file 
a950: 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68  is empty (length
a960: 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 23 64 65   0 bytes) */.#de
a970: 66 69 6e 65 20 44 42 5f 52 65 73 65 74 57 61 6e  fine DB_ResetWan
a980: 74 65 64 20 20 20 20 20 30 78 30 30 30 38 20 20  ted     0x0008  
a990: 2f 2a 20 52 65 73 65 74 20 74 68 65 20 73 63 68  /* Reset the sch
a9a0: 65 6d 61 20 77 68 65 6e 20 6e 53 63 68 65 6d 61  ema when nSchema
a9b0: 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a  Lock==0 */../*.*
a9c0: 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
a9d0: 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20  different kinds 
a9e0: 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63  of things that c
a9f0: 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a  an be limited.**
aa00: 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74   using the sqlit
aa10: 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72  e3_limit() inter
aa20: 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  face..*/.#define
aa30: 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20   SQLITE_N_LIMIT 
aa40: 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f  (SQLITE_LIMIT_WO
aa50: 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a  RKER_THREADS+1).
aa60: 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  ./*.** Lookaside
aa70: 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74   malloc is a set
aa80: 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62   of fixed-size b
aa90: 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20  uffers that can 
aaa0: 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  be used.** to sa
aab0: 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e  tisfy small tran
aac0: 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c  sient memory all
aad0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73  ocation requests
aae0: 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20   for objects.** 
aaf0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
ab00: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
ab10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ab20: 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a  .  The use of.**
ab30: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
ab40: 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67  c provides a sig
ab50: 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d  nificant perform
ab60: 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74  ance enhancement
ab70: 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29  .** (approx 10%)
ab80: 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d   by avoiding num
ab90: 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65  erous malloc/fre
aba0: 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65  e requests while
abb0: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20   parsing.** SQL 
abc0: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
abd0: 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20  * The Lookaside 
abe0: 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
abf0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e  configuration in
ac00: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
ac10: 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  the.** lookaside
ac20: 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65   malloc subsyste
ac30: 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62  m.  Each availab
ac40: 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
ac50: 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c  tion in.** the l
ac60: 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74  ookaside subsyst
ac70: 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20  em is stored on 
ac80: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
ac90: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a   LookasideSlot.*
aca0: 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a  * objects..**.**
acb0: 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   Lookaside alloc
acc0: 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20  ations are only 
acd0: 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65  allowed for obje
ace0: 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73  cts that are ass
acf0: 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20  ociated.** with 
ad00: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
ad10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ad20: 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61  .  Hence, schema
ad30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e   information can
ad40: 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64  not.** be stored
ad50: 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65   in lookaside be
ad60: 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20  cause in shared 
ad70: 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73  cache mode the s
ad80: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
ad90: 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62  n.** is shared b
ada0: 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  y multiple datab
adb0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e  ase connections.
adc0: 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69    Therefore, whi
add0: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63  le parsing.** sc
ade0: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
adf0: 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e  , the Lookaside.
ae00: 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73  bEnabled flag is
ae10: 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74   cleared so that
ae20: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** lookaside al
ae30: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f  locations are no
ae40: 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72  t used to constr
ae50: 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f  uct the schema o
ae60: 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63  bjects..*/.struc
ae70: 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20  t Lookaside {.  
ae80: 75 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20  u32 bDisable;   
ae90: 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20          /* Only 
aea0: 6f 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b  operate the look
aeb0: 61 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20  aside when zero 
aec0: 2a 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20  */.  u16 sz;    
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aee0: 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66  Size of each buf
aef0: 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  fer in bytes */.
af00: 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20    u8 bMalloced; 
af10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
af20: 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61  e if pStart obta
af30: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
af40: 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20  3_malloc() */.  
af50: 75 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20 20 20  u32 nSlot;      
af60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
af70: 72 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65 20 73  r of lookaside s
af80: 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  lots allocated *
af90: 2f 0a 20 20 75 33 32 20 61 6e 53 74 61 74 5b 33  /.  u32 anStat[3
afa0: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30  ];          /* 0
afb0: 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65  : hits.  1: size
afc0: 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c   misses.  2: ful
afd0: 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f  l misses */.  Lo
afe0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 49 6e  okasideSlot *pIn
aff0: 69 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  it;   /* List of
b000: 20 62 75 66 66 65 72 73 20 6e 6f 74 20 70 72 65   buffers not pre
b010: 76 69 6f 75 73 6c 79 20 75 73 65 64 20 2a 2f 0a  viously used */.
b020: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
b030: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
b040: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
b050: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
b060: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
b070: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
b080: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
b090: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
b0a0: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
b0b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
b0c0: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
b0d0: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
b0e0: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
b0f0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
b100: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
b110: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
b120: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
b130: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
b140: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
b150: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
b160: 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  for built-in fun
b170: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
b180: 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e  s.  (Application
b190: 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63  -defined.** func
b1a0: 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75  tions use a regu
b1b0: 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20  lar table table 
b1c0: 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a  from hash.h.).**
b1d0: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
b1e0: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
b1f0: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
b200: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
b210: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
b220: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
b230: 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20  FuncDef.u.pHash 
b240: 63 68 61 69 6e 2e 20 20 55 73 65 20 74 68 65 20  chain.  Use the 
b250: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
b260: 28 29 0a 2a 2a 20 6d 61 63 72 6f 20 74 6f 20 63  ().** macro to c
b270: 6f 6d 70 75 74 65 20 61 20 68 61 73 68 20 6f 6e  ompute a hash on
b280: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 6e 61   the function na
b290: 6d 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  me..*/.#define S
b2a0: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
b2b0: 53 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e  SZ 23.struct Fun
b2c0: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
b2d0: 63 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46  cDef *a[SQLITE_F
b2e0: 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20  UNC_HASH_SZ];   
b2f0: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
b300: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  e for functions 
b310: 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51  */.};.#define SQ
b320: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28 43  LITE_FUNC_HASH(C
b330: 2c 4c 29 20 28 28 28 43 29 2b 28 4c 29 29 25 53  ,L) (((C)+(L))%S
b340: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
b350: 53 5a 29 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  SZ)..#ifdef SQLI
b360: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
b370: 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66  CATION./*.** Inf
b380: 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e  ormation held in
b390: 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64   the "sqlite3" d
b3a0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
b3b0: 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73  on object and us
b3c0: 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20  ed.** to manage 
b3d0: 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  user authenticat
b3e0: 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ion..*/.typedef 
b3f0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
b400: 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f  serauth sqlite3_
b410: 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74  userauth;.struct
b420: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
b430: 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76  h {.  u8 authLev
b440: 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  el;             
b450: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61      /* Current a
b460: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65  uthentication le
b470: 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75  vel */.  int nAu
b480: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
b490: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
b4a0: 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e  f the zAuthPW in
b4b0: 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72   bytes */.  char
b4c0: 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20   *zAuthPW;      
b4d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73            /* Pas
b4e0: 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75  sword used to au
b4f0: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20  thenticate */.  
b500: 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b  char *zAuthUser;
b510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b520: 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20   User name used 
b530: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
b540: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
b550: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c  d values for sql
b560: 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75  ite3_userauth.au
b570: 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69  thLevel */.#defi
b580: 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e  ne UAUTH_Unknown
b590: 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75       0     /* Au
b5a0: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74  thentication not
b5b0: 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a   yet checked */.
b5c0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61  #define UAUTH_Fa
b5d0: 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20  il        1     
b5e0: 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69  /* User authenti
b5f0: 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f  cation failed */
b600: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
b610: 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20  ser        2    
b620: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
b630: 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73  d as a normal us
b640: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  er */.#define UA
b650: 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20  UTH_Admin       
b660: 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  3     /* Authent
b670: 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d  icated as an adm
b680: 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f  inistrator */../
b690: 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64  * Functions used
b6a0: 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75   only by user au
b6b0: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69  thorization logi
b6c0: 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  c */.int sqlite3
b6d0: 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f  UserAuthTable(co
b6e0: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
b6f0: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43  sqlite3UserAuthC
b700: 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65  heckLogin(sqlite
b710: 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  3*,const char*,u
b720: 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
b730: 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71  3UserAuthInit(sq
b740: 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
b750: 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73  lite3CryptFunc(s
b760: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
b770: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
b780: 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a  e**);..#endif /*
b790: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b7a0: 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a  HENTICATION */..
b7b0: 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f  /*.** typedef fo
b7c0: 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74  r the authorizat
b7d0: 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ion callback fun
b7e0: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66  ction..*/.#ifdef
b7f0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b800: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79  HENTICATION.  ty
b810: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
b820: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
b830: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
b840: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
b850: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
b860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b870: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
b880: 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
b890: 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  *);.#else.  type
b8a0: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
b8b0: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
b8c0: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
b8d0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b8e0: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b900: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
b910: 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
b920: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
b930: 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 20 54  _DEPRECATED./* T
b940: 68 69 73 20 69 73 20 61 6e 20 65 78 74 72 61 20  his is an extra 
b950: 53 51 4c 49 54 45 5f 54 52 41 43 45 20 6d 61 63  SQLITE_TRACE mac
b960: 72 6f 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ro that indicate
b970: 73 20 22 6c 65 67 61 63 79 22 20 74 72 61 63 69  s "legacy" traci
b980: 6e 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74 79  ng.** in the sty
b990: 6c 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 74 72  le of sqlite3_tr
b9a0: 61 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  ace().*/.#define
b9b0: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45   SQLITE_TRACE_LE
b9c0: 47 41 43 59 20 20 20 20 20 20 20 20 20 20 30 78  GACY          0x
b9d0: 34 30 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68  40     /* Use th
b9e0: 65 20 6c 65 67 61 63 79 20 78 54 72 61 63 65 20  e legacy xTrace 
b9f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ba00: 45 5f 54 52 41 43 45 5f 58 50 52 4f 46 49 4c 45  E_TRACE_XPROFILE
ba10: 20 20 20 20 20 20 20 20 30 78 38 30 20 20 20 20          0x80    
ba20: 20 2f 2a 20 55 73 65 20 74 68 65 20 6c 65 67 61   /* Use the lega
ba30: 63 79 20 78 50 72 6f 66 69 6c 65 20 2a 2f 0a 23  cy xProfile */.#
ba40: 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51 4c  else.#define SQL
ba50: 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59  ITE_TRACE_LEGACY
ba60: 20 20 20 20 20 20 20 20 20 20 30 0a 23 64 65 66            0.#def
ba70: 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ine SQLITE_TRACE
ba80: 5f 58 50 52 4f 46 49 4c 45 20 20 20 20 20 20 20  _XPROFILE       
ba90: 20 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   0.#endif /* SQL
baa0: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
bab0: 54 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  TED */.#define S
bac0: 51 4c 49 54 45 5f 54 52 41 43 45 5f 4e 4f 4e 4c  QLITE_TRACE_NONL
bad0: 45 47 41 43 59 5f 4d 41 53 4b 20 20 30 78 30 66  EGACY_MASK  0x0f
bae0: 20 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 20 66       /* Normal f
baf0: 6c 61 67 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  lags */.../*.** 
bb00: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  Each database co
bb10: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69  nnection is an i
bb20: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
bb30: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
bb40: 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71  re..*/.struct sq
bb50: 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65  lite3 {.  sqlite
bb60: 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20  3_vfs *pVfs;    
bb70: 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e          /* OS In
bb80: 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72  terface */.  str
bb90: 75 63 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b  uct Vdbe *pVdbe;
bba0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69             /* Li
bbb0: 73 74 20 6f 66 20 61 63 74 69 76 65 20 76 69 72  st of active vir
bbc0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f  tual machines */
bbd0: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c  .  CollSeq *pDfl
bbe0: 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  tColl;          
bbf0: 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20   /* The default 
bc00: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
bc10: 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20  ce (BINARY) */. 
bc20: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
bc30: 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f  mutex;         /
bc40: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74  * Connection mut
bc50: 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b  ex */.  Db *aDb;
bc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc70: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63        /* All bac
bc80: 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  kends */.  int n
bc90: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
bca0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
bcb0: 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63  er of backends c
bcc0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20  urrently in use 
bcd0: 2a 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c 61 67  */.  u32 mDbFlag
bce0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
bcf0: 20 20 20 2f 2a 20 66 6c 61 67 73 20 72 65 63 6f     /* flags reco
bd00: 72 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c 20 73  rding internal s
bd10: 74 61 74 65 20 2a 2f 0a 20 20 75 36 34 20 66 6c  tate */.  u64 fl
bd20: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
bd30: 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67 73          /* flags
bd40: 20 73 65 74 74 61 62 6c 65 20 62 79 20 70 72 61   settable by pra
bd50: 67 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f 77 20  gmas. See below 
bd60: 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77  */.  i64 lastRow
bd70: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  id;             
bd80: 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d     /* ROWID of m
bd90: 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72  ost recent inser
bda0: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
bdb0: 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20  .  i64 szMmap;  
bdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdd0: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70   /* Default mmap
bde0: 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f  _size setting */
bdf0: 0a 20 20 75 33 32 20 6e 53 63 68 65 6d 61 4c 6f  .  u32 nSchemaLo
be00: 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ck;             
be10: 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73 65 74   /* Do not reset
be20: 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e   the schema when
be30: 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 75   non-zero */.  u
be40: 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e  nsigned int open
be50: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
be60: 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
be70: 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65  sqlite3_vfs.xOpe
be80: 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  n() */.  int err
be90: 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
bea0: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
beb0: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
bec0: 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20   (SQLITE_*) */. 
bed0: 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20   int errMask;   
bee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bef0: 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73  * & result codes
bf00: 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72   with this befor
bf10: 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20  e returning */. 
bf20: 20 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b 20   int iSysErrno; 
bf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bf40: 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66 72  * Errno value fr
bf50: 6f 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20 65  om last system e
bf60: 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64 62  rror */.  u16 db
bf70: 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20  OptFlags;       
bf80: 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73          /* Flags
bf90: 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62   to enable/disab
bfa0: 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  le optimizations
bfb0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
bfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfd0: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
bfe0: 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74  ding */.  u8 aut
bff0: 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20  oCommit;        
c000: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
c010: 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e  uto-commit flag.
c020: 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74   */.  u8 temp_st
c030: 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ore;            
c040: 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32      /* 1: file 2
c050: 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61  : memory 0: defa
c060: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c  ult */.  u8 mall
c070: 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20  ocFailed;       
c080: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
c090: 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61  f we have seen a
c0a0: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20   malloc failure 
c0b0: 2a 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d  */.  u8 bBenignM
c0c0: 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20  alloc;          
c0d0: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71     /* Do not req
c0e0: 75 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75  uire OOMs if tru
c0f0: 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f  e */.  u8 dfltLo
c100: 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ckMode;         
c110: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
c120: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72  locking-mode for
c130: 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f   attached dbs */
c140: 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e  .  signed char n
c150: 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20  extAutovac;     
c160: 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74   /* Autovac sett
c170: 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d  ing after VACUUM
c180: 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20   if >=0 */.  u8 
c190: 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20  suppressErr;    
c1a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
c1b0: 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72   not issue error
c1c0: 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75   messages if tru
c1d0: 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e  e */.  u8 vtabOn
c1e0: 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20  Conflict;       
c1f0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
c200: 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76   return for s3_v
c210: 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28  tab_on_conflict(
c220: 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e  ) */.  u8 isTran
c230: 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
c240: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
c250: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
c260: 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20  vepoint is a TS 
c270: 2a 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b 20  */.  u8 mTrace; 
c280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c290: 20 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f     /* zero or mo
c2a0: 72 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20  re SQLITE_TRACE 
c2b0: 66 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 6e 6f  flags */.  u8 no
c2c0: 53 68 61 72 65 64 43 61 63 68 65 3b 20 20 20 20  SharedCache;    
c2d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
c2e0: 20 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63 61   if no shared-ca
c2f0: 63 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  che backends */.
c300: 20 20 75 38 20 6e 53 71 6c 45 78 65 63 3b 20 20    u8 nSqlExec;  
c310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c320: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 65 6e  /* Number of pen
c330: 64 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63 20  ding OP_SqlExec 
c340: 6f 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e 74  opcodes */.  int
c350: 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20   nextPagesize;  
c360: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
c370: 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43  gesize after VAC
c380: 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75  UUM if >0 */.  u
c390: 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20  32 magic;       
c3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c3b0: 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72  Magic number for
c3c0: 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20   detect library 
c3d0: 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  misuse */.  int 
c3e0: 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  nChange;        
c3f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
c400: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
c410: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
c420: 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c   */.  int nTotal
c430: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
c440: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
c450: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
c460: 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29  _total_changes()
c470: 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74   */.  int aLimit
c480: 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d  [SQLITE_N_LIMIT]
c490: 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f  ;   /* Limits */
c4a0: 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65  .  int nMaxSorte
c4b0: 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  rMmap;          
c4c0: 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65   /* Maximum size
c4d0: 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70   of regions mapp
c4e0: 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a  ed by sorter */.
c4f0: 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33    struct sqlite3
c500: 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20  InitInfo {      
c510: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
c520: 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69  sed during initi
c530: 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  alization */.   
c540: 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20   int newTnum;   
c550: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c560: 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c  Rootpage of tabl
c570: 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
c580: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44  zed */.    u8 iD
c590: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
c5a0: 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
c5b0: 64 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67  db file is being
c5c0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
c5d0: 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20      u8 busy;    
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5f0: 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65  /* TRUE if curre
c600: 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e  ntly initializin
c610: 67 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  g */.    unsigne
c620: 64 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 20  d orphanTrigger 
c630: 3a 20 31 3b 20 2f 2a 20 4c 61 73 74 20 73 74 61  : 1; /* Last sta
c640: 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e  tement is orphan
c650: 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20  ed TEMP trigger 
c660: 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
c670: 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 20 3a 20  imposterTable : 
c680: 31 3b 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61  1; /* Building a
c690: 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65  n imposter table
c6a0: 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
c6b0: 20 72 65 6f 70 65 6e 4d 65 6d 64 62 20 3a 20 31   reopenMemdb : 1
c6c0: 3b 20 20 20 2f 2a 20 41 54 54 41 43 48 20 69 73  ;   /* ATTACH is
c6d0: 20 72 65 61 6c 6c 79 20 61 20 72 65 6f 70 65 6e   really a reopen
c6e0: 20 75 73 69 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a   using MemDB */.
c6f0: 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20    } init;.  int 
c700: 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20  nVdbeActive;    
c710: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c720: 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72  ber of VDBEs cur
c730: 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a  rently running *
c740: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61  /.  int nVdbeRea
c750: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
c760: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
c770: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
c780: 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a   read or write *
c790: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69  /.  int nVdbeWri
c7a0: 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
c7b0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
c7c0: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
c7d0: 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
c7e0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78  */.  int nVdbeEx
c7f0: 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
c800: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c810: 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
c820: 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20  VdbeExec() */.  
c830: 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20  int nVDestroy;  
c840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c850: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c860: 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70  e OP_VDestroy op
c870: 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  erations */.  in
c880: 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20  t nExtension;   
c890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c8a0: 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20  umber of loaded 
c8b0: 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20  extensions */.  
c8c0: 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f  void **aExtensio
c8d0: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
c8e0: 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64   Array of shared
c8f0: 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73   library handles
c900: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 54 72 61   */.  int (*xTra
c910: 63 65 29 28 75 33 32 2c 76 6f 69 64 2a 2c 76 6f  ce)(u32,void*,vo
c920: 69 64 2a 2c 76 6f 69 64 2a 29 3b 20 20 20 20 20  id*,void*);     
c930: 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f  /* Trace functio
c940: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72  n */.  void *pTr
c950: 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  aceArg;         
c960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c970: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
c980: 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69  the trace functi
c990: 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  on */.#ifndef SQ
c9a0: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43  LITE_OMIT_DEPREC
c9b0: 41 54 45 44 0a 20 20 76 6f 69 64 20 28 2a 78 50  ATED.  void (*xP
c9c0: 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f  rofile)(void*,co
c9d0: 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20  nst char*,u64); 
c9e0: 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75   /* Profiling fu
c9f0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
ca00: 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20   *pProfileArg;  
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca20: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
ca30: 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e  t to profile fun
ca40: 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ction */.#endif.
ca50: 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41    void *pCommitA
ca60: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
ca70: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
ca80: 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  to xCommitCallba
ca90: 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ck() */.  int (*
caa0: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29  xCommitCallback)
cab0: 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49  (void*);    /* I
cac0: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
cad0: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
cae0: 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b  d *pRollbackArg;
caf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cb00: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52  * Argument to xR
cb10: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28  ollbackCallback(
cb20: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52  ) */.  void (*xR
cb30: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29  ollbackCallback)
cb40: 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f  (void*); /* Invo
cb50: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
cb60: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
cb70: 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f  pUpdateArg;.  vo
cb80: 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c  id (*xUpdateCall
cb90: 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  back)(void*,int,
cba0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
cbb0: 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f  st char*,sqlite_
cbc0: 69 6e 74 36 34 29 3b 0a 23 69 66 64 65 66 20 53  int64);.#ifdef S
cbd0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
cbe0: 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f  UPDATE_HOOK.  vo
cbf0: 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41 72  id *pPreUpdateAr
cc00: 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  g;          /* F
cc10: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
cc20: 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62   xPreUpdateCallb
cc30: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ack */.  void (*
cc40: 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
cc50: 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73 74  ck)(   /* Regist
cc60: 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74  ered using sqlit
cc70: 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f 6f  e3_preupdate_hoo
cc80: 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a  k() */.    void*
cc90: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68  ,sqlite3*,int,ch
cca0: 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63  ar const*,char c
ccb0: 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e  onst*,sqlite3_in
ccc0: 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36  t64,sqlite3_int6
ccd0: 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64 61  4.  );.  PreUpda
cce0: 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b 20  te *pPreUpdate; 
ccf0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78         /* Contex
cd00: 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72 65  t for active pre
cd10: 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63 6b  -update callback
cd20: 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51   */.#endif /* SQ
cd30: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
cd40: 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69  PDATE_HOOK */.#i
cd50: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
cd60: 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57  T_WAL.  int (*xW
cd70: 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  alCallback)(void
cd80: 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63   *, sqlite3 *, c
cd90: 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
cda0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41  );.  void *pWalA
cdb0: 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69  rg;.#endif.  voi
cdc0: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28  d(*xCollNeeded)(
cdd0: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
cde0: 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73  nt eTextRep,cons
cdf0: 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
ce00: 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29  (*xCollNeeded16)
ce10: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
ce20: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
ce30: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
ce40: 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72  d *pCollNeededAr
ce50: 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  g;.  sqlite3_val
ce60: 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20  ue *pErr;       
ce70: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
ce80: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
ce90: 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
cea0: 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73   volatile int is
ceb0: 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20  Interrupted; /* 
cec0: 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f  True if sqlite3_
ced0: 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62 65  interrupt has be
cee0: 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20  en called */.   
cef0: 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31   double notUsed1
cf00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
cf10: 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31  Spacer */.  } u1
cf20: 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f  ;.  Lookaside lo
cf30: 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
cf40: 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d    /* Lookaside m
cf50: 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74  alloc configurat
cf60: 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ion */.#ifndef S
cf70: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
cf80: 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  RIZATION.  sqlit
cf90: 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b 20  e3_xauth xAuth; 
cfa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65           /* Acce
cfb0: 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  ss authorization
cfc0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
cfd0: 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20  oid *pAuthArg;  
cfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cff0: 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  1st argument to 
d000: 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20  the access auth 
d010: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  function */.#end
d020: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
d030: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
d040: 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28  CALLBACK.  int (
d050: 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64  *xProgress)(void
d060: 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20   *);     /* The 
d070: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
d080: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  k */.  void *pPr
d090: 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20  ogressArg;      
d0a0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
d0b0: 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73   to the progress
d0c0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75   callback */.  u
d0d0: 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73  nsigned nProgres
d0e0: 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20  sOps;        /* 
d0f0: 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65  Number of opcode
d100: 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63  s for progress c
d110: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69  allback */.#endi
d120: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
d130: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
d140: 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73  LE.  int nVTrans
d150: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d160: 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
d170: 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20  size of aVTrans 
d180: 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c  */.  Hash aModul
d190: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
d1a0: 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20     /* populated 
d1b0: 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  by sqlite3_creat
d1c0: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
d1d0: 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74  VtabCtx *pVtabCt
d1e0: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x;            /*
d1f0: 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74   Context for act
d200: 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74  ive vtab connect
d210: 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61  /create */.  VTa
d220: 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20  ble **aVTrans;  
d230: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69             /* Vi
d240: 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74  rtual tables wit
d250: 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  h open transacti
d260: 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ons */.  VTable 
d270: 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20  *pDisconnect;   
d280: 20 20 20 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e         /* Discon
d290: 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65  nect these in ne
d2a0: 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  xt sqlite3_prepa
d2b0: 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  re() */.#endif. 
d2c0: 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20   Hash aFunc;    
d2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d2e0: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20  * Hash table of 
d2f0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74  connection funct
d300: 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  ions */.  Hash a
d310: 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20  CollSeq;        
d320: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63          /* All c
d330: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
d340: 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64  es */.  BusyHand
d350: 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b  ler busyHandler;
d360: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61        /* Busy ca
d370: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61  llback */.  Db a
d380: 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20  DbStatic[2];    
d390: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61            /* Sta
d3a0: 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74 68  tic space for th
d3b0: 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b  e 2 default back
d3c0: 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ends */.  Savepo
d3d0: 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
d3e0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
d3f0: 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70 6f  of active savepo
d400: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75  ints */.  int bu
d410: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
d420: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
d430: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
d440: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e   in msec */.  in
d450: 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t nSavepoint;   
d460: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d470: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
d480: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
d490: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  nts */.  int nSt
d4a0: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
d4b0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
d4c0: 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65   of nested state
d4d0: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
d4e0: 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  s  */.  i64 nDef
d4f0: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
d500: 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66        /* Net def
d510: 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
d520: 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  s this transacti
d530: 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  on. */.  i64 nDe
d540: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
d550: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
d560: 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65  ferred immediate
d570: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
d580: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
d590: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
d5a0: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
d5b0: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
d5c0: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69  n DbFree() */.#i
d5d0: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
d5e0: 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
d5f0: 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
d600: 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61 72  ing variables ar
d610: 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20  e all protected 
d620: 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41  by the STATIC_MA
d630: 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c  STER.  ** mutex,
d640: 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e   not by sqlite3.
d650: 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20  mutex. They are 
d660: 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20  used by code in 
d670: 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20  notify.c..  **. 
d680: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f   ** When X.pUnlo
d690: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ckConnection==Y,
d6a0: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
d6b0: 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f   X is waiting fo
d6c0: 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f  r Y to.  ** unlo
d6d0: 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ck so that it ca
d6e0: 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a  n proceed..  **.
d6f0: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f    ** When X.pBlo
d700: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d  ckingConnection=
d710: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
d720: 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  hat something th
d730: 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20  at X tried.  ** 
d740: 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65  tried to do rece
d750: 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68  ntly failed with
d760: 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   an SQLITE_LOCKE
d770: 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c  D error due to l
d780: 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62  ocks.  ** held b
d790: 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  y Y..  */.  sqli
d7a0: 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f  te3 *pBlockingCo
d7b0: 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e  nnection; /* Con
d7c0: 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75  nection that cau
d7d0: 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  sed SQLITE_LOCKE
d7e0: 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  D */.  sqlite3 *
d7f0: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
d800: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
d810: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61  Connection to wa
d820: 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a  tch for unlock *
d830: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63  /.  void *pUnloc
d840: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
d850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
d860: 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b  ument to xUnlock
d870: 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64  Notify */.  void
d880: 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79   (*xUnlockNotify
d890: 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b  )(void **, int);
d8a0: 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69    /* Unlock noti
d8b0: 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  fy callback */. 
d8c0: 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42   sqlite3 *pNextB
d8d0: 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f  locked;        /
d8e0: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f  * Next in list o
d8f0: 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f  f all blocked co
d900: 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  nnections */.#en
d910: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
d920: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
d930: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
d940: 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20 20  userauth auth;  
d950: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75        /* User au
d960: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66  thentication inf
d970: 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  ormation */.#end
d980: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
d990: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
d9a0: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
d9b0: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
d9c0: 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45  #define SCHEMA_E
d9d0: 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44  NC(db) ((db)->aD
d9e0: 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e  b[0].pSchema->en
d9f0: 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64  c).#define ENC(d
da00: 62 29 20 20 20 20 20 20 20 20 28 28 64 62 29 2d  b)        ((db)-
da10: 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  >enc)../*.** Pos
da20: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
da30: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61   the sqlite3.fla
da40: 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  gs..**.** Value 
da50: 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66  constraints (enf
da60: 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74  orced via assert
da70: 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51 4c  ()):.**      SQL
da80: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20  ITE_FullFSync   
da90: 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c 46    == PAGER_FULLF
daa0: 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c  SYNC.**      SQL
dab0: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
dac0: 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54 5f  c == PAGER_CKPT_
dad0: 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20  FULLFSYNC.**    
dae0: 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70    SQLITE_CacheSp
daf0: 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45 52 5f  ill    == PAGER_
db00: 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23  CACHE_SPILL.*/.#
db10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72  define SQLITE_Wr
db20: 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30  iteSchema    0x0
db30: 30 30 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74  0000001  /* OK t
db40: 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f  o update SQLITE_
db50: 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e  MASTER */.#defin
db60: 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46  e SQLITE_LegacyF
db70: 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 30 30  ileFmt  0x000000
db80: 30 32 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65  02  /* Create ne
db90: 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66  w databases in f
dba0: 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69  ormat 1 */.#defi
dbb0: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f  ne SQLITE_FullCo
dbc0: 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30  lNames   0x00000
dbd0: 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c  004  /* Show ful
dbe0: 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f  l column names o
dbf0: 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66  n SELECT */.#def
dc00: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46  ine SQLITE_FullF
dc10: 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30 30  Sync      0x0000
dc20: 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c  0008  /* Use ful
dc30: 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62  l fsync on the b
dc40: 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e  ackend */.#defin
dc50: 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c  e SQLITE_CkptFul
dc60: 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30 30  lFSync  0x000000
dc70: 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  10  /* Use full 
dc80: 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70  fsync for checkp
dc90: 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oint */.#define 
dca0: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
dcb0: 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 32 30  l     0x00000020
dcc0: 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c    /* OK to spill
dcd0: 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a   pager cache */.
dce0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
dcf0: 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78  hortColNames  0x
dd00: 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f  00000040  /* Sho
dd10: 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20  w short columns 
dd20: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
dd30: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
dd40: 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38  s      0x0000008
dd50: 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73  0  /* Count rows
dd60: 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45   changed by INSE
dd70: 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  RT, */.         
dd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dda0: 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72   /*   DELETE, or
ddb0: 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75   UPDATE and retu
ddc0: 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  rn */.          
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddf0: 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75  /*   the count u
de00: 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e  sing a callback.
de10: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
de20: 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20  TE_NullCallback 
de30: 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a    0x00000100  /*
de40: 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c   Invoke the call
de50: 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65  back once if the
de60: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
de90: 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73     result set is
dea0: 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
deb0: 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43  e SQLITE_IgnoreC
dec0: 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 30 32  hecks   0x000002
ded0: 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e  00  /* Do not en
dee0: 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73  force check cons
def0: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
df00: 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e  ne SQLITE_ReadUn
df10: 63 6f 6d 6d 69 74 20 20 20 30 78 30 30 30 30 30  commit   0x00000
df20: 34 30 30 20 20 2f 2a 20 52 45 41 44 20 55 4e 43  400  /* READ UNC
df30: 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73 68 61 72  OMMITTED in shar
df40: 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  ed-cache */.#def
df50: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b 70  ine SQLITE_NoCkp
df60: 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30 30 30 30  tOnClose  0x0000
df70: 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65 63  0800  /* No chec
df80: 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65 28  kpoint on close(
df90: 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23 64 65 66  )/DETACH */.#def
dfa0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72  ine SQLITE_Rever
dfb0: 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 30  seOrder   0x0000
dfc0: 31 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65  1000  /* Reverse
dfd0: 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43   unordered SELEC
dfe0: 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  Ts */.#define SQ
dff0: 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73  LITE_RecTriggers
e000: 20 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20      0x00002000  
e010: 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73  /* Enable recurs
e020: 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ive triggers */.
e030: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
e040: 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78  oreignKeys    0x
e050: 30 30 30 30 34 30 30 30 20 20 2f 2a 20 45 6e 66  00004000  /* Enf
e060: 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  orce foreign key
e070: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f   constraints  */
e080: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e090: 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30  AutoIndex      0
e0a0: 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 45 6e  x00008000  /* En
e0b0: 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69  able automatic i
e0c0: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
e0d0: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
e0e0: 65 6e 73 69 6f 6e 20 20 30 78 30 30 30 31 30 30  ension  0x000100
e0f0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
e100: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a  ad_extension */.
e110: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
e120: 6f 61 64 45 78 74 46 75 6e 63 20 20 20 20 30 78  oadExtFunc    0x
e130: 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45 6e 61  00020000  /* Ena
e140: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
e150: 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63 20 2a 2f  on() SQL func */
e160: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e170: 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30  EnableTrigger  0
e180: 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 54 72  x00040000  /* Tr
e190: 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69  ue to enable tri
e1a0: 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ggers */.#define
e1b0: 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
e1c0: 20 20 20 20 20 20 20 30 78 30 30 30 38 30 30 30         0x0008000
e1d0: 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20  0  /* Defer all 
e1e0: 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  FK constraints *
e1f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e200: 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20  _QueryOnly      
e210: 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 44  0x00100000  /* D
e220: 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65 20  isable database 
e230: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
e240: 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69  ne SQLITE_CellSi
e250: 7a 65 43 6b 20 20 20 20 20 30 78 30 30 32 30 30  zeCk     0x00200
e260: 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20 62 74  000  /* Check bt
e270: 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f  ree cell sizes o
e280: 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e  n load */.#defin
e290: 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b  e SQLITE_Fts3Tok
e2a0: 65 6e 69 7a 65 72 20 20 30 78 30 30 34 30 30 30  enizer  0x004000
e2b0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74  00  /* Enable ft
e2c0: 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20  s3_tokenizer(2) 
e2d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e2e0: 45 5f 45 6e 61 62 6c 65 51 50 53 47 20 20 20 20  E_EnableQPSG    
e2f0: 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20   0x00800000  /* 
e300: 51 75 65 72 79 20 50 6c 61 6e 6e 65 72 20 53 74  Query Planner St
e310: 61 62 69 6c 69 74 79 20 47 75 61 72 61 6e 74 65  ability Guarante
e320: 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  e*/.#define SQLI
e330: 54 45 5f 54 72 69 67 67 65 72 45 51 50 20 20 20  TE_TriggerEQP   
e340: 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a    0x01000000  /*
e350: 20 53 68 6f 77 20 74 72 69 67 67 65 72 20 45 58   Show trigger EX
e360: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
e370: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e380: 54 45 5f 52 65 73 65 74 44 61 74 61 62 61 73 65  TE_ResetDatabase
e390: 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f 2a    0x02000000  /*
e3a0: 20 52 65 73 65 74 20 74 68 65 20 64 61 74 61 62   Reset the datab
e3b0: 61 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ase */.#define S
e3c0: 51 4c 49 54 45 5f 4c 65 67 61 63 79 41 6c 74 65  QLITE_LegacyAlte
e3d0: 72 20 20 20 20 30 78 30 34 30 30 30 30 30 30 20  r    0x04000000 
e3e0: 20 2f 2a 20 4c 65 67 61 63 79 20 41 4c 54 45 52   /* Legacy ALTER
e3f0: 20 54 41 42 4c 45 20 62 65 68 61 76 69 6f 75 72   TABLE behaviour
e400: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e410: 54 45 5f 4e 6f 53 63 68 65 6d 61 45 72 72 6f 72  TE_NoSchemaError
e420: 20 20 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a    0x08000000  /*
e430: 20 44 6f 20 6e 6f 74 20 72 65 70 6f 72 74 20 73   Do not report s
e440: 63 68 65 6d 61 20 70 61 72 73 65 20 65 72 72 6f  chema parse erro
e450: 72 73 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  rs*/.#define SQL
e460: 49 54 45 5f 44 65 66 65 6e 73 69 76 65 20 20 20  ITE_Defensive   
e470: 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20 2f     0x10000000  /
e480: 2a 20 49 6e 70 75 74 20 53 51 4c 20 69 73 20 6c  * Input SQL is l
e490: 69 6b 65 6c 79 20 68 6f 73 74 69 6c 65 20 2a 2f  ikely hostile */
e4a0: 0a 0a 2f 2a 20 46 6c 61 67 73 20 75 73 65 64 20  ../* Flags used 
e4b0: 6f 6e 6c 79 20 69 66 20 64 65 62 75 67 67 69 6e  only if debuggin
e4c0: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 49 28  g */.#define HI(
e4d0: 58 29 20 20 28 28 75 36 34 29 28 58 29 3c 3c 33  X)  ((u64)(X)<<3
e4e0: 32 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  2).#ifdef SQLITE
e4f0: 5f 44 45 42 55 47 0a 23 64 65 66 69 6e 65 20 53  _DEBUG.#define S
e500: 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20  QLITE_SqlTrace  
e510: 20 20 20 20 20 48 49 28 30 78 30 30 30 31 29 20       HI(0x0001) 
e520: 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20   /* Debug print 
e530: 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74  SQL as it execut
e540: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
e550: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
e560: 20 20 20 20 48 49 28 30 78 30 30 30 32 29 20 20      HI(0x0002)  
e570: 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67  /* Debug listing
e580: 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 73 20  s of VDBE progs 
e590: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e5a0: 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20  E_VdbeTrace     
e5b0: 20 48 49 28 30 78 30 30 30 34 29 20 20 2f 2a 20   HI(0x0004)  /* 
e5c0: 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44  True to trace VD
e5d0: 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  BE execution */.
e5e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
e5f0: 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 48 49  dbeAddopTrace HI
e600: 28 30 78 30 30 30 38 29 20 20 2f 2a 20 54 72 61  (0x0008)  /* Tra
e610: 63 65 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  ce sqlite3VdbeAd
e620: 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23  dOp() calls */.#
e630: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
e640: 62 65 45 51 50 20 20 20 20 20 20 20 20 48 49 28  beEQP        HI(
e650: 30 78 30 30 31 30 29 20 20 2f 2a 20 44 65 62 75  0x0010)  /* Debu
e660: 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  g EXPLAIN QUERY 
e670: 50 4c 41 4e 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  PLAN */.#endif..
e680: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
e690: 6c 75 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33  lues for sqlite3
e6a0: 2e 6d 44 62 46 6c 61 67 73 0a 2a 2f 0a 23 64 65  .mDbFlags.*/.#de
e6b0: 66 69 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65  fine DBFLAG_Sche
e6c0: 6d 61 43 68 61 6e 67 65 20 20 20 30 78 30 30 30  maChange   0x000
e6d0: 31 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65  1  /* Uncommitte
e6e0: 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61  d Hash table cha
e6f0: 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
e700: 44 42 46 4c 41 47 5f 50 72 65 66 65 72 42 75 69  DBFLAG_PreferBui
e710: 6c 74 69 6e 20 20 30 78 30 30 30 32 20 20 2f 2a  ltin  0x0002  /*
e720: 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62   Preference to b
e730: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f  uilt-in funcs */
e740: 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f  .#define DBFLAG_
e750: 56 61 63 75 75 6d 20 20 20 20 20 20 20 20 20 30  Vacuum         0
e760: 78 30 30 30 34 20 20 2f 2a 20 43 75 72 72 65 6e  x0004  /* Curren
e770: 74 6c 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20  tly in a VACUUM 
e780: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41  */.#define DBFLA
e790: 47 5f 53 63 68 65 6d 61 4b 6e 6f 77 6e 4f 6b 20  G_SchemaKnownOk 
e7a0: 20 30 78 30 30 30 38 20 20 2f 2a 20 53 63 68 65   0x0008  /* Sche
e7b0: 6d 61 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 62  ma is known to b
e7c0: 65 20 76 61 6c 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a  e valid */../*.*
e7d0: 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71  * Bits of the sq
e7e0: 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73  lite3.dbOptFlags
e7f0: 20 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20   field that are 
e800: 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73  used by the.** s
e810: 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
e820: 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43  rol(SQLITE_TESTC
e830: 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  TRL_OPTIMIZATION
e840: 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  S,...) interface
e850: 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65   to.** selective
e860: 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f  ly disable vario
e870: 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
e880: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
e890: 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e  ITE_QueryFlatten
e8a0: 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51  er 0x0001   /* Q
e8b0: 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20  uery flattening 
e8c0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
e8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e8e0: 20 30 78 30 30 30 32 20 20 20 61 76 61 69 6c 61   0x0002   availa
e8f0: 62 6c 65 20 66 6f 72 20 72 65 75 73 65 20 2a 2f  ble for reuse */
e900: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e910: 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30  GroupByOrder   0
e920: 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50  x0004   /* GROUP
e930: 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45  BY cover of ORDE
e940: 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  RBY */.#define S
e950: 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43  QLITE_FactorOutC
e960: 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a  onst 0x0008   /*
e970: 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72   Constant factor
e980: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ing */.#define S
e990: 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70  QLITE_DistinctOp
e9a0: 74 20 20 20 20 30 78 30 30 31 30 20 20 20 2f 2a  t    0x0010   /*
e9b0: 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20   DISTINCT using 
e9c0: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
e9d0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49  ne SQLITE_CoverI
e9e0: 64 78 53 63 61 6e 20 20 20 30 78 30 30 32 30 20  dxScan   0x0020 
e9f0: 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e    /* Covering in
ea00: 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65  dex scans */.#de
ea10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65  fine SQLITE_Orde
ea20: 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 34  rByIdxJoin 0x004
ea30: 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  0   /* ORDER BY 
ea40: 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64  of joins via ind
ea50: 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ex */.#define SQ
ea60: 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20  LITE_Transitive 
ea70: 20 20 20 20 30 78 30 30 38 30 20 20 20 2f 2a 20      0x0080   /* 
ea80: 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74  Transitive const
ea90: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
eaa0: 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f  e SQLITE_OmitNoo
eab0: 70 4a 6f 69 6e 20 20 20 30 78 30 31 30 30 20 20  pJoin   0x0100  
eac0: 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20   /* Omit unused 
ead0: 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20  tables in joins 
eae0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
eaf0: 45 5f 43 6f 75 6e 74 4f 66 56 69 65 77 20 20 20  E_CountOfView   
eb00: 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 68 65   0x0200   /* The
eb10: 20 63 6f 75 6e 74 2d 6f 66 2d 76 69 65 77 20 6f   count-of-view o
eb20: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  ptimization */.#
eb30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75  define SQLITE_Cu
eb40: 72 73 6f 72 48 69 6e 74 73 20 20 20 20 30 78 30  rsorHints    0x0
eb50: 34 30 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f  400   /* Add OP_
eb60: 43 75 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64  CursorHint opcod
eb70: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
eb80: 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20 20 20  LITE_Stat34     
eb90: 20 20 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20      0x0800   /* 
eba0: 55 73 65 20 53 54 41 54 33 20 6f 72 20 53 54 41  Use STAT3 or STA
ebb0: 54 34 20 64 61 74 61 20 2a 2f 0a 20 20 20 2f 2a  T4 data */.   /*
ebc0: 20 54 48 33 20 65 78 70 65 63 74 73 20 74 68 65   TH3 expects the
ebd0: 20 53 74 61 74 33 34 20 20 5e 5e 5e 5e 5e 5e 20   Stat34  ^^^^^^ 
ebe0: 76 61 6c 75 65 20 74 6f 20 62 65 20 30 78 30 38  value to be 0x08
ebf0: 30 30 2e 20 20 44 6f 6e 27 74 20 63 68 61 6e 67  00.  Don't chang
ec00: 65 20 69 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  e it */.#define 
ec10: 53 51 4c 49 54 45 5f 50 75 73 68 44 6f 77 6e 20  SQLITE_PushDown 
ec20: 20 20 20 20 20 20 30 78 31 30 30 30 20 20 20 2f        0x1000   /
ec30: 2a 20 54 68 65 20 70 75 73 68 2d 64 6f 77 6e 20  * The push-down 
ec40: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a  optimization */.
ec50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ec60: 69 6d 70 6c 69 66 79 4a 6f 69 6e 20 20 20 30 78  implifyJoin   0x
ec70: 32 30 30 30 20 20 20 2f 2a 20 43 6f 6e 76 65 72  2000   /* Conver
ec80: 74 20 4c 45 46 54 20 4a 4f 49 4e 20 74 6f 20 4a  t LEFT JOIN to J
ec90: 4f 49 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  OIN */.#define S
eca0: 51 4c 49 54 45 5f 53 6b 69 70 53 63 61 6e 20 20  QLITE_SkipScan  
ecb0: 20 20 20 20 20 30 78 34 30 30 30 20 20 20 2f 2a       0x4000   /*
ecc0: 20 53 6b 69 70 2d 73 63 61 6e 73 20 2a 2f 0a 23   Skip-scans */.#
ecd0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72  define SQLITE_Pr
ece0: 6f 70 61 67 61 74 65 43 6f 6e 73 74 20 30 78 38  opagateConst 0x8
ecf0: 30 30 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 6e  000   /* The con
ed00: 73 74 61 6e 74 20 70 72 6f 70 61 67 61 74 69 6f  stant propagatio
ed10: 6e 20 6f 70 74 20 2a 2f 0a 23 64 65 66 69 6e 65  n opt */.#define
ed20: 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20   SQLITE_AllOpts 
ed30: 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20 20         0xffff   
ed40: 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74  /* All optimizat
ed50: 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ions */../*.** M
ed60: 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e  acros for testin
ed70: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
ed80: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61   optimizations a
ed90: 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69  re enabled or di
eda0: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66 69  sabled..*/.#defi
edb0: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44  ne OptimizationD
edc0: 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  isabled(db, mask
edd0: 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74  )  (((db)->dbOpt
ede0: 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30  Flags&(mask))!=0
edf0: 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  ).#define Optimi
ee00: 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62  zationEnabled(db
ee10: 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29  , mask)   (((db)
ee20: 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61  ->dbOptFlags&(ma
ee30: 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  sk))==0)../*.** 
ee40: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
ee50: 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63  t OK to factor c
ee60: 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
ee70: 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69  ons into the ini
ee80: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63  tialization.** c
ee90: 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e  ode. The argumen
eea0: 74 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a  t is a Parse obj
eeb0: 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65  ect for the code
eec0: 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23   generator..*/.#
eed0: 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74  define ConstFact
eee0: 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b  orOk(P) ((P)->ok
eef0: 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a  ConstFactor)../*
ef00: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
ef10: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
ef20: 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a  te.magic field..
ef30: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61  ** The numbers a
ef40: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72  re obtained at r
ef50: 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e  andom and have n
ef60: 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  o special meanin
ef70: 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  g, other.** than
ef80: 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20   being distinct 
ef90: 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72  from one another
efa0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
efb0: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20  ITE_MAGIC_OPEN  
efc0: 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f     0xa029a697  /
efd0: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70  * Database is op
efe0: 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  en */.#define SQ
eff0: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
f000: 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20  D   0x9f3c2d33  
f010: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63  /* Database is c
f020: 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  losed */.#define
f030: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49   SQLITE_MAGIC_SI
f040: 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39  CK     0x4b77129
f050: 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20  0  /* Error and 
f060: 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a  awaiting close *
f070: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f080: 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20  _MAGIC_BUSY     
f090: 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44  0xf03b7906  /* D
f0a0: 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c  atabase currentl
f0b0: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66  y in use */.#def
f0c0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
f0d0: 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35  _ERROR    0xb535
f0e0: 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49  7930  /* An SQLI
f0f0: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
f100: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66  occurred */.#def
f110: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
f120: 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66  _ZOMBIE   0x64cf
f130: 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77  fc7f  /* Close w
f140: 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65  ith last stateme
f150: 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a  nt close */../*.
f160: 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63  ** Each SQL func
f170: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
f180: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
f190: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
f1a0: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 46  ** structure.  F
f1b0: 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d  or global built-
f1c0: 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78  in functions (ex
f1d0: 3a 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28  : substr(), max(
f1e0: 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61  ), count()).** a
f1f0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
f200: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65   structure is he
f210: 6c 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ld in the sqlite
f220: 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  3BuiltinFunction
f230: 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72  s object..** For
f240: 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20   per-connection 
f250: 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69  application-defi
f260: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61  ned functions, a
f270: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
f280: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69 73  .** structure is
f290: 20 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d   held in the db-
f2a0: 3e 61 48 61 73 68 20 68 61 73 68 20 74 61 62 6c  >aHash hash tabl
f2b0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70  e..**.** The u.p
f2c0: 48 61 73 68 20 66 69 65 6c 64 20 69 73 20 75 73  Hash field is us
f2d0: 65 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c  ed by the global
f2e0: 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65   built-ins.  The
f2f0: 20 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a   u.pDestructor.*
f300: 2a 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  * field is used 
f310: 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  by per-connectio
f320: 6e 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69  n app-def functi
f330: 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  ons..*/.struct F
f340: 75 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41  uncDef {.  i8 nA
f350: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
f360: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
f370: 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e  uments.  -1 mean
f380: 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20  s unlimited */. 
f390: 20 75 33 32 20 66 75 6e 63 46 6c 61 67 73 3b 20   u32 funcFlags; 
f3a0: 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f        /* Some co
f3b0: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c  mbination of SQL
f3c0: 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20  ITE_FUNC_* */.  
f3d0: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
f3e0: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74       /* User dat
f3f0: 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20  a parameter */. 
f400: 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b   FuncDef *pNext;
f410: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75        /* Next fu
f420: 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65  nction with same
f430: 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20   name */.  void 
f440: 28 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65  (*xSFunc)(sqlite
f450: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
f460: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
f470: 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d   /* func or agg-
f480: 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28  step */.  void (
f490: 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69  *xFinalize)(sqli
f4a0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20  te3_context*);  
f4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4c0: 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72  /* Agg finalizer
f4d0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 61   */.  void (*xVa
f4e0: 6c 75 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  lue)(sqlite3_con
f4f0: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
f500: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
f510: 75 72 72 65 6e 74 20 61 67 67 20 76 61 6c 75 65  urrent agg value
f520: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 49 6e   */.  void (*xIn
f530: 76 65 72 73 65 29 28 73 71 6c 69 74 65 33 5f 63  verse)(sqlite3_c
f540: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
f550: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
f560: 20 69 6e 76 65 72 73 65 20 61 67 67 2d 73 74 65   inverse agg-ste
f570: 70 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  p */.  const cha
f580: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53  r *zName;   /* S
f590: 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  QL name of the f
f5a0: 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e  unction. */.  un
f5b0: 69 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65  ion {.    FuncDe
f5c0: 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f  f *pHash;      /
f5d0: 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69  * Next with a di
f5e0: 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74  fferent name but
f5f0: 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a   the same hash *
f600: 2f 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72 75  /.    FuncDestru
f610: 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f  ctor *pDestructo
f620: 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63  r;   /* Referenc
f630: 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75  e counted destru
f640: 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ctor function */
f650: 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a  .  } u;.};../*.*
f660: 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
f670: 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20   encapsulates a 
f680: 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65  user-function de
f690: 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63  structor callbac
f6a0: 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  k (as.** configu
f6b0: 72 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65  red using create
f6c0: 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20  _function_v2()) 
f6d0: 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20  and a reference 
f6e0: 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a  counter. When.**
f6f0: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
f700: 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20  _v2() is called 
f710: 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63  to create a func
f720: 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74  tion with a dest
f730: 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e  ructor,.** a sin
f740: 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68  gle object of th
f750: 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63  is type is alloc
f760: 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75  ated. FuncDestru
f770: 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74  ctor.nRef is set
f780: 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65   to.** the numbe
f790: 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a  r of FuncDef obj
f7a0: 65 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69  ects created (ei
f7b0: 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70  ther 1 or 3, dep
f7c0: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
f7d0: 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20  r.** or not the 
f7e0: 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69  specified encodi
f7f0: 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59  ng is SQLITE_ANY
f800: 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70  ). The FuncDef.p
f810: 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65  Destructor.** me
f820: 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20  mber of each of 
f830: 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20  the new FuncDef 
f840: 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74  objects is set t
f850: 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61  o point to the a
f860: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63  llocated.** Func
f870: 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a  Destructor..**.*
f880: 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68  * Thereafter, wh
f890: 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75  en one of the Fu
f8a0: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
f8b0: 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65   deleted, the re
f8c0: 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74  ference.** count
f8d0: 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20   on this object 
f8e0: 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20  is decremented. 
f8f0: 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20  When it reaches 
f900: 30 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f  0, the destructo
f910: 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20  r.** is invoked 
f920: 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74  and the FuncDest
f930: 72 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65  ructor structure
f940: 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63   freed..*/.struc
f950: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
f960: 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20   {.  int nRef;. 
f970: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
f980: 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69  )(void *);.  voi
f990: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b  d *pUserData;.};
f9a0: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
f9b0: 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63   values for Func
f9c0: 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65  Def.flags.  Note
f9d0: 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54   that the _LENGT
f9e0: 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a  H and _TYPEOF.**
f9f0: 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72   values must cor
fa00: 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41  respond to OPFLA
fa10: 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
fa20: 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
fa30: 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45  .  And.** SQLITE
fa40: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d  _FUNC_CONSTANT m
fa50: 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20  ust be the same 
fa60: 61 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d  as SQLITE_DETERM
fa70: 49 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a  INISTIC.  There.
fa80: 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20  ** are assert() 
fa90: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
faa0: 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79  e code to verify
fab0: 20 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c   this..**.** Val
fac0: 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
fad0: 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73  enforced via ass
fae0: 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53  ert()):.**     S
faf0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
fb00: 58 20 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d  X    ==  NC_MinM
fb10: 61 78 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46  axAgg      == SF
fb20: 5f 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20  _MinMaxAgg.**   
fb30: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45    SQLITE_FUNC_LE
fb40: 4e 47 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c  NGTH    ==  OPFL
fb50: 41 47 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20  AG_LENGTHARG.** 
fb60: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
fb70: 54 59 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50  TYPEOF    ==  OP
fb80: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a  FLAG_TYPEOFARG.*
fb90: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e  *     SQLITE_FUN
fba0: 43 5f 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20  C_CONSTANT  ==  
fbb0: 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49  SQLITE_DETERMINI
fbc0: 53 54 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50  STIC from the AP
fbd0: 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  I.**     SQLITE_
fbe0: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64  FUNC_ENCMASK   d
fbf0: 65 70 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45  epends on SQLITE
fc00: 5f 55 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20  _UTF* macros in 
fc10: 74 68 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69  the API.*/.#defi
fc20: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  ne SQLITE_FUNC_E
fc30: 4e 43 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f  NCMASK  0x0003 /
fc40: 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  * SQLITE_UTF8, S
fc50: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72  QLITE_UTF16BE or
fc60: 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66   UTF16LE */.#def
fc70: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
fc80: 4c 49 4b 45 20 20 20 20 20 30 78 30 30 30 34 20  LIKE     0x0004 
fc90: 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72  /* Candidate for
fca0: 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69   the LIKE optimi
fcb0: 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  zation */.#defin
fcc0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41  e SQLITE_FUNC_CA
fcd0: 53 45 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a  SE     0x0008 /*
fce0: 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20   Case-sensitive 
fcf0: 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69  LIKE-type functi
fd00: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
fd10: 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20  LITE_FUNC_EPHEM 
fd20: 20 20 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68     0x0010 /* Eph
fd30: 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20  emeral.  Delete 
fd40: 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65  with VDBE */.#de
fd50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
fd60: 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30  _NEEDCOLL 0x0020
fd70: 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75   /* sqlite3GetFu
fd80: 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68  ncCollSeq() migh
fd90: 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64  t be called*/.#d
fda0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fdb0: 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34  C_LENGTH   0x004
fdc0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65  0 /* Built-in le
fdd0: 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  ngth() function 
fde0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fdf0: 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20  E_FUNC_TYPEOF   
fe00: 30 78 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0080 /* Built-
fe10: 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  in typeof() func
fe20: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
fe30: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e  SQLITE_FUNC_COUN
fe40: 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42  T    0x0100 /* B
fe50: 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29  uilt-in count(*)
fe60: 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64   aggregate */.#d
fe70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fe80: 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30  C_COALESCE 0x020
fe90: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
fea0: 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75  alesce() or ifnu
feb0: 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ll() */.#define 
fec0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49  SQLITE_FUNC_UNLI
fed0: 4b 45 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42  KELY 0x0400 /* B
fee0: 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79  uilt-in unlikely
fef0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
ff00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ff10: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38  NC_CONSTANT 0x08
ff20: 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69  00 /* Constant i
ff30: 6e 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e  nputs give a con
ff40: 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a  stant output */.
ff50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
ff60: 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31  UNC_MINMAX   0x1
ff70: 30 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  000 /* True for 
ff80: 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20  min() and max() 
ff90: 61 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64  aggregates */.#d
ffa0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
ffb0: 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30  C_SLOCHNG  0x200
ffc0: 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67  0 /* "Slow Chang
ffd0: 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61  e". Value consta
ffe0: 6e 74 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20  nt during a.    
fff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10010 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20  ** single query 
10020 2d 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f  - might change o
10030 76 65 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65 66  ver time */.#def
10040 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
10050 41 46 46 49 4e 49 54 59 20 30 78 34 30 30 30 20  AFFINITY 0x4000 
10060 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66 66 69  /* Built-in affi
10070 6e 69 74 79 28 29 20 66 75 6e 63 74 69 6f 6e 20  nity() function 
10080 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
10090 45 5f 46 55 4e 43 5f 4f 46 46 53 45 54 20 20 20  E_FUNC_OFFSET   
100a0 30 78 38 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x8000 /* Built-
100b0 69 6e 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74  in sqlite_offset
100c0 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
100d0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
100e0 4e 43 5f 57 49 4e 44 4f 57 20 20 20 30 78 30 30  NC_WINDOW   0x00
100f0 30 31 30 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d  010000 /* Built-
10100 69 6e 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79 20 66  in window-only f
10110 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
10120 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 57  ne SQLITE_FUNC_W
10130 49 4e 44 4f 57 5f 53 49 5a 45 20 30 78 32 30 30  INDOW_SIZE 0x200
10140 30 30 20 2f 2a 20 52 65 71 75 69 72 65 73 20 70  00 /* Requires p
10150 61 72 74 69 74 69 6f 6e 20 73 69 7a 65 20 61 73  artition size as
10160 20 61 72 67 2e 20 2a 2f 0a 23 64 65 66 69 6e 65   arg. */.#define
10170 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 49 4e 54   SQLITE_FUNC_INT
10180 45 52 4e 41 4c 20 30 78 30 30 30 34 30 30 30 30  ERNAL 0x00040000
10190 20 2f 2a 20 46 6f 72 20 75 73 65 20 62 79 20 4e   /* For use by N
101a0 65 73 74 65 64 50 61 72 73 65 28 29 20 6f 6e 6c  estedParse() onl
101b0 79 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  y */../*.** The 
101c0 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20  following three 
101d0 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e  macros, FUNCTION
101e0 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61  (), LIKEFUNC() a
101f0 6e 64 20 41 47 47 52 45 47 41 54 45 28 29 20 61  nd AGGREGATE() a
10200 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72  re.** used to cr
10210 65 61 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c  eate the initial
10220 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46 75  izers for the Fu
10230 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 73  ncDef structures
10240 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49  ..**.**   FUNCTI
10250 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
10260 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
10270 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
10280 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
10290 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
102a0 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
102b0 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20  on zName.**     
102c0 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43  implemented by C
102d0 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20   function xFunc 
102e0 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
102f0 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65  g arguments. The
10300 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61  .**     value pa
10310 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73 20  ssed as iArg is 
10320 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a  cast to a (void*
10330 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c  ) and made avail
10340 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74  able.**     as t
10350 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73 71  he user-data (sq
10360 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
10370 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74  )) for the funct
10380 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61  ion. If.**     a
10390 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74  rgument bNC is t
103a0 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51  rue, then the SQ
103b0 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
103c0 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a  LL flag is set..
103d0 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f  **.**   VFUNCTIO
103e0 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
103f0 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10400 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e  .**     Like FUN
10410 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20  CTION except it 
10420 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45  omits the SQLITE
10430 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66  _FUNC_CONSTANT f
10440 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55  lag..**.**   DFU
10450 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
10460 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
10470 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
10480 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
10490 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
104a0 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
104b0 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20  ANT flag and.** 
104c0 20 20 20 20 61 64 64 73 20 74 68 65 20 53 51 4c      adds the SQL
104d0 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
104e0 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72   flag.  Used for
104f0 20 64 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e   date & time fun
10500 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e  ctions.**     an
10510 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65  d functions like
10520 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28   sqlite_version(
10530 29 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67  ) that can chang
10540 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e  e, but not durin
10550 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c  g.**     a singl
10560 65 20 71 75 65 72 79 2e 20 20 54 68 65 20 69 41  e query.  The iA
10570 72 67 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 20  rg is ignored.  
10580 54 68 65 20 75 73 65 72 2d 64 61 74 61 20 69 73  The user-data is
10590 20 61 6c 77 61 79 73 20 73 65 74 0a 2a 2a 20 20   always set.**  
105a0 20 20 20 74 6f 20 61 20 4e 55 4c 4c 20 70 6f 69     to a NULL poi
105b0 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70  nter.  The bNC p
105c0 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
105d0 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 55  used..**.**   PU
105e0 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  RE_DATE(zName, n
105f0 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10600 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
10610 65 64 20 66 6f 72 20 22 70 75 72 65 22 20 64 61  ed for "pure" da
10620 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  te/time function
10630 73 2c 20 74 68 69 73 20 6d 61 63 72 6f 20 69 73  s, this macro is
10640 20 6c 69 6b 65 20 44 46 55 4e 43 54 49 4f 4e 0a   like DFUNCTION.
10650 2a 2a 20 20 20 20 20 65 78 63 65 70 74 20 74 68  **     except th
10660 61 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 74  at it does set t
10670 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  he SQLITE_FUNC_C
10680 4f 4e 53 54 41 4e 54 20 66 6c 61 67 73 2e 20 20  ONSTANT flags.  
10690 69 41 72 67 20 69 73 0a 2a 2a 20 20 20 20 20 69  iArg is.**     i
106a0 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20 75  gnored and the u
106b0 73 65 72 2d 64 61 74 61 20 66 6f 72 20 74 68 65  ser-data for the
106c0 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 69 73 20  se functions is 
106d0 73 65 74 20 74 6f 20 61 6e 20 0a 2a 2a 20 20 20  set to an .**   
106e0 20 20 61 72 62 69 74 72 61 72 79 20 6e 6f 6e 2d    arbitrary non-
106f0 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54  NULL pointer.  T
10700 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72  he bNC parameter
10710 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
10720 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28  .**   AGGREGATE(
10730 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10740 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78  g, bNC, xStep, x
10750 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73  Final).**     Us
10760 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
10770 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
10780 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
10790 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
107a0 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
107b0 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
107c0 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
107d0 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
107e0 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
107f0 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
10800 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
10810 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
10820 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
10830 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 57  ION()..**.**   W
10840 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
10850 6e 41 72 67 2c 20 69 41 72 67 2c 20 78 53 74 65  nArg, iArg, xSte
10860 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75  p, xFinal, xValu
10870 65 2c 20 78 49 6e 76 65 72 73 65 29 0a 2a 2a 20  e, xInverse).** 
10880 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
10890 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  te an aggregate 
108a0 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
108b0 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  ion implemented 
108c0 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20  by.**     the C 
108d0 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20  functions xStep 
108e0 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20  and xFinal. The 
108f0 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d  first four param
10900 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65  eters.**     are
10910 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20   interpreted in 
10920 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20  the same way as 
10930 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61  the first 4 para
10940 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20  meters to.**    
10950 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a   FUNCTION()..**.
10960 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  **   LIKEFUNC(zN
10970 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
10980 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55   flags).**     U
10990 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
109a0 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
109b0 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
109c0 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a  function zName.*
109d0 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65 70  *     that accep
109e0 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74  ts nArg argument
109f0 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65  s and is impleme
10a00 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74  nted by a call t
10a10 6f 20 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74  o C.**     funct
10a20 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72  ion likeFunc. Ar
10a30 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63  gument pArg is c
10a40 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a  ast to a (void *
10a50 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20  ) and made.**   
10a60 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74    available as t
10a70 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72  he function user
10a80 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
10a90 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65  ser_data()). The
10aa0 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e  .**     FuncDef.
10ab0 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20 69  flags variable i
10ac0 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  s set to the val
10ad0 75 65 20 70 61 73 73 65 64 20 61 73 20 74 68 65  ue passed as the
10ae0 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61   flags.**     pa
10af0 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  rameter..*/.#def
10b00 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ine FUNCTION(zNa
10b10 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10b20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
10b30 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
10b40 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
10b50 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
10b60 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
10b70 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
10b80 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
10b90 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10ba0 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10bb0 20 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43   }.#define VFUNC
10bc0 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10bd0 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10be0 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
10bf0 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
10c00 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10c10 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
10c20 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
10c30 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
10c40 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
10c50 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46  {0} }.#define DF
10c60 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
10c70 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10c80 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
10c90 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  , SQLITE_FUNC_SL
10ca0 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46  OCHNG|SQLITE_UTF
10cb0 38 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46  8, \.   0, 0, xF
10cc0 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
10cd0 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
10ce0 69 6e 65 20 50 55 52 45 5f 44 41 54 45 28 7a 4e  ine PURE_DATE(zN
10cf0 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
10d00 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
10d10 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
10d20 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49  UNC_SLOCHNG|SQLI
10d30 54 45 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f 46  TE_UTF8|SQLITE_F
10d40 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a  UNC_CONSTANT, \.
10d50 20 20 20 28 76 6f 69 64 2a 29 26 73 71 6c 69 74     (void*)&sqlit
10d60 65 33 43 6f 6e 66 69 67 2c 20 30 2c 20 78 46 75  e3Config, 0, xFu
10d70 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
10d80 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
10d90 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61  ne FUNCTION2(zNa
10da0 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10db0 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72  bNC, xFunc, extr
10dc0 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72  aFlags) \.  {nAr
10dd0 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  g,SQLITE_FUNC_CO
10de0 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
10df0 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
10e00 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78  UNC_NEEDCOLL)|ex
10e10 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51  traFlags,\.   SQ
10e20 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
10e30 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
10e40 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65   0, 0, 0, #zName
10e50 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
10e60 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  STR_FUNCTION(zNa
10e70 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20  me, nArg, pArg, 
10e80 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
10e90 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
10ea0 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54  NC_SLOCHNG|SQLIT
10eb0 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
10ec0 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
10ed0 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c  ), \.   pArg, 0,
10ee0 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c   xFunc, 0, 0, 0,
10ef0 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69   #zName, }.#defi
10f00 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d  ne LIKEFUNC(zNam
10f10 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c  e, nArg, arg, fl
10f20 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
10f30 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
10f40 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
10f50 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f  |flags, \.   (vo
10f60 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b  id *)arg, 0, lik
10f70 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20  eFunc, 0, 0, 0, 
10f80 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
10f90 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 28  efine AGGREGATE(
10fa0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
10fb0 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  , nc, xStep, xFi
10fc0 6e 61 6c 2c 20 78 56 61 6c 75 65 29 20 5c 0a 20  nal, xValue) \. 
10fd0 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
10fe0 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
10ff0 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
11000 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
11010 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78  O_PTR(arg), 0, x
11020 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c  Step,xFinal,xVal
11030 75 65 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d  ue,0,#zName, {0}
11040 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
11050 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ATE2(zName, nArg
11060 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
11070 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46  , xFinal, extraF
11080 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
11090 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
110a0 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
110b0 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
110c0 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  s, \.   SQLITE_I
110d0 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
110e0 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
110f0 78 46 69 6e 61 6c 2c 30 2c 23 7a 4e 61 6d 65 2c  xFinal,0,#zName,
11100 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 57 41   {0}}.#define WA
11110 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
11120 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
11130 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56  Step, xFinal, xV
11140 61 6c 75 65 2c 20 78 49 6e 76 65 72 73 65 2c 20  alue, xInverse, 
11150 66 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  f) \.  {nArg, SQ
11160 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51  LITE_UTF8|(nc*SQ
11170 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
11180 4c 4c 29 7c 66 2c 20 5c 0a 20 20 20 53 51 4c 49  LL)|f, \.   SQLI
11190 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
111a0 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69  g), 0, xStep,xFi
111b0 6e 61 6c 2c 78 56 61 6c 75 65 2c 78 49 6e 76 65  nal,xValue,xInve
111c0 72 73 65 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d  rse,#zName, {0}}
111d0 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4e 41  .#define INTERNA
111e0 4c 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  L_FUNCTION(zName
111f0 2c 20 6e 41 72 67 2c 20 78 46 75 6e 63 29 20 5c  , nArg, xFunc) \
11200 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
11210 5f 46 55 4e 43 5f 49 4e 54 45 52 4e 41 4c 7c 53  _FUNC_INTERNAL|S
11220 51 4c 49 54 45 5f 55 54 46 38 7c 53 51 4c 49 54  QLITE_UTF8|SQLIT
11230 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c  E_FUNC_CONSTANT,
11240 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75 6e   \.   0, 0, xFun
11250 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  c, 0, 0, 0, #zNa
11260 6d 65 2c 20 7b 30 7d 20 7d 0a 0a 0a 2f 2a 0a 2a  me, {0} }.../*.*
11270 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61  * All current sa
11280 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f  vepoints are sto
11290 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20  red in a linked 
112a0 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
112b0 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76  .** sqlite3.pSav
112c0 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73  epoint. The firs
112d0 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65  t element in the
112e0 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73   list is the mos
112f0 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70  t recently.** op
11300 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  ened savepoint. 
11310 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61  Savepoints are a
11320 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74  dded to the list
11330 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20   by the vdbe.** 
11340 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
11350 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  truction..*/.str
11360 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a  uct Savepoint {.
11370 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
11380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11390 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69        /* Savepoi
113a0 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72  nt name (nul-ter
113b0 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36  minated) */.  i6
113c0 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113e0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
113f0 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61  eferred fk viola
11400 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e  tions */.  i64 n
11410 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
11420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11430 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  * Number of defe
11440 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a  rred imm fk. */.
11450 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65    Savepoint *pNe
11460 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  xt;             
11470 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20        /* Parent 
11480 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e  savepoint (if an
11490 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  y) */.};../*.** 
114a0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
114b0 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65  e used as the se
114c0 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74  cond parameter t
114d0 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  o sqlite3Savepoi
114e0 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20  nt(),.** and as 
114f0 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
11500 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f  to the OP_Savepo
11510 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  int instruction.
11520 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45  .*/.#define SAVE
11530 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20  POINT_BEGIN     
11540 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   0.#define SAVEP
11550 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20  OINT_RELEASE    
11560 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  1.#define SAVEPO
11570 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32  INT_ROLLBACK   2
11580 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
11590 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72  Lite module (vir
115a0 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e  tual table defin
115b0 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65  ition) is define
115c0 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  d by an.** insta
115d0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
115e0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20  wing structure, 
115f0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
11600 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a  lite3.aModule.**
11610 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a   hash table..*/.
11620 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a  struct Module {.
11630 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
11640 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
11650 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61         /* Callba
11660 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20  ck pointers */. 
11670 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
11680 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
11690 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61        /* Name pa
116a0 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
116b0 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
116c0 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20  d *pAux;        
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116e0 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64    /* pAux passed
116f0 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c   to create_modul
11700 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
11710 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
11720 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
11730 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74   Module destruct
11740 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  or function */. 
11750 20 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b   Table *pEpoTab;
11760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11770 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f        /* Eponymo
11780 75 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69  us table for thi
11790 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s module */.};..
117a0 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  /*.** informatio
117b0 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
117c0 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61  umn of an SQL ta
117d0 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61  ble is held in a
117e0 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
117f0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
11800 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d  .*/.struct Colum
11810 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  n {.  char *zNam
11820 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  e;     /* Name o
11830 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c  f this column, \
11840 30 30 30 2c 20 74 68 65 6e 20 74 68 65 20 74 79  000, then the ty
11850 70 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44  pe */.  Expr *pD
11860 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61  flt;     /* Defa
11870 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69  ult value of thi
11880 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
11890 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f  ar *zColl;     /
118a0 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
118b0 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20  ence.  If NULL, 
118c0 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  use the default 
118d0 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b  */.  u8 notNull;
118e0 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20        /* An OE_ 
118f0 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e  code for handlin
11900 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  g a NOT NULL con
11910 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61  straint */.  cha
11920 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  r affinity;   /*
11930 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   One of the SQLI
11940 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65  TE_AFF_... value
11950 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b  s */.  u8 szEst;
11960 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
11970 61 74 65 64 20 73 69 7a 65 20 6f 66 20 76 61 6c  ated size of val
11980 75 65 20 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d  ue in this colum
11990 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d  n. sizeof(INT)==
119a0 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61  1 */.  u8 colFla
119b0 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65  gs;     /* Boole
119c0 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20  an properties.  
119d0 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66  See COLFLAG_ def
119e0 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ines below */.};
119f0 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
11a00 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63  ues for Column.c
11a10 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66  olFlags:.*/.#def
11a20 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d  ine COLFLAG_PRIM
11a30 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f  KEY  0x0001    /
11a40 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74  * Column is part
11a50 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   of the primary 
11a60 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  key */.#define C
11a70 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20  OLFLAG_HIDDEN   
11a80 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68  0x0002    /* A h
11a90 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20  idden column in 
11aa0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
11ab0 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
11ac0 41 47 5f 48 41 53 54 59 50 45 20 20 30 78 30 30  AG_HASTYPE  0x00
11ad0 30 34 20 20 20 20 2f 2a 20 54 79 70 65 20 6e 61  04    /* Type na
11ae0 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d  me follows colum
11af0 6e 20 6e 61 6d 65 20 2a 2f 0a 23 64 65 66 69 6e  n name */.#defin
11b00 65 20 43 4f 4c 46 4c 41 47 5f 55 4e 49 51 55 45  e COLFLAG_UNIQUE
11b10 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
11b20 43 6f 6c 75 6d 6e 20 64 65 66 20 63 6f 6e 74 61  Column def conta
11b30 69 6e 73 20 22 55 4e 49 51 55 45 22 20 6f 72 20  ins "UNIQUE" or 
11b40 22 50 4b 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20  "PK" */.#define 
11b50 43 4f 4c 46 4c 41 47 5f 53 4f 52 54 45 52 52 45  COLFLAG_SORTERRE
11b60 46 20 30 78 30 30 31 30 20 20 20 2f 2a 20 55 73  F 0x0010   /* Us
11b70 65 20 73 6f 72 74 65 72 2d 72 65 66 73 20 77 69  e sorter-refs wi
11b80 74 68 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  th this column *
11b90 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c  /../*.** A "Coll
11ba0 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20  ating Sequence" 
11bb0 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
11bc0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
11bd0 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
11be0 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74  ructure. Concept
11bf0 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69  ually, a collati
11c00 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73  ng sequence cons
11c10 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61  ists of a name a
11c20 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73  nd.** a comparis
11c30 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20  on routine that 
11c40 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65  defines the orde
11c50 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e  r of that sequen
11c60 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c  ce..**.** If Col
11c70 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c  lSeq.xCmp is NUL
11c80 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  L, it means that
11c90 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e   the.** collatin
11ca0 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e  g sequence is un
11cb0 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65  defined.  Indice
11cc0 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e  s built on an un
11cd0 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61  defined.** colla
11ce0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61  ting sequence ma
11cf0 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72  y not be read or
11d00 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72   written..*/.str
11d10 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20  uct CollSeq {.  
11d20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
11d30 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
11d40 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73   the collating s
11d50 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65  equence, UTF-8 e
11d60 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65  ncoded */.  u8 e
11d70 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
11d80 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
11d90 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43  ng handled by xC
11da0 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mp() */.  void *
11db0 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20  pUser;          
11dc0 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
11dd0 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20  t to xCmp() */. 
11de0 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69   int (*xCmp)(voi
11df0 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  d*,int, const vo
11e00 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  id*, int, const 
11e10 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28  void*);.  void (
11e20 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20  *xDel)(void*);  
11e30 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f  /* Destructor fo
11e40 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  r pUser */.};../
11e50 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65  *.** A sort orde
11e60 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  r can be either 
11e70 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a  ASC or DESC..*/.
11e80 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
11e90 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f  O_ASC       0  /
11ea0 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
11eb0 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65  ing order */.#de
11ec0 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44  fine SQLITE_SO_D
11ed0 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53  ESC      1  /* S
11ee0 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
11ef0 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e   order */.#defin
11f00 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45  e SQLITE_SO_UNDE
11f10 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73  FINED -1 /* No s
11f20 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69 66  ort order specif
11f30 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f  ied */../*.** Co
11f40 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79  lumn affinity ty
11f50 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65  pes..**.** These
11f60 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e   used to have mn
11f70 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65  emonic name like
11f80 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f   'i' for SQLITE_
11f90 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a  AFF_INTEGER and.
11fa0 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54  ** 't' for SQLIT
11fb0 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74  E_AFF_TEXT.  But
11fc0 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c   we can save a l
11fd0 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20  ittle space and 
11fe0 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73  improve.** the s
11ff0 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79  peed a little by
12000 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76   numbering the v
12010 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76  alues consecutiv
12020 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72  ely..**.** But r
12030 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74  ather than start
12040 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65   with 0 or 1, we
12050 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27 2e   begin with 'A'.
12060 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77    That way,.** w
12070 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66  hen multiple aff
12080 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20  inity types are 
12090 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74  concatenated int
120a0 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a  o a string and.*
120b0 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34  * used as the P4
120c0 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77   operand, they w
120d0 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64  ill be more read
120e0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  able..**.** Note
120f0 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e   also that the n
12100 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65  umeric types are
12110 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65   grouped togethe
12120 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e  r so that testin
12130 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72  g.** for a numer
12140 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e  ic type is a sin
12150 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  gle comparison. 
12160 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74 79   And the BLOB ty
12170 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a  pe is first..*/.
12180 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
12190 46 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27 0a  FF_BLOB     'A'.
121a0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
121b0 46 46 5f 54 45 58 54 20 20 20 20 20 27 42 27 0a  FF_TEXT     'B'.
121c0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
121d0 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27 0a  FF_NUMERIC  'C'.
121e0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
121f0 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27 0a  FF_INTEGER  'D'.
12200 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
12210 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27 0a  FF_REAL     'E'.
12220 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
12230 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  IsNumericAffinit
12240 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49  y(X)  ((X)>=SQLI
12250 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a  TE_AFF_NUMERIC).
12260 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
12270 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65  E_AFF_MASK value
12280 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20  s masks off the 
12290 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73  significant bits
122a0 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69   of an.** affini
122b0 74 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65  ty value..*/.#de
122c0 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
122d0 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f  MASK     0x47../
122e0 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20  *.** Additional 
122f0 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20  bit values that 
12300 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68  can be ORed with
12310 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74   an affinity wit
12320 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67  hout.** changing
12330 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a   the affinity..*
12340 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
12350 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20  NOTNULL flag is 
12360 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  a combination of
12370 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50   NULLEQ and JUMP
12380 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61  IFNULL..** It ca
12390 75 73 65 73 20 61 6e 20 61 73 73 65 72 74 28 29  uses an assert()
123a0 20 74 6f 20 66 69 72 65 20 69 66 20 65 69 74 68   to fire if eith
123b0 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20  er operand to a 
123c0 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70  comparison.** op
123d0 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20  erator is NULL. 
123e0 20 49 74 20 69 73 20 61 64 64 65 64 20 74 6f 20   It is added to 
123f0 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73  certain comparis
12400 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a  on operators to.
12410 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74 68  ** prove that th
12420 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61  e operands are a
12430 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a  lways NOT NULL..
12440 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
12450 45 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20 20 30  E_KEEPNULL     0
12460 78 30 38 20 20 2f 2a 20 55 73 65 64 20 62 79 20  x08  /* Used by 
12470 76 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20  vector == or <> 
12480 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
12490 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30  E_JUMPIFNULL   0
124a0 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66  x10  /* jumps if
124b0 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
124c0 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  is NULL */.#defi
124d0 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50  ne SQLITE_STOREP
124e0 32 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20  2      0x20  /* 
124f0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
12500 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74  reg[P2] rather t
12510 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66  han jump */.#def
12520 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  ine SQLITE_NULLE
12530 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a  Q       0x80  /*
12540 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64   NULL=NULL */.#d
12550 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54  efine SQLITE_NOT
12560 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20  NULL      0x90  
12570 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 6f  /* Assert that o
12580 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65  perands are neve
12590 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  r NULL */../*.**
125a0 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68   An object of th
125b0 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61 74  is type is creat
125c0 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72 74  ed for each virt
125d0 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e  ual table presen
125e0 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61  t in.** the data
125f0 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a  base schema..**.
12600 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61  ** If the databa
12610 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61  se schema is sha
12620 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20  red, then there 
12630 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  is one instance 
12640 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63  of this.** struc
12650 74 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61  ture for each da
12660 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
12670 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61  n (sqlite3*) tha
12680 74 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65  t uses the share
12690 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69  d.** schema. Thi
126a0 73 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63  s is because eac
126b0 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
126c0 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69  ction requires i
126d0 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a  ts own unique.**
126e0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
126f0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
12700 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63  andle used to ac
12710 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c  cess the virtual
12720 20 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d   table.** implem
12730 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65  entation. sqlite
12740 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
12750 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65  can not be share
12760 64 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74  d between.** dat
12770 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12780 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65  s, even when the
12790 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d   rest of the in-
127a0 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a  memory database.
127b0 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61  ** schema is sha
127c0 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c  red, as the impl
127d0 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e  ementation often
127e0 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61   stores the data
127f0 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
12800 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64  on handle passed
12810 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78   to it via the x
12820 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72  Connect() or xCr
12830 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a  eate() method.**
12840 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
12850 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c  zation internall
12860 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65  y. This database
12870 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
12880 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62  le may.** then b
12890 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69  e used by the vi
128a0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c  rtual table impl
128b0 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63  ementation to ac
128c0 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73  cess real tables
128d0 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64  .** within the d
128e0 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74  atabase. So that
128f0 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20   they appear as 
12900 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c  part of the call
12910 65 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  ers.** transacti
12920 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73  on, these access
12930 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61  es need to be ma
12940 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20  de via the same 
12950 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
12960 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75  ection as that u
12970 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53  sed to execute S
12980 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e  QL operations on
12990 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
129a0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54  le..**.** All VT
129b0 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61  able objects tha
129c0 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  t correspond to 
129d0 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69  a single table i
129e0 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61  n a shared.** da
129f0 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72  tabase schema ar
12a00 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72  e initially stor
12a10 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c  ed in a linked-l
12a20 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  ist pointed to b
12a30 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70  y.** the Table.p
12a40 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61  VTable member va
12a50 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f  riable of the co
12a60 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c  rresponding Tabl
12a70 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65  e object..** Whe
12a80 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65  n an sqlite3_pre
12a90 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e  pare() operation
12aa0 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20   is required to 
12ab0 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
12ac0 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20  al.** table, it 
12ad0 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73  searches the lis
12ae0 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65  t for the VTable
12af0 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
12b00 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61  s to the.** data
12b10 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
12b20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72  doing the prepar
12b30 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65  ing so as to use
12b40 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20   the correct.** 
12b50 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
12b60 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70  ndle in the comp
12b70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a  iled query..**.*
12b80 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d  * When an in-mem
12b90 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ory Table object
12ba0 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72   is deleted (for
12bb0 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68   example when th
12bc0 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62  e.** schema is b
12bd0 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f  eing reloaded fo
12be0 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20  r some reason), 
12bf0 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63  the VTable objec
12c00 74 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65  ts are not.** de
12c10 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71  leted and the sq
12c20 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
12c30 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73  les are not xDis
12c40 63 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69  connect()ed.** i
12c50 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74  mmediately. Inst
12c60 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f  ead, they are mo
12c70 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62  ved from the Tab
12c80 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20  le.pVTable list 
12c90 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69  to.** another li
12ca0 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
12cb0 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e   by the sqlite3.
12cc0 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62  pDisconnect memb
12cd0 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72  er of the.** cor
12ce0 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
12cf0 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68  e3 structure. Th
12d00 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65  ey are then dele
12d10 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65  ted/xDisconnecte
12d20 64 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61  d.** next time a
12d30 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72   statement is pr
12d40 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69  epared using sai
12d50 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73  d sqlite3*. This
12d60 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61   is done.** to a
12d70 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73  void deadlock is
12d80 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d  sues involving m
12d90 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e  ultiple sqlite3.
12da0 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a  mutex mutexes..*
12db0 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65  * Refer to comme
12dc0 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69  nts above functi
12dd0 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  on sqlite3VtabUn
12de0 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61  lockList() for a
12df0 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e  n.** explanation
12e00 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73   as to why it is
12e10 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20   safe to add an 
12e20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69  entry to an sqli
12e30 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a  te3.pDisconnect.
12e40 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20  ** list without 
12e50 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72  holding the corr
12e60 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
12e70 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a  3.mutex mutex..*
12e80 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20  *.** The memory 
12e90 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74  for objects of t
12ea0 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61  his type is alwa
12eb0 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a  ys allocated by.
12ec0 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  ** sqlite3DbMall
12ed0 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20  oc(), using the 
12ee0 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
12ef0 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62  e stored in VTab
12f00 6c 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65 20  le.db as.** the 
12f10 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a  first argument..
12f20 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65  */.struct VTable
12f30 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
12f40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
12f50 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * Database conne
12f60 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ction associated
12f70 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65   with this table
12f80 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d   */.  Module *pM
12f90 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  od;             
12fa0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f  /* Pointer to mo
12fb0 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
12fc0 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ion */.  sqlite3
12fd0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20  _vtab *pVtab;   
12fe0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
12ff0 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a   vtab instance *
13000 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
13010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13020 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
13030 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75  ers to this stru
13040 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43  cture */.  u8 bC
13050 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20  onstraint;      
13060 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
13070 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20  constraints are 
13080 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69  supported */.  i
13090 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt iSavepoint;  
130a0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74           /* Dept
130b0 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49  h of the SAVEPOI
130c0 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54  NT stack */.  VT
130d0 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20  able *pNext;    
130e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
130f0 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  in linked list (
13100 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b  see above) */.};
13110 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65  ../*.** The sche
13120 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20  ma for each SQL 
13130 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69  table and view i
13140 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
13150 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e   memory.** by an
13160 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
13170 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
13180 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
13190 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a  Table {.  char *
131a0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
131b0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
131c0 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20  ble or view */. 
131d0 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20   Column *aCol;  
131e0 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
131f0 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
13200 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 64 65 66  column */.#ifdef
13210 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e   SQLITE_ENABLE_N
13220 4f 52 4d 41 4c 49 5a 45 0a 20 20 48 61 73 68 20  ORMALIZE.  Hash 
13230 2a 70 43 6f 6c 48 61 73 68 3b 20 20 20 20 20 20  *pColHash;      
13240 2f 2a 20 41 6c 6c 20 63 6f 6c 75 6d 6e 73 20 69  /* All columns i
13250 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
13260 2f 0a 23 65 6e 64 69 66 0a 20 20 49 6e 64 65 78  /.#endif.  Index
13270 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20   *pIndex;       
13280 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69  /* List of SQL i
13290 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74  ndexes on this t
132a0 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63  able. */.  Selec
132b0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
132c0 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c  /* NULL for tabl
132d0 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64  es.  Points to d
132e0 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76  efinition if a v
132f0 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  iew. */.  FKey *
13300 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f  pFKey;         /
13310 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
13320 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   all foreign key
13330 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
13340 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
13350 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72  ff;       /* Str
13360 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
13370 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
13380 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78  h column */.  Ex
13390 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20  prList *pCheck; 
133a0 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20     /* All CHECK 
133b0 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20  constraints */. 
133c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133d0 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61        /*   ... a
133e0 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f 6c 75  lso used as colu
133f0 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20  mn name list in 
13400 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20  a VIEW */.  int 
13410 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
13420 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 70   /* Root BTree p
13430 61 67 65 20 66 6f 72 20 74 68 69 73 20 74 61 62  age for this tab
13440 6c 65 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62  le */.  u32 nTab
13450 52 65 66 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Ref;         /* 
13460 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
13470 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65  rs to this Table
13480 20 2a 2f 0a 20 20 75 33 32 20 74 61 62 46 6c 61   */.  u32 tabFla
13490 67 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  gs;        /* Ma
134a0 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65  sk of TF_* value
134b0 73 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79  s */.  i16 iPKey
134c0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
134d0 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20  f not negative, 
134e0 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20  use aCol[iPKey] 
134f0 61 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a  as the rowid */.
13500 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20    i16 nCol;     
13510 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13520 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
13530 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  his table */.  L
13540 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74  ogEst nRowLogEst
13550 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64  ;   /* Estimated
13560 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d   rows in table -
13570 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
13580 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f  t1 table */.  Lo
13590 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20  gEst szTabRow;  
135a0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
135b0 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62  size of each tab
135c0 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20  le row in bytes 
135d0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
135e0 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54  _ENABLE_COSTMULT
135f0 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75  .  LogEst costMu
13600 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20  lt;     /* Cost 
13610 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75  multiplier for u
13620 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  sing this table 
13630 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 6b  */.#endif.  u8 k
13640 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  eyConf;         
13650 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69   /* What to do i
13660 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65  n case of unique
13670 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e  ness conflict on
13680 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65   iPKey */.#ifnde
13690 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  f SQLITE_OMIT_AL
136a0 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61  TERTABLE.  int a
136b0 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20  ddColOffset;    
136c0 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45  /* Offset in CRE
136d0 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74  ATE TABLE stmt t
136e0 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75  o add a new colu
136f0 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  mn */.#endif.#if
13700 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
13710 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
13720 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20  int nModuleArg; 
13730 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13740 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
13750 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63  he module */.  c
13760 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72  har **azModuleAr
13770 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65  g;  /* 0: module
13780 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76 74   1: schema 2: vt
13790 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72  ab name 3...: ar
137a0 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  gs */.  VTable *
137b0 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20  pVTable;     /* 
137c0 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f  List of VTable o
137d0 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69  bjects. */.#endi
137e0 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  f.  Trigger *pTr
137f0 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74  igger;   /* List
13800 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f   of triggers sto
13810 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a  red in pSchema *
13820 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
13830 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
13840 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ma that contains
13850 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
13860 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d   Table *pNextZom
13870 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e  bie;  /* Next on
13880 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62   the Parse.pZomb
13890 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b  ieTab list */.};
138a0 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
138b0 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65  values for Table
138c0 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a  .tabFlags..**.**
138d0 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70   TF_OOOHidden ap
138e0 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65 73 20  plies to tables 
138f0 6f 72 20 76 69 65 77 20 74 68 61 74 20 68 61 76  or view that hav
13900 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  e hidden columns
13910 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c   that are.** fol
13920 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64  lowed by non-hid
13930 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78  den columns.  Ex
13940 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45 20  ample:  "CREATE 
13950 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 20  VIRTUAL TABLE x 
13960 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61  USING.** vtab1(a
13970 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20   HIDDEN, b);".  
13980 53 69 6e 63 65 20 22 62 22 20 69 73 20 61 20 6e  Since "b" is a n
13990 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  on-hidden column
139a0 20 62 75 74 20 22 61 22 20 69 73 20 68 69 64 64   but "a" is hidd
139b0 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f  en,.** the TF_OO
139c0 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62 75 74  OHidden attribut
139d0 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e  e would apply in
139e0 20 74 68 69 73 20 63 61 73 65 2e 20 20 53 75 63   this case.  Suc
139f0 68 20 74 61 62 6c 65 73 20 72 65 71 75 69 72 65  h tables require
13a00 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e 64  .** special hand
13a10 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53 45  ling during INSE
13a20 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a  RT processing..*
13a30 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61  /.#define TF_Rea
13a40 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30  donly        0x0
13a50 30 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  001    /* Read-o
13a60 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
13a70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
13a80 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
13a90 78 30 30 30 32 20 20 20 20 2f 2a 20 41 6e 20 65  x0002    /* An e
13aa0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a  phemeral table *
13ab0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
13ac0 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30  PrimaryKey   0x0
13ad0 30 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  004    /* Table 
13ae0 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65  has a primary ke
13af0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  y */.#define TF_
13b00 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20  Autoincrement   
13b10 30 78 30 30 30 38 20 20 20 20 2f 2a 20 49 6e 74  0x0008    /* Int
13b20 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
13b30 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   is autoincremen
13b40 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  t */.#define TF_
13b50 48 61 73 53 74 61 74 31 20 20 20 20 20 20 20 20  HasStat1        
13b60 30 78 30 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f  0x0010    /* nRo
13b70 77 4c 6f 67 45 73 74 20 73 65 74 20 66 72 6f 6d  wLogEst set from
13b80 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f   sqlite_stat1 */
13b90 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68  .#define TF_With
13ba0 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 30 30  outRowid    0x00
13bb0 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69  20    /* No rowi
13bc0 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20  d.  PRIMARY KEY 
13bd0 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64  is the key */.#d
13be0 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62  efine TF_NoVisib
13bf0 6c 65 52 6f 77 69 64 20 20 30 78 30 30 34 30 20  leRowid  0x0040 
13c00 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69     /* No user-vi
13c10 73 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f  sible "rowid" co
13c20 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lumn */.#define 
13c30 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20  TF_OOOHidden    
13c40 20 20 20 30 78 30 30 38 30 20 20 20 20 2f 2a 20     0x0080    /* 
13c50 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64  Out-of-Order hid
13c60 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23  den columns */.#
13c70 64 65 66 69 6e 65 20 54 46 5f 53 74 61 74 73 55  define TF_StatsU
13c80 73 65 64 20 20 20 20 20 20 20 30 78 30 31 30 30  sed       0x0100
13c90 20 20 20 20 2f 2a 20 51 75 65 72 79 20 70 6c 61      /* Query pla
13ca0 6e 6e 65 72 20 64 65 63 69 73 69 6f 6e 73 20 61  nner decisions a
13cb0 66 66 65 63 74 65 64 20 62 79 0a 20 20 20 20 20  ffected by.     
13cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ce0 2a 2a 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f  ** Index.aiRowLo
13cf0 67 45 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f  gEst[] values */
13d00 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 4e  .#define TF_HasN
13d10 6f 74 4e 75 6c 6c 20 20 20 20 20 20 30 78 30 32  otNull      0x02
13d20 30 30 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  00    /* Contain
13d30 73 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  s NOT NULL const
13d40 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
13d50 65 20 54 46 5f 53 68 61 64 6f 77 20 20 20 20 20  e TF_Shadow     
13d60 20 20 20 20 20 30 78 30 34 30 30 20 20 20 20 2f       0x0400    /
13d70 2a 20 54 72 75 65 20 66 6f 72 20 61 20 73 68 61  * True for a sha
13d80 64 6f 77 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  dow table */../*
13d90 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20  .** Test to see 
13da0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
13db0 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74   table is a virt
13dc0 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ual table.  This
13dd0 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61   is.** done as a
13de0 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69   macro so that i
13df0 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69  t will be optimi
13e00 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72  zed out when vir
13e10 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75  tual.** table su
13e20 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64  pport is omitted
13e30 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e   from the build.
13e40 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
13e50 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
13e60 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49  ABLE.#  define I
13e70 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
13e80 20 28 28 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72   ((X)->nModuleAr
13e90 67 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  g).#else.#  defi
13ea0 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
13eb0 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f       0.#endif../
13ec0 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
13ed0 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20 63 6f  etermine if a co
13ee0 6c 75 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e 20  lumn is hidden. 
13ef0 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
13f00 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c  nColumn().** onl
13f10 79 20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d  y works for non-
13f20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 28  virtual tables (
13f30 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 20  ordinary tables 
13f40 61 6e 64 20 76 69 65 77 73 29 20 61 6e 64 20 69  and views) and i
13f50 73 0a 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c 73  s.** always fals
13f60 65 20 75 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f  e unless SQLITE_
13f70 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
13f80 4c 55 4d 4e 53 20 69 73 20 64 65 66 69 6e 65 64  LUMNS is defined
13f90 2e 20 20 54 68 65 0a 2a 2a 20 49 73 48 69 64 64  .  The.** IsHidd
13fa0 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f  enColumn() macro
13fb0 20 69 73 20 67 65 6e 65 72 61 6c 20 70 75 72 70   is general purp
13fc0 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ose..*/.#if defi
13fd0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
13fe0 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
13ff0 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  ).#  define IsHi
14000 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20  ddenColumn(X)   
14010 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c        (((X)->col
14020 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
14030 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64  HIDDEN)!=0).#  d
14040 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79  efine IsOrdinary
14050 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
14060 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
14070 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
14080 29 21 3d 30 29 0a 23 65 6c 69 66 20 21 64 65 66  )!=0).#elif !def
14090 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
140a0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23  _VIRTUALTABLE).#
140b0 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
140c0 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
140d0 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61     (((X)->colFla
140e0 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
140f0 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69  DEN)!=0).#  defi
14100 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
14110 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23  denColumn(X) 0.#
14120 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
14130 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
14140 20 20 20 20 20 20 20 20 20 30 0a 23 20 20 64 65           0.#  de
14150 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48  fine IsOrdinaryH
14160 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30  iddenColumn(X) 0
14170 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65  .#endif.../* Doe
14180 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76 65  s the table have
14190 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66   a rowid */.#def
141a0 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29 20  ine HasRowid(X) 
141b0 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c      (((X)->tabFl
141c0 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74  ags & TF_Without
141d0 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69  Rowid)==0).#defi
141e0 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28  ne VisibleRowid(
141f0 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61  X) (((X)->tabFla
14200 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c  gs & TF_NoVisibl
14210 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a  eRowid)==0)../*.
14220 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20  ** Each foreign 
14230 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  key constraint i
14240 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
14250 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
14260 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
14270 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73  A foreign key is
14280 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
14290 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68   two tables.  Th
142a0 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69  e "from" table i
142b0 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74  s.** the table t
142c0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
142d0 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
142e0 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20  se that creates 
142f0 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
14300 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61  ey.  The "to" ta
14310 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65  ble is the table
14320 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69   that is named i
14330 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  n the REFERENCES
14340 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73   clause..** Cons
14350 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c  ider this exampl
14360 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  e:.**.**     CRE
14370 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a  ATE TABLE ex1(.*
14380 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45  *       a INTEGE
14390 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a  R PRIMARY KEY,.*
143a0 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45  *       b INTEGE
143b0 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31  R CONSTRAINT fk1
143c0 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28   REFERENCES ex2(
143d0 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a  x).**     );.**.
143e0 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ** For foreign k
143f0 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72  ey "fk1", the fr
14400 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31  om-table is "ex1
14410 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62  " and the to-tab
14420 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20  le is "ex2"..** 
14430 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73  Equivalent names
14440 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d  :.**.**     from
14450 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d  -table == child-
14460 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74  table.**       t
14470 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e  o-table == paren
14480 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61  t-table.**.** Ea
14490 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  ch REFERENCES cl
144a0 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61  ause generates a
144b0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
144c0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
144d0 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69  cture.** which i
144e0 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
144f0 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54  e from-table.  T
14500 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64  he to-table need
14510 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a   not exist when.
14520 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ** the from-tabl
14530 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54  e is created.  T
14540 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20  he existence of 
14550 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
14560 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a  not checked..**.
14570 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61  ** The list of a
14580 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63  ll parents for c
14590 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20  hild Table X is 
145a0 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e  held at X.pFKey.
145b0 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  .**.** A list of
145c0 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f   all children fo
145d0 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  r a table named 
145e0 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e  Z (which might n
145f0 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a  ot even exist).*
14600 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68  * is held in Sch
14610 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74  ema.fkeyHash wit
14620 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20  h a hash key of 
14630 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65  Z..*/.struct FKe
14640 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72  y {.  Table *pFr
14650 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  om;     /* Table
14660 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
14670 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
14680 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a  e (aka: Child) *
14690 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46  /.  FKey *pNextF
146a0 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b  rom;  /* Next FK
146b0 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ey with the same
146c0 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20   in pFrom. Next 
146d0 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20  parent of pFrom 
146e0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20  */.  char *zTo; 
146f0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
14700 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  f table that the
14710 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28   key points to (
14720 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a  aka: Parent) */.
14730 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b    FKey *pNextTo;
14740 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
14750 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e   the same zTo. N
14760 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f  ext child of zTo
14770 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72  . */.  FKey *pPr
14780 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76  evTo;    /* Prev
14790 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73 61  ious with the sa
147a0 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20  me zTo */.  int 
147b0 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  nCol;         /*
147c0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
147d0 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a  ns in this key *
147e0 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33  /.  /* EV: R-303
147f0 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38  23-21917 */.  u8
14800 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20 20   isDeferred;    
14810 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
14820 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e  nstraint checkin
14830 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74 69  g is deferred ti
14840 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75  ll COMMIT */.  u
14850 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20  8 aAction[2];   
14860 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54       /* ON DELET
14870 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20  E and ON UPDATE 
14880 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74  actions, respect
14890 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67  ively */.  Trigg
148a0 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d  er *apTrigger[2]
148b0 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72  ;/* Triggers for
148c0 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f   aAction[] actio
148d0 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  ns */.  struct s
148e0 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a  ColMap {      /*
148f0 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75   Mapping of colu
14900 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20  mns in pFrom to 
14910 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a  columns in zTo *
14920 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b  /.    int iFrom;
14930 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
14940 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  ndex of column i
14950 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63  n pFrom */.    c
14960 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20  har *zCol;      
14970 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
14980 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20  column in zTo.  
14990 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d  If NULL use PRIM
149a0 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61  ARY KEY */.  } a
149b0 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  Col[1];         
149c0 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
149d0 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c  for each of nCol
149e0 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a   columns */.};..
149f0 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70  /*.** SQLite sup
14a00 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65  ports many diffe
14a10 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73  rent ways to res
14a20 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e  olve a constrain
14a30 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c  t.** error.  ROL
14a40 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67  LBACK processing
14a50 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f   means that a co
14a60 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
14a70 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65  on.** causes the
14a80 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
14a90 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e  ocess to fail an
14aa0 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  d for the curren
14ab0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
14ac0 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
14ad0 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65  ck.  ABORT proce
14ae0 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20  ssing means the 
14af0 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
14b00 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e  cess.** fails an
14b10 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e  d any prior chan
14b20 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e  ges from that on
14b30 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
14b40 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62  backed out,.** b
14b50 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ut the transacti
14b60 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64  on is not rolled
14b70 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f   back.  FAIL pro
14b80 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
14b90 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74  at.** the operat
14ba0 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
14bb0 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e  stops and return
14bc0 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e  s an error code.
14bd0 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63    But prior.** c
14be0 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68  hanges due to th
14bf0 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
14c00 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20   are not backed 
14c10 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62  out and no rollb
14c20 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20  ack.** occurs.  
14c30 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61  IGNORE means tha
14c40 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  t the particular
14c50 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64   row that caused
14c60 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a   the constraint.
14c70 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20  ** error is not 
14c80 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61  inserted or upda
14c90 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  ted.  Processing
14ca0 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
14cb0 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65  o error.** is re
14cc0 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45  turned.  REPLACE
14cd0 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65   means that pree
14ce0 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
14cf0 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65   rows that cause
14d00 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f  d.** a UNIQUE co
14d10 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
14d20 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73  on are removed s
14d30 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69  o that the new i
14d40 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61  nsert or.** upda
14d50 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20  te can proceed. 
14d60 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
14d70 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
14d80 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a  or is reported..
14d90 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20  **.** RESTRICT, 
14da0 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53  SETNULL, and CAS
14db0 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70  CADE actions app
14dc0 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69  ly only to forei
14dd0 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54  gn keys..** REST
14de0 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65  RICT is the same
14df0 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d   as ABORT for IM
14e00 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20  MEDIATE foreign 
14e10 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20  keys and the.** 
14e20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b  same as ROLLBACK
14e30 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65   for DEFERRED ke
14e40 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61  ys.  SETNULL mea
14e50 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65  ns that the fore
14e60 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65  ign.** key is se
14e70 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43  t to NULL.  CASC
14e80 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ADE means that a
14e90 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
14ea0 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65  E of the.** refe
14eb0 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77  renced table row
14ec0 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69   is propagated i
14ed0 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74  nto the row that
14ee0 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f   holds the.** fo
14ef0 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a  reign key..**.**
14f00 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
14f10 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61  ymbolic values a
14f20 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72  re used to recor
14f30 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20  d which type.** 
14f40 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b  of action to tak
14f50 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  e..*/.#define OE
14f60 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a  _None     0   /*
14f70 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e   There is no con
14f80 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b  straint to check
14f90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
14fa0 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46  ollback 1   /* F
14fb0 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ail the operatio
14fc0 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74  n and rollback t
14fd0 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  he transaction *
14fe0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f  /.#define OE_Abo
14ff0 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63  rt    2   /* Bac
15000 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75  k out changes bu
15010 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b  t do no rollback
15020 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
15030 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20  #define OE_Fail 
15040 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20      3   /* Stop 
15050 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  the operation bu
15060 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f  t leave all prio
15070 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  r changes */.#de
15080 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20  fine OE_Ignore  
15090 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74   4   /* Ignore t
150a0 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74  he error. Do not
150b0 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f   do the INSERT o
150c0 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
150d0 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20  ine OE_Replace  
150e0 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78  5   /* Delete ex
150f0 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74  isting record, t
15100 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72  hen do INSERT or
15110 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
15120 6e 65 20 4f 45 5f 55 70 64 61 74 65 20 20 20 36  ne OE_Update   6
15130 20 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 61 73     /* Process as
15140 20 61 20 44 4f 20 55 50 44 41 54 45 20 69 6e 20   a DO UPDATE in 
15150 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 23 64 65  an upsert */.#de
15160 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74  fine OE_Restrict
15170 20 37 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74   7   /* OE_Abort
15180 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20   for IMMEDIATE, 
15190 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20  OE_Rollback for 
151a0 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66  DEFERRED */.#def
151b0 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20  ine OE_SetNull  
151c0 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  8   /* Set the f
151d0 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
151e0 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   to NULL */.#def
151f0 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20  ine OE_SetDflt  
15200 39 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  9   /* Set the f
15210 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
15220 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20   to its default 
15230 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61  */.#define OE_Ca
15240 73 63 61 64 65 20 20 31 30 20 20 2f 2a 20 43 61  scade  10  /* Ca
15250 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65  scade the change
15260 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  s */.#define OE_
15270 44 65 66 61 75 6c 74 20 20 31 31 20 20 2f 2a 20  Default  11  /* 
15280 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20  Do whatever the 
15290 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69  default action i
152a0 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  s */.../*.** An 
152b0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
152c0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
152d0 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73  ure is passed as
152e0 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
152f0 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
15300 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20  3VdbeKeyCompare 
15310 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63  and is used to c
15320 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f  ontrol the.** co
15330 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20  mparison of the 
15340 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a  two index keys..
15350 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
15360 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64  aSortOrder[] and
15370 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46   aColl[] have nF
15380 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54  ield+1 slots.  T
15390 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65  here.** are nFie
153a0 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65  ld slots for the
153b0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69   columns of an i
153c0 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78  ndex then one ex
153d0 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20  tra slot.** for 
153e0 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68 65  the rowid at the
153f0 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
15400 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20  KeyInfo {.  u32 
15410 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
15420 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66  /* Number of ref
15430 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20  erences to this 
15440 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a  KeyInfo object *
15450 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
15460 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
15470 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f  encoding - one o
15480 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46  f the SQLITE_UTF
15490 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31  * values */.  u1
154a0 36 20 6e 4b 65 79 46 69 65 6c 64 3b 20 20 20 20  6 nKeyField;    
154b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b    /* Number of k
154c0 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  ey columns in th
154d0 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36  e index */.  u16
154e0 20 6e 41 6c 6c 46 69 65 6c 64 3b 20 20 20 20 20   nAllField;     
154f0 20 2f 2a 20 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e   /* Total column
15500 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6b 65 79  s, including key
15510 20 70 6c 75 73 20 6f 74 68 65 72 73 20 2a 2f 0a   plus others */.
15520 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
15530 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
15540 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
15550 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
15560 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72  rder;     /* Sor
15570 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68  t order for each
15580 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f   column. */.  Co
15590 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b  llSeq *aColl[1];
155a0 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
155b0 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68  equence for each
155c0 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79   term of the key
155d0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
155e0 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20  is object holds 
155f0 61 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 68  a record which h
15600 61 73 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f  as been parsed o
15610 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75  ut into individu
15620 61 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f  al.** fields, fo
15630 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
15640 66 20 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72  f doing a compar
15650 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65  ison..**.** A re
15660 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63  cord is an objec
15670 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  t that contains 
15680 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c  one or more fiel
15690 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52  ds of data..** R
156a0 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20  ecords are used 
156b0 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e  to store the con
156c0 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20  tent of a table 
156d0 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65  row and to store
156e0 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61  .** the key of a
156f0 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62  n index.  A blob
15700 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72   encoding of a r
15710 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64  ecord is created
15720 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61   by.** the OP_Ma
15730 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
15740 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20  of the VDBE and 
15750 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20  is disassembled 
15760 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c  by the.** OP_Col
15770 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  umn opcode..**.*
15780 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
15790 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73 65 72   this object ser
157a0 76 65 73 20 61 73 20 61 20 22 6b 65 79 22 20 66  ves as a "key" f
157b0 6f 72 20 64 6f 69 6e 67 20 61 20 73 65 61 72 63  or doing a searc
157c0 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78  h on.** an index
157d0 20 62 2b 74 72 65 65 2e 20 54 68 65 20 67 6f 61   b+tree. The goa
157e0 6c 20 6f 66 20 74 68 65 20 73 65 61 72 63 68 20  l of the search 
157f0 69 73 20 74 6f 20 66 69 6e 64 20 74 68 65 20 65  is to find the e
15800 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 69 73 20  ntry that.** is 
15810 63 6c 6f 73 65 64 20 74 6f 20 74 68 65 20 6b 65  closed to the ke
15820 79 20 64 65 73 63 72 69 62 65 64 20 62 79 20 74  y described by t
15830 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 69  his object.  Thi
15840 73 20 6f 62 6a 65 63 74 20 6d 69 67 68 74 20 68  s object might h
15850 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72  old.** just a pr
15860 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79 2e  efix of the key.
15870 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20    The number of 
15880 66 69 65 6c 64 73 20 69 73 20 67 69 76 65 6e 20  fields is given 
15890 62 79 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e  by.** pKeyInfo->
158a0 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  nField..**.** Th
158b0 65 20 72 31 20 61 6e 64 20 72 32 20 66 69 65 6c  e r1 and r2 fiel
158c0 64 73 20 61 72 65 20 74 68 65 20 76 61 6c 75 65  ds are the value
158d0 73 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 74  s to return if t
158e0 68 69 73 20 6b 65 79 20 69 73 20 6c 65 73 73 20  his key is less 
158f0 74 68 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74  than.** or great
15900 65 72 20 74 68 61 6e 20 61 20 6b 65 79 20 69 6e  er than a key in
15910 20 74 68 65 20 62 74 72 65 65 2c 20 72 65 73 70   the btree, resp
15920 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 73 65  ectively.  These
15930 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a   are normally.**
15940 20 2d 31 20 61 6e 64 20 2b 31 20 72 65 73 70 65   -1 and +1 respe
15950 63 74 69 76 65 6c 79 2c 20 62 75 74 20 6d 69 67  ctively, but mig
15960 68 74 20 62 65 20 69 6e 76 65 72 74 65 64 20 74  ht be inverted t
15970 6f 20 2b 31 20 61 6e 64 20 2d 31 20 69 66 20 74  o +1 and -1 if t
15980 68 65 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20  he b-tree.** is 
15990 69 6e 20 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a  in DESC order..*
159a0 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d  *.** The key com
159b0 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
159c0 73 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72  s actually retur
159d0 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 77 68 65  n default_rc whe
159e0 6e 20 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61  n they find.** a
159f0 6e 20 65 71 75 61 6c 73 20 63 6f 6d 70 61 72 69  n equals compari
15a00 73 6f 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72 63  son.  default_rc
15a10 20 63 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f   can be -1, 0, o
15a20 72 20 2b 31 2e 20 20 49 66 20 74 68 65 72 65 20  r +1.  If there 
15a30 61 72 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20  are.** multiple 
15a40 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 62  entries in the b
15a50 2d 74 72 65 65 20 77 69 74 68 20 74 68 65 20 73  -tree with the s
15a60 61 6d 65 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e  ame key (when on
15a70 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74  ly looking.** at
15a80 20 74 68 65 20 66 69 72 73 74 20 70 4b 65 79 49   the first pKeyI
15a90 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74  nfo->nFields,) t
15aa0 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 63  hen default_rc c
15ab0 61 6e 20 62 65 20 73 65 74 20 74 6f 20 2d 31 20  an be set to -1 
15ac0 74 6f 0a 2a 2a 20 63 61 75 73 65 20 74 68 65 20  to.** cause the 
15ad0 73 65 61 72 63 68 20 74 6f 20 66 69 6e 64 20 74  search to find t
15ae0 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f  he last match, o
15af0 72 20 2b 31 20 74 6f 20 63 61 75 73 65 20 74 68  r +1 to cause th
15b00 65 20 73 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66  e search to.** f
15b10 69 6e 64 20 74 68 65 20 66 69 72 73 74 20 6d 61  ind the first ma
15b20 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b  tch..**.** The k
15b30 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75  ey comparison fu
15b40 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74  nctions will set
15b50 20 65 71 53 65 65 6e 20 74 6f 20 74 72 75 65 20   eqSeen to true 
15b60 69 66 20 74 68 65 79 20 65 76 65 72 0a 2a 2a 20  if they ever.** 
15b70 67 65 74 20 61 6e 64 20 65 71 75 61 6c 20 72 65  get and equal re
15b80 73 75 6c 74 73 20 77 68 65 6e 20 63 6f 6d 70 61  sults when compa
15b90 72 69 6e 67 20 74 68 69 73 20 73 74 72 75 63 74  ring this struct
15ba0 75 72 65 20 74 6f 20 61 20 62 2d 74 72 65 65 20  ure to a b-tree 
15bb0 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20  record..** When 
15bc0 64 65 66 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74  default_rc!=0, t
15bd0 68 65 20 73 65 61 72 63 68 20 6d 69 67 68 74 20  he search might 
15be0 65 6e 64 20 75 70 20 6f 6e 20 74 68 65 20 72 65  end up on the re
15bf0 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c 79  cord immediately
15c00 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68 65 20 66  .** before the f
15c10 69 72 73 74 20 6d 61 74 63 68 20 6f 72 20 69 6d  irst match or im
15c20 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72 20  mediately after 
15c30 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2e 20  the last match. 
15c40 20 54 68 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66   The.** eqSeen f
15c50 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64 69 63 61  ield will indica
15c60 74 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  te whether or no
15c70 74 20 61 6e 20 65 78 61 63 74 20 6d 61 74 63 68  t an exact match
15c80 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 0a 2a   exists in the.*
15c90 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72  * b-tree..*/.str
15ca0 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
15cb0 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  rd {.  KeyInfo *
15cc0 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f  pKeyInfo;  /* Co
15cd0 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74  llation and sort
15ce0 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69  -order informati
15cf0 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65  on */.  Mem *aMe
15d00 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  m;          /* V
15d10 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
15d20 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
15d30 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
15d40 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a  ies in apMem[] *
15d50 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f 72  /.  i8 default_r
15d60 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61  c;      /* Compa
15d70 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66 20  rison result if 
15d80 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c 20 2a  keys are equal *
15d90 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b 20  /.  u8 errCode; 
15da0 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72          /* Error
15db0 20 64 65 74 65 63 74 65 64 20 62 79 20 78 52 65   detected by xRe
15dc0 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f 52  cordCompare (COR
15dd0 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a  RUPT or NOMEM) *
15de0 2f 0a 20 20 69 38 20 72 31 3b 20 20 20 20 20 20  /.  i8 r1;      
15df0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
15e00 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c   to return if (l
15e10 68 73 20 3c 20 72 68 73 29 20 2a 2f 0a 20 20 69  hs < rhs) */.  i
15e20 38 20 72 32 3b 20 20 20 20 20 20 20 20 20 20 20  8 r2;           
15e30 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
15e40 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20  eturn if (lhs > 
15e50 72 68 73 29 20 2a 2f 0a 20 20 75 38 20 65 71 53  rhs) */.  u8 eqS
15e60 65 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  een;          /*
15e70 20 54 72 75 65 20 69 66 20 61 6e 20 65 71 75 61   True if an equa
15e80 6c 69 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20  lity comparison 
15e90 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f  has been seen */
15ea0 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  .};.../*.** Each
15eb0 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65   SQL index is re
15ec0 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
15ed0 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ory by an.** ins
15ee0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
15ef0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
15f00 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75  ..**.** The colu
15f10 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  mns of the table
15f20 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20   that are to be 
15f30 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63  indexed are desc
15f40 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20  ribed.** by the 
15f50 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64  aiColumn[] field
15f60 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
15f70 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  re.  For example
15f80 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20  , suppose.** we 
15f90 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  have the followi
15fa0 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64  ng table and ind
15fb0 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  ex:.**.**     CR
15fc0 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63  EATE TABLE Ex1(c
15fd0 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63  1 int, c2 int, c
15fe0 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20  3 text);.**     
15ff0 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32  CREATE INDEX Ex2
16000 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a   ON Ex1(c3,c1);.
16010 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62  **.** In the Tab
16020 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73  le structure des
16030 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f  cribing Ex1, nCo
16040 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65  l==3 because the
16050 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20  re are.** three 
16060 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
16070 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e  able.  In the In
16080 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65  dex structure de
16090 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c  scribing.** Ex2,
160a0 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63   nColumn==2 sinc
160b0 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c  e 2 of the 3 col
160c0 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20  umns of Ex1 are 
160d0 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20  indexed..** The 
160e0 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d  value of aiColum
160f0 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69  n is {2, 0}.  ai
16100 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63  Column[0]==2 bec
16110 61 75 73 65 20 74 68 65 0a 2a 2a 20 66 69 72 73  ause the.** firs
16120 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  t column to be i
16130 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20  ndexed (c3) has 
16140 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e  an index of 2 in
16150 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20   Ex1.aCol[]..** 
16160 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d  The second colum
16170 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
16180 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c1) has an inde
16190 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31  x of 0 in.** Ex1
161a0 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45  .aCol[], hence E
161b0 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d  x2.aiColumn[1]==
161c0 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64  0..**.** The Ind
161d0 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64  ex.onError field
161e0 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74   determines whet
161f0 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69  her or not the i
16200 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a  ndexed columns.*
16210 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65  * must be unique
16220 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20   and what to do 
16230 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e  if they are not.
16240 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45    When Index.onE
16250 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a  rror=OE_None,.**
16260 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69   it means this i
16270 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69  s not a unique i
16280 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65  ndex.  Otherwise
16290 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20   it is a unique 
162a0 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65  index.** and the
162b0 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e   value of Index.
162c0 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65  onError indicate
162d0 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c   the which confl
162e0 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a  ict resolution.*
162f0 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65  * algorithm to e
16300 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61  mploy whenever a
16310 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
16320 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f  e to insert a no
16330 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d  n-unique.** elem
16340 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65  ent..**.** While
16350 20 70 61 72 73 69 6e 67 20 61 20 43 52 45 41 54   parsing a CREAT
16360 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41 54  E TABLE or CREAT
16370 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e  E INDEX statemen
16380 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  t in order to.**
16390 20 67 65 6e 65 72 61 74 65 20 56 44 42 45 20 63   generate VDBE c
163a0 6f 64 65 20 28 61 73 20 6f 70 70 6f 73 65 64 20  ode (as opposed 
163b0 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e 65 20 72  to parsing one r
163c0 65 61 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69  ead from an sqli
163d0 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62  te_master.** tab
163e0 6c 65 20 61 73 20 70 61 72 74 20 6f 66 20 70 61  le as part of pa
163f0 72 73 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e  rsing an existin
16400 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  g database schem
16410 61 29 2c 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  a), transient in
16420 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68  stances.** of th
16430 69 73 20 73 74 72 75 63 74 75 72 65 20 6d 61 79  is structure may
16440 20 62 65 20 63 72 65 61 74 65 64 2e 20 49 6e 20   be created. In 
16450 74 68 69 73 20 63 61 73 65 20 74 68 65 20 49 6e  this case the In
16460 64 65 78 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c  dex.tnum variabl
16470 65 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20  e is.** used to 
16480 73 74 6f 72 65 20 74 68 65 20 61 64 64 72 65 73  store the addres
16490 73 20 6f 66 20 61 20 56 44 42 45 20 69 6e 73 74  s of a VDBE inst
164a0 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64  ruction, not a d
164b0 61 74 61 62 61 73 65 20 70 61 67 65 0a 2a 2a 20  atabase page.** 
164c0 6e 75 6d 62 65 72 20 28 69 74 20 63 61 6e 6e 6f  number (it canno
164d0 74 20 2d 20 74 68 65 20 64 61 74 61 62 61 73 65  t - the database
164e0 20 70 61 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c   page is not all
164f0 6f 63 61 74 65 64 20 75 6e 74 69 6c 20 74 68 65  ocated until the
16500 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d   VDBE.** program
16510 20 69 73 20 65 78 65 63 75 74 65 64 29 2e 20 53   is executed). S
16520 65 65 20 63 6f 6e 76 65 72 74 54 6f 57 69 74 68  ee convertToWith
16530 6f 75 74 52 6f 77 69 64 54 61 62 6c 65 28 29 20  outRowidTable() 
16540 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a  for details..*/.
16550 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20  struct Index {. 
16560 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
16570 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
16580 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  e of this index 
16590 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75  */.  i16 *aiColu
165a0 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  mn;           /*
165b0 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61   Which columns a
165c0 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73 20  re used by this 
165d0 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20 30  index.  1st is 0
165e0 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69   */.  LogEst *ai
165f0 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f  RowLogEst;     /
16600 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20  * From ANALYZE: 
16610 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74  Est. rows select
16620 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d  ed by each colum
16630 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  n */.  Table *pT
16640 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
16650 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65  /* The SQL table
16660 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a   being indexed *
16670 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66  /.  char *zColAf
16680 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
16690 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
166a0 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
166b0 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
166c0 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20   Index *pNext;  
166d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
166e0 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f   next index asso
166f0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
16700 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  same table */.  
16710 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
16720 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65           /* Sche
16730 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
16740 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38  is index */.  u8
16750 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
16760 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61         /* for ea
16770 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d  ch column: True=
16780 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53  =DESC, False==AS
16790 43 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  C */.  const cha
167a0 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20  r **azColl;     
167b0 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c  /* Array of coll
167c0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e  ation sequence n
167d0 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a  ames for index *
167e0 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74 49  /.  Expr *pPartI
167f0 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20  dxWhere;     /* 
16800 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
16810 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73   partial indices
16820 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
16830 61 43 6f 6c 45 78 70 72 3b 20 20 20 20 20 20 2f  aColExpr;      /
16840 2a 20 43 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  * Column express
16850 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  ions */.  int tn
16860 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  um;             
16870 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f     /* DB Page co
16880 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66  ntaining root of
16890 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
168a0 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f 77   LogEst szIdxRow
168b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  ;         /* Est
168c0 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20 72  imated average r
168d0 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ow size in bytes
168e0 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f   */.  u16 nKeyCo
168f0 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  l;             /
16900 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
16910 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65 20  mns forming the 
16920 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f  key */.  u16 nCo
16930 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
16940 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
16950 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e  olumns stored in
16960 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
16970 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20  u8 onError;     
16980 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41           /* OE_A
16990 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c  bort, OE_Ignore,
169a0 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20   OE_Replace, or 
169b0 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73  OE_None */.  uns
169c0 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a 32 3b  igned idxType:2;
169d0 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51        /* 1==UNIQ
169e0 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b  UE, 2==PRIMARY K
169f0 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e  EY, 0==CREATE IN
16a00 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  DEX */.  unsigne
16a10 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20  d bUnordered:1; 
16a20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e    /* Use this in
16a30 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e  dex for == or IN
16a40 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f   queries only */
16a50 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71  .  unsigned uniq
16a60 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54  NotNull:1;  /* T
16a70 72 75 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e  rue if UNIQUE an
16a80 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61  d NOT NULL for a
16a90 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  ll columns */.  
16aa0 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69 7a  unsigned isResiz
16ab0 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65  ed:1;    /* True
16ac0 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78 4f   if resizeIndexO
16ad0 62 6a 65 63 74 28 29 20 68 61 73 20 62 65 65 6e  bject() has been
16ae0 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73   called */.  uns
16af0 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e 67  igned isCovering
16b00 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66  :1;   /* True if
16b10 20 74 68 69 73 20 69 73 20 61 20 63 6f 76 65 72   this is a cover
16b20 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  ing index */.  u
16b30 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63  nsigned noSkipSc
16b40 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f  an:1;   /* Do no
16b50 74 20 74 72 79 20 74 6f 20 75 73 65 20 73 6b 69  t try to use ski
16b60 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65 20 2a  p-scan if true *
16b70 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 68 61 73  /.  unsigned has
16b80 53 74 61 74 31 3a 31 3b 20 20 20 20 20 2f 2a 20  Stat1:1;     /* 
16b90 61 69 52 6f 77 4c 6f 67 45 73 74 20 76 61 6c 75  aiRowLogEst valu
16ba0 65 73 20 63 6f 6d 65 20 66 72 6f 6d 20 73 71 6c  es come from sql
16bb0 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 20 20 75  ite_stat1 */.  u
16bc0 6e 73 69 67 6e 65 64 20 62 4e 6f 51 75 65 72 79  nsigned bNoQuery
16bd0 3a 31 3b 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f  :1;     /* Do no
16be0 74 20 75 73 65 20 74 68 69 73 20 69 6e 64 65 78  t use this index
16bf0 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 71 75 65   to optimize que
16c00 72 69 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ries */.#ifdef S
16c10 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
16c20 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e  T3_OR_STAT4.  in
16c30 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20  t nSample;      
16c40 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16c50 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20   of elements in 
16c60 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69  aSample[] */.  i
16c70 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20  nt nSampleCol;  
16c80 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
16c90 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61  of IndexSample.a
16ca0 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20  nEq[] and so on 
16cb0 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41  */.  tRowcnt *aA
16cc0 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a  vgEq;         /*
16cd0 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c   Average nEq val
16ce0 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74  ues for keys not
16cf0 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20   in aSample */. 
16d00 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53   IndexSample *aS
16d10 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d  ample;    /* Sam
16d20 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74  ples of the left
16d30 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74  -most key */.  t
16d40 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74  Rowcnt *aiRowEst
16d50 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c  ;       /* Non-l
16d60 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61 74 31  ogarithmic stat1
16d70 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20 69   data for this i
16d80 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  ndex */.  tRowcn
16d90 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20 20  t nRowEst0;     
16da0 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69     /* Non-logari
16db0 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66 20  thmic number of 
16dc0 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65  rows in the inde
16dd0 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 42 69  x */.#endif.  Bi
16de0 74 6d 61 73 6b 20 63 6f 6c 4e 6f 74 49 64 78 65  tmask colNotIdxe
16df0 64 3b 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20  d;     /* 0 for 
16e00 75 6e 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  unindexed column
16e10 73 20 69 6e 20 70 54 61 62 20 2a 2f 0a 7d 3b 0a  s in pTab */.};.
16e20 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
16e30 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e  alues for Index.
16e40 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69  idxType.*/.#defi
16e50 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
16e60 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30 20  E_APPDEF      0 
16e70 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69    /* Created usi
16e80 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  ng CREATE INDEX 
16e90 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
16ea0 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45  E_IDXTYPE_UNIQUE
16eb0 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70        1   /* Imp
16ec0 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45  lements a UNIQUE
16ed0 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
16ee0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
16ef0 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59  XTYPE_PRIMARYKEY
16f00 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20    2   /* Is the 
16f10 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20  PRIMARY KEY for 
16f20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  the table */../*
16f30 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
16f40 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49  index X is a PRI
16f50 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a  MARY KEY index *
16f60 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d  /.#define IsPrim
16f70 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20  aryKeyIndex(X)  
16f80 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53  ((X)->idxType==S
16f90 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52  QLITE_IDXTYPE_PR
16fa0 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65  IMARYKEY)../* Re
16fb0 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
16fc0 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45  ex X is a UNIQUE
16fd0 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
16fe0 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28  e IsUniqueIndex(
16ff0 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e  X)      ((X)->on
17000 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a  Error!=OE_None).
17010 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69  ./* The Index.ai
17020 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20  Column[] values 
17030 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73  are normally pos
17040 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20  itive integer.  
17050 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65  But.** there are
17060 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76   some negative v
17070 61 6c 75 65 73 20 74 68 61 74 20 68 61 76 65 20  alues that have 
17080 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a  special meaning:
17090 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52  .*/.#define XN_R
170a0 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20 20 20  OWID     (-1)   
170b0 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c    /* Indexed col
170c0 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64  umn is the rowid
170d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45   */.#define XN_E
170e0 58 50 52 20 20 20 20 20 20 28 2d 32 29 20 20 20  XPR      (-2)   
170f0 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c    /* Indexed col
17100 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73  umn is an expres
17110 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  sion */../*.** E
17120 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65  ach sample store
17130 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  d in the sqlite_
17140 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72  stat3 table is r
17150 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
17160 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20  mory.** using a 
17170 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69  structure of thi
17180 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63  s type.  See doc
17190 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68  umentation at th
171a0 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20  e top of the.** 
171b0 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65  analyze.c source
171c0 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69   file for additi
171d0 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
171e0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
171f0 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64  xSample {.  void
17200 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   *p;          /*
17210 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70   Pointer to samp
17220 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  led record */.  
17230 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
17240 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63    /* Size of rec
17250 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ord in bytes */.
17260 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b    tRowcnt *anEq;
17270 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
17280 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
17290 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20   the key equals 
172a0 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
172b0 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20   tRowcnt *anLt; 
172c0 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
172d0 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
172e0 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
172f0 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
17300 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74    tRowcnt *anDLt
17310 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62  ;   /* Est. numb
17320 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b  er of distinct k
17330 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68  eys less than th
17340 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a  is sample */.};.
17350 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
17360 76 61 6c 75 65 73 20 74 6f 20 75 73 65 20 77 69  values to use wi
17370 74 68 69 6e 20 74 68 65 20 66 6c 61 67 73 20 61  thin the flags a
17380 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74  rgument to sqlit
17390 65 33 47 65 74 54 6f 6b 65 6e 28 29 2e 0a 2a 2f  e3GetToken()..*/
173a0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
173b0 54 4f 4b 45 4e 5f 51 55 4f 54 45 44 20 20 20 20  TOKEN_QUOTED    
173c0 30 78 31 20 2f 2a 20 54 6f 6b 65 6e 20 69 73 20  0x1 /* Token is 
173d0 61 20 71 75 6f 74 65 64 20 69 64 65 6e 74 69 66  a quoted identif
173e0 69 65 72 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ier. */.#define 
173f0 53 51 4c 49 54 45 5f 54 4f 4b 45 4e 5f 4b 45 59  SQLITE_TOKEN_KEY
17400 57 4f 52 44 20 20 20 30 78 32 20 2f 2a 20 54 6f  WORD   0x2 /* To
17410 6b 65 6e 20 69 73 20 61 20 6b 65 79 77 6f 72 64  ken is a keyword
17420 2e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  . */../*.** Each
17430 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75   token coming ou
17440 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69  t of the lexer i
17450 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
17460 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75  .** this structu
17470 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20  re.  Tokens are 
17480 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72  also used as par
17490 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  t of an expressi
174a0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65  on..**.** The me
174b0 6d 6f 72 79 20 74 68 61 74 20 22 7a 22 20 70 6f  mory that "z" po
174c0 69 6e 74 73 20 74 6f 20 69 73 20 6f 77 6e 65 64  ints to is owned
174d0 20 62 79 20 6f 74 68 65 72 20 6f 62 6a 65 63 74   by other object
174e0 73 2e 20 20 54 61 6b 65 20 63 61 72 65 0a 2a 2a  s.  Take care.**
174f0 20 74 68 61 74 20 74 68 65 20 6f 77 6e 65 72 20   that the owner 
17500 6f 66 20 74 68 65 20 22 7a 22 20 73 74 72 69 6e  of the "z" strin
17510 67 20 64 6f 65 73 20 6e 6f 74 20 64 65 61 6c 6c  g does not deall
17520 6f 63 61 74 65 20 74 68 65 20 73 74 72 69 6e 67  ocate the string
17530 20 62 65 66 6f 72 65 0a 2a 2a 20 74 68 65 20 54   before.** the T
17540 6f 6b 65 6e 20 67 6f 65 73 20 6f 75 74 20 6f 66  oken goes out of
17550 20 73 63 6f 70 65 21 20 20 56 65 72 79 20 6f 66   scope!  Very of
17560 74 65 6e 2c 20 74 68 65 20 22 7a 22 20 70 6f 69  ten, the "z" poi
17570 6e 74 73 20 74 6f 20 73 6f 6d 65 20 70 6c 61 63  nts to some plac
17580 65 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 69 64 64  e.** in the midd
17590 6c 65 20 6f 66 20 74 68 65 20 50 61 72 73 65 2e  le of the Parse.
175a0 7a 53 71 6c 20 74 65 78 74 2e 20 20 42 75 74 20  zSql text.  But 
175b0 69 74 20 6d 69 67 68 74 20 61 6c 73 6f 20 70 6f  it might also po
175c0 69 6e 74 20 74 6f 20 61 0a 2a 2a 20 73 74 61 74  int to a.** stat
175d0 69 63 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74  ic string..*/.st
175e0 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63  ruct Token {.  c
175f0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20  onst char *z;   
17600 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65    /* Text of the
17610 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c   token.  Not NUL
17620 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f  L-terminated! */
17630 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
17640 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  n;    /* Number 
17650 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  of characters in
17660 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d   this token */.}
17670 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
17680 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
17690 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
176a0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64  information need
176b0 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a  ed to generate.*
176c0 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c  * code for a SEL
176d0 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ECT that contain
176e0 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
176f0 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
17700 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f  Expr.op==TK_AGG_
17710 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47  COLUMN or TK_AGG
17720 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45  _FUNCTION then E
17730 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20  xpr.pAggInfo is 
17740 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20  a.** pointer to 
17750 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
17760 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d   The Expr.iColum
17770 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20 69  n field is the i
17780 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e  ndex in.** AggIn
17790 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67  fo.aCol[] or Agg
177a0 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20  Info.aFunc[] of 
177b0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64  information need
177c0 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a  ed to generate.*
177d0 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20  * code for that 
177e0 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49  node..**.** AggI
177f0 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64  nfo.pGroupBy and
17800 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70   AggInfo.aFunc.p
17810 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69  Expr point to fi
17820 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a  elds within the.
17830 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65  ** original Sele
17840 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68 61  ct structure tha
17850 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  t describes the 
17860 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
17870 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c  .  These.** fiel
17880 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74  ds do not need t
17890 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20  o be freed when 
178a0 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65  deallocating the
178b0 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75   AggInfo structu
178c0 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67  re..*/.struct Ag
178d0 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72  gInfo {.  u8 dir
178e0 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ectMode;        
178f0 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64    /* Direct rend
17900 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73  ering mode means
17910 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65 63   take data direc
17920 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20  tly.            
17930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
17940 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62   from source tab
17950 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e 20  les rather than 
17960 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72  from accumulator
17970 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72  s */.  u8 useSor
17980 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f  tingIdx;       /
17990 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65  * In direct mode
179a0 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65 20  , reference the 
179b0 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61  sorting index ra
179c0 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  ther.           
179d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
179e0 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63  * than the sourc
179f0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  e table */.  int
17a00 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20   sortingIdx;    
17a10 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
17a20 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72  umber of the sor
17a30 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
17a40 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54  int sortingIdxPT
17a50 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f  ab;     /* Curso
17a60 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75  r number of pseu
17a70 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  do-table */.  in
17a80 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e  t nSortingColumn
17a90 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  ;     /* Number 
17aa0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
17ab0 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
17ac0 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20  */.  int mnReg, 
17ad0 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  mxReg;       /* 
17ae0 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65  Range of registe
17af0 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  rs allocated for
17b00 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20   aCol and aFunc 
17b10 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
17b20 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20  GroupBy;     /* 
17b30 54 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61  The group by cla
17b40 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  use */.  struct 
17b50 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20  AggInfo_col {   
17b60 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c   /* For each col
17b70 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72  umn used in sour
17b80 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20  ce tables */.   
17b90 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
17ba0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75            /* Sou
17bb0 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
17bc0 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
17bd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
17be0 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
17bf0 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
17c00 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d  /.    int iColum
17c10 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
17c20 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * Column number 
17c30 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63  within the sourc
17c40 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
17c50 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e  nt iSorterColumn
17c60 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  ;       /* Colum
17c70 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20  n number in the 
17c80 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
17c90 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17cb0 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
17cc0 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
17cd0 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
17ce0 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
17cf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
17d00 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73   original expres
17d10 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f  sion */.  } *aCo
17d20 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e  l;.  int nColumn
17d30 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
17d40 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65  Number of used e
17d50 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d  ntries in aCol[]
17d60 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d   */.  int nAccum
17d70 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a  ulator;       /*
17d80 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
17d90 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74 68 72  ns that show thr
17da0 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70  ough to the outp
17db0 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  ut..            
17dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
17dd0 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75   Additional colu
17de0 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c  mns are used onl
17df0 79 20 61 73 20 70 61 72 61 6d 65 74 65 72 73 20  y as parameters 
17e00 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  to.             
17e10 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
17e20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
17e30 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
17e40 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20  AggInfo_func {  
17e50 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67   /* For each agg
17e60 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
17e70 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
17e80 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
17e90 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e  /* Expression en
17ea0 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74  coding the funct
17eb0 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44  ion */.    FuncD
17ec0 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20  ef *pFunc;      
17ed0 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65      /* The aggre
17ee0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d  gate function im
17ef0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a  plementation */.
17f00 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20      int iMem;   
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17f20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  Memory location 
17f30 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63  that acts as acc
17f40 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20  umulator */.    
17f50 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20  int iDistinct;  
17f60 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65           /* Ephe
17f70 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64  meral table used
17f80 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54   to enforce DIST
17f90 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75  INCT */.  } *aFu
17fa0 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b  nc;.  int nFunc;
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17fc0 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
17fd0 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f  es in aFunc[] */
17fe0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  .};../*.** The d
17ff0 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69 73  atatype ynVar is
18000 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65   a signed intege
18010 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69 74  r, either 16-bit
18020 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55   or 32-bit..** U
18030 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d  sually it is 16-
18040 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53 51  bits.  But if SQ
18050 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
18060 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61  E_NUMBER is grea
18070 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36  ter.** than 3276
18080 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b  7 we have to mak
18090 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36  e it 32-bit.  16
180a0 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72 65  -bit is preferre
180b0 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20  d because.** it 
180c0 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79  uses less memory
180d0 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a   in the Expr obj
180e0 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61 20  ect, which is a 
180f0 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a  big memory user.
18100 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69  ** in systems wi
18110 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61  th lots of prepa
18120 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  red statements. 
18130 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61   And few applica
18140 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f  tions.** need mo
18150 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30  re than about 10
18160 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65 73   or 20 variables
18170 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72  .  But some extr
18180 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a  eme users want.*
18190 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61 72  * to have prepar
181a0 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  ed statements wi
181b0 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76 61  th over 32767 va
181c0 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72  riables, and for
181d0 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74   them.** the opt
181e0 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
181f0 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   (at compile-tim
18200 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  e)..*/.#if SQLIT
18210 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
18220 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70  UMBER<=32767.typ
18230 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a  edef i16 ynVar;.
18240 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e  #else.typedef in
18250 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a  t ynVar;.#endif.
18260 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65  ./*.** Each node
18270 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
18280 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20 74  n in the parse t
18290 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ree is an instan
182a0 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  ce.** of this st
182b0 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45  ructure..**.** E
182c0 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70  xpr.op is the op
182d0 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65  code. The intege
182e0 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63  r parser token c
182f0 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a  odes are reused.
18300 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65  ** as opcodes he
18310 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  re. For example,
18320 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69   the parser defi
18330 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20  nes TK_GE to be 
18340 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f  an integer.** co
18350 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  de representing 
18360 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f  the ">=" operato
18370 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74  r. This same int
18380 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75  eger code is reu
18390 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73  sed.** to repres
183a0 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d  ent the greater-
183b0 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f  than-or-equal-to
183c0 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65   operator in the
183d0 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74   expression.** t
183e0 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ree..**.** If th
183f0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
18400 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28  an SQL literal (
18410 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46  TK_INTEGER, TK_F
18420 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a  LOAT, TK_BLOB,.*
18430 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c  * or TK_STRING),
18440 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
18450 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65   contains the te
18460 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69  xt of the SQL li
18470 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65  teral. If.** the
18480 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
18490 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41   variable (TK_VA
184a0 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78  RIABLE), then Ex
184b0 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
184c0 73 20 74 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c  s the.** variabl
184d0 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c  e name. Finally,
184e0 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
184f0 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e  on is an SQL fun
18500 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49  ction (TK_FUNCTI
18510 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70  ON),.** then Exp
18520 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
18530 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
18540 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a   function..**.**
18550 20 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64   Expr.pRight and
18560 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20   Expr.pLeft are 
18570 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
18580 68 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e  ht subexpression
18590 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79  s of a.** binary
185a0 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65   operator. Eithe
185b0 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65  r or both may be
185c0 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70   NULL..**.** Exp
185d0 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c  r.x.pList is a l
185e0 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ist of arguments
185f0 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
18600 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e  on is an SQL fun
18610 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45  ction,.** a CASE
18620 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61   expression or a
18630 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  n IN expression 
18640 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  of the form "<lh
18650 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e  s> IN (<y>, <z>.
18660 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e  ..)"..** Expr.x.
18670 70 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20  pSelect is used 
18680 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
18690 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63  n is a sub-selec
186a0 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69  t or an expressi
186b0 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72  on of.** the for
186c0 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c  m "<lhs> IN (SEL
186d0 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68  ECT ...)". If th
186e0 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62  e EP_xIsSelect b
186f0 69 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  it is set in the
18700 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  .** Expr.flags m
18710 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78  ask, then Expr.x
18720 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
18730 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78  d. Otherwise, Ex
18740 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a  pr.x.pList is.**
18750 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e   valid..**.** An
18760 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
18770 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44  he form ID or ID
18780 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20  .ID refers to a 
18790 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c  column in a tabl
187a0 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65  e..** For such e
187b0 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72  xpressions, Expr
187c0 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b  .op is set to TK
187d0 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72  _COLUMN and Expr
187e0 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  .iTable is.** th
187f0 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72  e integer cursor
18800 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42   number of a VDB
18810 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  E cursor pointin
18820 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20  g to that table 
18830 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c  and.** Expr.iCol
18840 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d  umn is the colum
18850 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  n number for the
18860 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e   specific column
18870 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70  .  If the.** exp
18880 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20  ression is used 
18890 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61  as a result in a
188a0 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45  n aggregate SELE
188b0 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  CT, then the.** 
188c0 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74  value is also st
188d0 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72  ored in the Expr
188e0 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20  .iAgg column in 
188f0 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f  the aggregate so
18900 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20   that.** it can 
18910 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65  be accessed afte
18920 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73  r all aggregates
18930 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a   are computed..*
18940 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
18950 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62  ession is an unb
18960 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61  ound variable ma
18970 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e  rker (a question
18980 20 6d 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74   mark.** charact
18990 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72  er '?' in the or
189a0 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e  iginal SQL) then
189b0 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65   the Expr.iTable
189c0 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78   holds the index
189d0 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  .** number for t
189e0 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  hat variable..**
189f0 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
18a00 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75  ssion is a subqu
18a10 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43  ery then Expr.iC
18a20 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69  olumn holds an i
18a30 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74  nteger.** regist
18a40 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69  er number contai
18a50 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20  ning the result 
18a60 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  of the subquery.
18a70 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71    If the.** subq
18a80 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e  uery gives a con
18a90 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68  stant result, th
18aa0 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e  en iTable is -1.
18ab0 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72    If the subquer
18ac0 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66  y.** gives a dif
18ad0 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74  ferent answer at
18ae0 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73   different times
18af0 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e   during statemen
18b00 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20  t processing.** 
18b10 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74  then iTable is t
18b20 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
18b30 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20  subroutine that 
18b40 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62  computes the sub
18b50 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  query..**.** If 
18b60 74 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74  the Expr is of t
18b70 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61  ype OP_Column, a
18b80 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20  nd the table it 
18b90 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f  is selecting fro
18ba0 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74  m.** is a disk t
18bb0 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64  able or the "old
18bc0 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  .*" pseudo-table
18bd0 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e  , then pTab poin
18be0 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72  ts to the.** cor
18bf0 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65  responding table
18c00 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a   definition..**.
18c10 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f  ** ALLOCATION NO
18c20 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20  TES:.**.** Expr 
18c30 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20  objects can use 
18c40 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20  a lot of memory 
18c50 73 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73  space in databas
18c60 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a  e schema.  To.**
18c70 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d   help reduce mem
18c80 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73  ory requirements
18c90 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45  , sometimes an E
18ca0 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20  xpr object will 
18cb0 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e  be.** truncated.
18cc0 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20    And to reduce 
18cd0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
18ce0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  mory allocations
18cf0 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74  , sometimes.** t
18d00 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20  wo or more Expr 
18d10 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20  objects will be 
18d20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67  stored in a sing
18d30 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
18d40 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65  tion,.** togethe
18d50 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b  r with Expr.zTok
18d60 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a  en strings..**.*
18d70 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
18d80 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e  ced and EP_Token
18d90 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73  Only flags are s
18da0 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78  et when.** an Ex
18db0 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75  pr object is tru
18dc0 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50  ncated.  When EP
18dd0 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c  _Reduced is set,
18de0 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65   then all.** the
18df0 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65   child Expr obje
18e00 63 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  cts in the Expr.
18e10 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70  pLeft and Expr.p
18e20 52 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a  Right subtrees.*
18e30 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  * are contained 
18e40 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
18e50 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
18e60 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65  n.  Note, howeve
18e70 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73  r, that.** the s
18e80 75 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e  ubtrees in Expr.
18e90 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e  x.pList or Expr.
18ea0 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c  x.pSelect are al
18eb0 77 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a  ways separately.
18ec0 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65  ** allocated, re
18ed0 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
18ee0 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65  her or not EP_Re
18ef0 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f  duced is set..*/
18f00 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20  .struct Expr {. 
18f10 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
18f20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61          /* Opera
18f30 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62  tion performed b
18f40 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20  y this node */. 
18f50 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
18f60 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
18f70 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63  ffinity of the c
18f80 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f  olumn or 0 if no
18f90 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  t a column */.  
18fa0 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u32 flags;      
18fb0 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
18fc0 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53  s flags.  EP_* S
18fd0 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e  ee below */.  un
18fe0 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  ion {.    char *
18ff0 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20  zToken;         
19000 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e   /* Token value.
19010 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64   Zero terminated
19020 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f   and dequoted */
19030 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b  .    int iValue;
19040 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
19050 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65  on-negative inte
19060 67 65 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f  ger value if EP_
19070 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20  IntValue */.  } 
19080 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  u;..  /* If the 
19090 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
190a0 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20  g is set in the 
190b0 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
190c0 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70   then no.  ** sp
190d0 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ace is allocated
190e0 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20   for the fields 
190f0 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74  below this point
19100 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a  . An attempt to.
19110 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d    ** access them
19120 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20   will result in 
19130 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61  a segfault or ma
19140 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a  lfunction..  ***
19150 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19160 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19170 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19180 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19190 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65  **/..  Expr *pLe
191a0 66 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ft;           /*
191b0 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f   Left subnode */
191c0 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b  .  Expr *pRight;
191d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67            /* Rig
191e0 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20  ht subnode */.  
191f0 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72  union {.    Expr
19200 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20  List *pList;    
19210 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49   /* op = IN, EXI
19220 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53  STS, SELECT, CAS
19230 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54  E, FUNCTION, BET
19240 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65  WEEN */.    Sele
19250 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
19260 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74   /* EP_xIsSelect
19270 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58   and op = IN, EX
19280 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a  ISTS, SELECT */.
19290 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20    } x;..  /* If 
192a0 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66  the EP_Reduced f
192b0 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
192c0 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
192d0 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
192e0 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
192f0 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
19300 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
19310 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
19320 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
19330 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
19340 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
19350 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a  malfunction..  *
19360 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19370 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19380 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19390 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
193a0 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54  ****/..#if SQLIT
193b0 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
193c0 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  >0.  int nHeight
193d0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48  ;           /* H
193e0 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72 65  eight of the tre
193f0 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69 73  e headed by this
19400 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a   node */.#endif.
19410 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
19420 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
19430 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75  OLUMN: cursor nu
19440 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f  mber of table ho
19450 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20  lding column.   
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19470 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49        ** TK_REGI
19480 53 54 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e  STER: register n
19490 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20  umber.          
194a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
194b0 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20  * TK_TRIGGER: 1 
194c0 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64  -> new, 0 -> old
194d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
194e0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f            ** EP_
194f0 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31  Unlikely:  13421
19500 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c  7728 times likel
19510 69 68 6f 6f 64 0a 20 20 20 20 20 20 20 20 20 20  ihood.          
19520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19530 2a 20 54 4b 5f 53 45 4c 45 43 54 3a 20 31 73 74  * TK_SELECT: 1st
19540 20 72 65 67 69 73 74 65 72 20 6f 66 20 72 65 73   register of res
19550 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20  ult vector */.  
19560 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20  ynVar iColumn;  
19570 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
19580 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  UMN: column inde
19590 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64  x.  -1 for rowid
195a0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
195b0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
195c0 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61  _VARIABLE: varia
195d0 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61  ble number (alwa
195e0 79 73 20 3e 3d 20 31 29 2e 0a 20 20 20 20 20 20  ys >= 1)..      
195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19600 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f     ** TK_SELECT_
19610 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f  COLUMN: column o
19620 66 20 74 68 65 20 72 65 73 75 6c 74 20 76 65 63  f the result vec
19630 74 6f 72 20 2a 2f 0a 20 20 69 31 36 20 69 41 67  tor */.  i16 iAg
19640 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
19650 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69  /* Which entry i
19660 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c  n pAggInfo->aCol
19670 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20  [] or ->aFunc[] 
19680 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a  */.  i16 iRightJ
19690 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49  oinTable;   /* I
196a0 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74  f EP_FromJoin, t
196b0 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f  he right table o
196c0 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20  f the join */.  
196d0 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20  u8 op2;         
196e0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47         /* TK_REG
196f0 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20  ISTER: original 
19700 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70  value of Expr.op
19710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19720 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
19730 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75  COLUMN: the valu
19740 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43  e of p5 for OP_C
19750 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20  olumn.          
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19770 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  * TK_AGG_FUNCTIO
19780 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68  N: nesting depth
19790 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70   */.  AggInfo *p
197a0 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20  AggInfo;     /* 
197b0 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43  Used by TK_AGG_C
197c0 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47  OLUMN and TK_AGG
197d0 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 75  _FUNCTION */.  u
197e0 6e 69 6f 6e 20 7b 0a 20 20 20 20 54 61 62 6c 65  nion {.    Table
197f0 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
19800 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
19810 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  Table containing
19820 20 63 6f 6c 75 6d 6e 2e 20 43 61 6e 20 62 65 20   column. Can be 
19830 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 20  NULL.           
19840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19850 2a 2a 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20  ** for a column 
19860 6f 66 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61  of an index on a
19870 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  n expression */.
19880 20 20 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e      Window *pWin
19890 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b  ;          /* TK
198a0 5f 46 55 4e 43 54 49 4f 4e 3a 20 57 69 6e 64 6f  _FUNCTION: Windo
198b0 77 20 64 65 66 69 6e 69 74 69 6f 6e 20 66 6f 72  w definition for
198c0 20 74 68 65 20 66 75 6e 63 20 2a 2f 0a 20 20 7d   the func */.  }
198d0 20 79 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   y;.};../*.** Th
198e0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
198f0 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  the meanings of 
19900 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72  bits in the Expr
19910 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
19920 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d  .#define EP_From
19930 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f  Join  0x000001 /
19940 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20  * Originates in 
19950 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20  ON/USING clause 
19960 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  of outer join */
19970 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20  .#define EP_Agg 
19980 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20 2f        0x000002 /
19990 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  * Contains one o
199a0 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
199b0 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64   functions */.#d
199c0 65 66 69 6e 65 20 45 50 5f 48 61 73 46 75 6e 63  efine EP_HasFunc
199d0 20 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20 43     0x000004 /* C
199e0 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
199f0 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66  ore functions of
19a00 20 61 6e 79 20 6b 69 6e 64 20 2a 2f 0a 23 64 65   any kind */.#de
19a10 66 69 6e 65 20 45 50 5f 46 69 78 65 64 43 6f 6c  fine EP_FixedCol
19a20 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20 54 4b    0x000008 /* TK
19a30 5f 43 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20 6b  _Column with a k
19a40 6e 6f 77 6e 20 66 69 78 65 64 20 76 61 6c 75 65  nown fixed value
19a50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
19a60 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31  istinct  0x00001
19a70 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66  0 /* Aggregate f
19a80 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53  unction with DIS
19a90 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f  TINCT keyword */
19aa0 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53  .#define EP_VarS
19ab0 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f  elect 0x000020 /
19ac0 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72  * pSelect is cor
19ad0 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e  related, not con
19ae0 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  stant */.#define
19af0 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78   EP_DblQuoted 0x
19b00 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e  000040 /* token.
19b10 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  z was originally
19b20 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65   in "..." */.#de
19b30 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e  fine EP_InfixFun
19b40 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72  c 0x000080 /* Tr
19b50 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20  ue for an infix 
19b60 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20  function: LIKE, 
19b70 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65  GLOB, etc */.#de
19b80 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20  fine EP_Collate 
19b90 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72    0x000100 /* Tr
19ba0 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
19bb0 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f  _COLLATE operato
19bc0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
19bd0 47 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32  Generic   0x0002
19be0 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c  00 /* Ignore COL
19bf0 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79  LATE or affinity
19c00 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f   on this tree */
19c10 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56  .#define EP_IntV
19c20 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f  alue  0x000400 /
19c30 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
19c40 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69  contained in u.i
19c50 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Value */.#define
19c60 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78   EP_xIsSelect 0x
19c70 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c  000800 /* x.pSel
19c80 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74  ect is valid (ot
19c90 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20  herwise x.pList 
19ca0 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  is) */.#define E
19cb0 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30  P_Skip      0x00
19cc0 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c  1000 /* COLLATE,
19cd0 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59   AS, or UNLIKELY
19ce0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52   */.#define EP_R
19cf0 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30  educed   0x00200
19d00 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74  0 /* Expr struct
19d10 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
19d20 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
19d30 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e  #define EP_Token
19d40 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a  Only 0x004000 /*
19d50 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
19d60 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
19d70 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
19d80 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20  efine EP_Static 
19d90 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48     0x008000 /* H
19da0 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f  eld in memory no
19db0 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  t obtained from 
19dc0 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66  malloc() */.#def
19dd0 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20  ine EP_MemToken 
19de0 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65   0x010000 /* Nee
19df0 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72  d to sqlite3DbFr
19e00 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  ee() Expr.zToken
19e10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e   */.#define EP_N
19e20 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30  oReduce  0x02000
19e30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52  0 /* Cannot EXPR
19e40 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20  DUP_REDUCE this 
19e50 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  Expr */.#define 
19e60 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30  EP_Unlikely  0x0
19e70 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c  40000 /* unlikel
19e80 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f  y() or likelihoo
19e90 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  d() function */.
19ea0 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74  #define EP_Const
19eb0 46 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a  Func 0x080000 /*
19ec0 20 41 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43   A SQLITE_FUNC_C
19ed0 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43  ONSTANT or _SLOC
19ee0 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  HNG function */.
19ef0 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65  #define EP_CanBe
19f00 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a  Null 0x100000 /*
19f10 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73   Can be null des
19f20 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  pite NOT NULL co
19f30 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
19f40 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79 20  ine EP_Subquery 
19f50 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65   0x200000 /* Tre
19f60 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
19f70 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20  SELECT operator 
19f80 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c  */.#define EP_Al
19f90 69 61 73 20 20 20 20 20 30 78 34 30 30 30 30 30  ias     0x400000
19fa0 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20   /* Is an alias 
19fb0 66 6f 72 20 61 20 72 65 73 75 6c 74 20 73 65 74  for a result set
19fc0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69   column */.#defi
19fd0 6e 65 20 45 50 5f 4c 65 61 66 20 20 20 20 20 20  ne EP_Leaf      
19fe0 30 78 38 30 30 30 30 30 20 2f 2a 20 45 78 70 72  0x800000 /* Expr
19ff0 2e 70 4c 65 66 74 2c 20 2e 70 52 69 67 68 74 2c  .pLeft, .pRight,
1a000 20 2e 75 2e 70 53 65 6c 65 63 74 20 61 6c 6c 20   .u.pSelect all 
1a010 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
1a020 45 50 5f 57 69 6e 46 75 6e 63 20 20 30 78 31 30  EP_WinFunc  0x10
1a030 30 30 30 30 30 20 2f 2a 20 54 4b 5f 46 55 4e 43  00000 /* TK_FUNC
1a040 54 49 4f 4e 20 77 69 74 68 20 45 78 70 72 2e 79  TION with Expr.y
1a050 2e 70 57 69 6e 20 73 65 74 20 2a 2f 0a 0a 2f 2a  .pWin set */../*
1a060 0a 2a 2a 20 54 68 65 20 45 50 5f 50 72 6f 70 61  .** The EP_Propa
1a070 67 61 74 65 20 6d 61 73 6b 20 69 73 20 61 20 73  gate mask is a s
1a080 65 74 20 6f 66 20 70 72 6f 70 65 72 74 69 65 73  et of properties
1a090 20 74 68 61 74 20 61 75 74 6f 6d 61 74 69 63 61   that automatica
1a0a0 6c 6c 79 20 70 72 6f 70 61 67 61 74 65 0a 2a 2a  lly propagate.**
1a0b0 20 75 70 77 61 72 64 73 20 69 6e 74 6f 20 70 61   upwards into pa
1a0c0 72 65 6e 74 20 6e 6f 64 65 73 2e 0a 2a 2f 0a 23  rent nodes..*/.#
1a0d0 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67  define EP_Propag
1a0e0 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c  ate (EP_Collate|
1a0f0 45 50 5f 53 75 62 71 75 65 72 79 7c 45 50 5f 48  EP_Subquery|EP_H
1a100 61 73 46 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 54  asFunc)../*.** T
1a110 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20  hese macros can 
1a120 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c  be used to test,
1a130 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62   set, or clear b
1a140 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78  its in the.** Ex
1a150 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
1a160 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  */.#define ExprH
1a170 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  asProperty(E,P) 
1a180 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73      (((E)->flags
1a190 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
1a1a0 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70  e ExprHasAllProp
1a1b0 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45 29  erty(E,P)  (((E)
1a1c0 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  ->flags&(P))==(P
1a1d0 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53  )).#define ExprS
1a1e0 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  etProperty(E,P) 
1a1f0 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d      (E)->flags|=
1a200 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  (P).#define Expr
1a210 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c  ClearProperty(E,
1a220 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26  P)   (E)->flags&
1a230 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78  =~(P)../* The Ex
1a240 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
1a250 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
1a260 20 66 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f   for Verificatio
1a270 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a  n, Validation,.*
1a280 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74  * and Accreditat
1a290 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f  ion only.  It wo
1a2a0 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74  rks like ExprSet
1a2b0 50 72 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e  Property() durin
1a2c0 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73  g VVA.** process
1a2d0 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f  es but is a no-o
1a2e0 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a  p for delivery..
1a2f0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1a300 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20  _DEBUG.# define 
1a310 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
1a320 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c  ty(E,P)  (E)->fl
1a330 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23  ags|=(P).#else.#
1a340 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
1a350 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a  VAProperty(E,P).
1a360 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
1a370 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
1a380 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
1a390 62 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62  bytes required b
1a3a0 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a  y a normal Expr.
1a3b0 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78  ** struct, an Ex
1a3c0 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
1a3d0 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
1a3e0 61 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66  ag set in Expr.f
1a3f0 6c 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45  lags.** and an E
1a400 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
1a410 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
1a420 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64   flag set..*/.#d
1a430 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53  efine EXPR_FULLS
1a440 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69  IZE           si
1a450 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20  zeof(Expr)      
1a460 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a       /* Full siz
1a470 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  e */.#define EXP
1a480 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20  R_REDUCEDSIZE   
1a490 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
1a4a0 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43  pr,iTable)  /* C
1a4b0 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a  ommon features *
1a4c0 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54  /.#define EXPR_T
1a4d0 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20  OKENONLYSIZE    
1a4e0 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
1a4f0 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65  pLeft)   /* Fewe
1a500 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f  r features */../
1a510 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65  *.** Flags passe
1a520 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  d to the sqlite3
1a530 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69  ExprDup() functi
1a540 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64  on. See the head
1a550 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62  er comment.** ab
1a560 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  ove sqlite3ExprD
1a570 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73  up() for details
1a580 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
1a590 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20  RDUP_REDUCE     
1a5a0 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55      0x0001  /* U
1a5b0 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65  sed reduced-size
1a5c0 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a   Expr nodes */..
1a5d0 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20  /*.** A list of 
1a5e0 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61  expressions.  Ea
1a5f0 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61  ch expression ma
1a600 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76  y optionally hav
1a610 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e  e a.** name.  An
1a620 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69   expr/name combi
1a630 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73  nation can be us
1a640 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
1a650 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74  ys, such.** as t
1a660 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72  he list of "expr
1a670 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20 66   AS ID" fields f
1a680 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45  ollowing a "SELE
1a690 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  CT" or in the.**
1a6a0 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65   list of "ID = e
1a6b0 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e  xpr" items in an
1a6c0 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74   UPDATE.  A list
1a6d0 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
1a6e0 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75  can.** also be u
1a6f0 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d  sed as the argum
1a700 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f  ent to a functio
1a710 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  n, in which case
1a720 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20   the a.zName.** 
1a730 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65  field is not use
1a740 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61  d..**.** By defa
1a750 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70  ult the Expr.zSp
1a760 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61  an field holds a
1a770 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20   human-readable 
1a780 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a  description of.*
1a790 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
1a7a0 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69 6e   that is used in
1a7b0 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20   the generation 
1a7c0 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  of error message
1a7d0 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20  s and.** column 
1a7e0 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73  labels.  In this
1a7f0 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61   case, Expr.zSpa
1a800 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74  n is typically t
1a810 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20  he text of a.** 
1a820 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f  column expressio
1a830 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20 69  n as it exists i
1a840 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  n a SELECT state
1a850 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20  ment.  However, 
1a860 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49  if.** the bSpanI
1a870 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65 74  sTab flag is set
1a880 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20  , then zSpan is 
1a890 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65  overloaded to me
1a8a0 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f  an the name.** o
1a8b0 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  f the result col
1a8c0 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a  umn in the form:
1a8d0 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e   DATABASE.TABLE.
1a8e0 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61  COLUMN.  This la
1a8f0 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75  ter.** form is u
1a900 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73  sed for name res
1a910 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73  olution with nes
1a920 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73  ted FROM clauses
1a930 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
1a940 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78  List {.  int nEx
1a950 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
1a960 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70  /* Number of exp
1a970 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20  ressions on the 
1a980 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74  list */.  struct
1a990 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b   ExprList_item {
1a9a0 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70   /* For each exp
1a9b0 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c  ression in the l
1a9c0 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ist */.    Expr 
1a9d0 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
1a9e0 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 20     /* The parse 
1a9f0 74 72 65 65 20 66 6f 72 20 74 68 69 73 20 65 78  tree for this ex
1aa00 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
1aa10 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
1aa20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
1aa30 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1aa40 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e   this expression
1aa50 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53   */.    char *zS
1aa60 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  pan;            
1aa70 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
1aa80 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
1aa90 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72  on */.    u8 sor
1aaa0 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
1aab0 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20    /* 1 for DESC 
1aac0 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a  or 0 for ASC */.
1aad0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e      unsigned don
1aae0 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41  e :1;       /* A
1aaf0 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74   flag to indicat
1ab00 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e  e when processin
1ab10 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f  g is finished */
1ab20 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53  .    unsigned bS
1ab30 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20  panIsTab :1; /* 
1ab40 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54  zSpan holds DB.T
1ab50 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20  ABLE.COLUMN */. 
1ab60 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73     unsigned reus
1ab70 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f  able :1;   /* Co
1ab80 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
1ab90 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f  n is reusable */
1aba0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53  .    unsigned bS
1abb0 6f 72 74 65 72 52 65 66 20 3a 31 3b 20 2f 2a 20  orterRef :1; /* 
1abc0 44 65 66 65 72 20 65 76 61 6c 75 61 74 69 6f 6e  Defer evaluation
1abd0 20 75 6e 74 69 6c 20 61 66 74 65 72 20 73 6f 72   until after sor
1abe0 74 69 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 69 6f  ting */.    unio
1abf0 6e 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74  n {.      struct
1ac00 20 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20 69   {.        u16 i
1ac10 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20  OrderByCol;     
1ac20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59   /* For ORDER BY
1ac30 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  , column number 
1ac40 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f  in result set */
1ac50 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 41 6c  .        u16 iAl
1ac60 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ias;           /
1ac70 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72  * Index into Par
1ac80 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20  se.aAlias[] for 
1ac90 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d  zName */.      }
1aca0 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43   x;.      int iC
1acb0 6f 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20 20  onstExprReg;    
1acc0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e    /* Register in
1acd0 20 77 68 69 63 68 20 45 78 70 72 20 76 61 6c 75   which Expr valu
1ace0 65 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20  e is cached */. 
1acf0 20 20 20 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d     } u;.  } a[1]
1ad00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ad10 20 20 20 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66     /* One slot f
1ad20 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69  or each expressi
1ad30 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a  on in the list *
1ad40 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
1ad50 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
1ad60 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f  structure can ho
1ad70 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74  ld a simple list
1ad80 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c   of identifiers,
1ad90 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20  .** such as the 
1ada0 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20  list "a,b,c" in 
1adb0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1adc0 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20  atements:.**.** 
1add0 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
1ade0 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53   t(a,b,c) VALUES
1adf0 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52   ...;.**      CR
1ae00 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f  EATE INDEX idx O
1ae10 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20  N t(a,b,c);.**  
1ae20 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
1ae30 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55  ER trig BEFORE U
1ae40 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63  PDATE ON t(a,b,c
1ae50 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65  ) ...;.**.** The
1ae60 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69   IdList.a.idx fi
1ae70 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
1ae80 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72   the IdList repr
1ae90 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20  esents the list 
1aea0 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d  of.** column nam
1aeb0 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  es after a table
1aec0 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45   name in an INSE
1aed0 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  RT statement.  I
1aee0 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
1aef0 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54  **.**     INSERT
1af00 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e   INTO t(a,b,c) .
1af10 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20  ...**.** If "a" 
1af20 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75  is the k-th colu
1af30 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c  mn of table "t",
1af40 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30   then IdList.a[0
1af50 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72  ].idx==k..*/.str
1af60 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73  uct IdList {.  s
1af70 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65  truct IdList_ite
1af80 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e  m {.    char *zN
1af90 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
1afa0 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66  e of the identif
1afb0 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ier */.    int i
1afc0 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
1afd0 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61  Index in some Ta
1afe0 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20  ble.aCol[] of a 
1aff0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61  column named zNa
1b000 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20  me */.  } *a;.  
1b010 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20  int nId;        
1b020 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64   /* Number of id
1b030 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65  entifiers on the
1b040 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
1b050 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
1b060 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
1b070 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
1b080 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
1b090 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
1b0a0 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
1b0b0 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
1b0c0 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
1b0d0 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
1b0e0 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
1b0f0 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
1b100 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
1b110 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
1b120 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
1b130 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
1b140 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
1b150 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
1b160 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
1b170 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
1b180 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
1b190 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
1b1a0 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
1b1b0 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
1b1c0 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
1b1d0 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
1b1e0 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
1b1f0 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
1b200 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
1b210 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
1b220 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
1b230 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
1b240 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
1b250 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
1b260 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
1b270 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
1b280 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
1b290 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
1b2a0 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
1b2b0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
1b2c0 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
1b2d0 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
1b2e0 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
1b2f0 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
1b300 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
1b310 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
1b320 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
1b330 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
1b340 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
1b350 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
1b360 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
1b370 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
1b380 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
1b390 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
1b3a0 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
1b3b0 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
1b3c0 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
1b3d0 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
1b3e0 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
1b3f0 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
1b400 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
1b410 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
1b420 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
1b430 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
1b440 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  SrcList {.  int 
1b450 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  nSrc;        /* 
1b460 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
1b470 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69   or subqueries i
1b480 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
1b490 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f  e */.  u32 nAllo
1b4a0 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
1b4b0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
1b4c0 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65  ocated in a[] be
1b4d0 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  low */.  struct 
1b4e0 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20  SrcList_item {. 
1b4f0 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65     Schema *pSche
1b500 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74  ma;  /* Schema t
1b510 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65  o which this ite
1b520 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20  m is fixed */.  
1b530 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73    char *zDatabas
1b540 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64  e;  /* Name of d
1b550 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
1b560 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
1b570 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
1b580 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
1b590 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  he table */.    
1b5a0 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20  char *zAlias;   
1b5b0 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72    /* The "B" par
1b5c0 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20  t of a "A AS B" 
1b5d0 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69  phrase.  zName i
1b5e0 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20  s the "A" */.   
1b5f0 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
1b600 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62     /* An SQL tab
1b610 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
1b620 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20   to zName */.   
1b630 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
1b640 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73  ;  /* A SELECT s
1b650 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e  tatement used in
1b660 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c   place of a tabl
1b670 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e  e name */.    in
1b680 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20  t addrFillSub;  
1b690 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75  /* Address of su
1b6a0 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69  broutine to mani
1b6b0 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20  fest a subquery 
1b6c0 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
1b6d0 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69  turn;    /* Regi
1b6e0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74  ster holding ret
1b6f0 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61  urn address of a
1b700 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20  ddrFillSub */.  
1b710 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b    int regResult;
1b720 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73      /* Registers
1b730 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73   holding results
1b740 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   of a co-routine
1b750 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b   */.    struct {
1b760 0a 20 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79  .      u8 jointy
1b770 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65  pe;      /* Type
1b780 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e   of join between
1b790 20 74 68 69 73 20 74 61 62 6c 65 20 61 6e 64 20   this table and 
1b7a0 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a  the previous */.
1b7b0 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e        unsigned n
1b7c0 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20  otIndexed :1;   
1b7d0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72   /* True if ther
1b7e0 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58  e is a NOT INDEX
1b7f0 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  ED clause */.   
1b800 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e     unsigned isIn
1b810 64 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a  dexedBy :1;   /*
1b820 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69   True if there i
1b830 73 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20  s an INDEXED BY 
1b840 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20  clause */.      
1b850 75 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46 75  unsigned isTabFu
1b860 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72  nc :1;     /* Tr
1b870 75 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75  ue if table-valu
1b880 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74  ed-function synt
1b890 61 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  ax */.      unsi
1b8a0 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65  gned isCorrelate
1b8b0 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  d :1;  /* True i
1b8c0 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63  f sub-query is c
1b8d0 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20  orrelated */.   
1b8e0 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43     unsigned viaC
1b8f0 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a  oroutine :1;  /*
1b900 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20   Implemented as 
1b910 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a  a co-routine */.
1b920 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
1b930 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20  sRecursive :1;  
1b940 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63   /* True for rec
1b950 75 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65  ursive reference
1b960 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20   in WITH */.    
1b970 7d 20 66 67 3b 0a 20 20 20 20 69 6e 74 20 69 43  } fg;.    int iC
1b980 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54  ursor;      /* T
1b990 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e  he VDBE cursor n
1b9a0 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63  umber used to ac
1b9b0 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20  cess this table 
1b9c0 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e  */.    Expr *pOn
1b9d0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
1b9e0 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  ON clause of a j
1b9f0 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73  oin */.    IdLis
1ba00 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20  t *pUsing;   /* 
1ba10 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65  The USING clause
1ba20 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
1ba30 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65    Bitmask colUse
1ba40 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c  d;  /* Bit N (1<
1ba50 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d  <N) set if colum
1ba60 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75  n N of pTab is u
1ba70 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e  sed */.    union
1ba80 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a   {.      char *z
1ba90 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f 2a  IndexedBy;    /*
1baa0 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d   Identifier from
1bab0 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49   "INDEXED BY <zI
1bac0 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f  ndex>" clause */
1bad0 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73 74 20  .      ExprList 
1bae0 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41  *pFuncArg;  /* A
1baf0 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c  rguments to tabl
1bb00 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f  e-valued-functio
1bb10 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20  n */.    } u1;. 
1bb20 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e 64     Index *pIBInd
1bb30 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73 74  ex;  /* Index st
1bb40 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f  ructure correspo
1bb50 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64  nding to u1.zInd
1bb60 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b  exedBy */.  } a[
1bb70 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  1];             
1bb80 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
1bb90 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65 72   each identifier
1bba0 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
1bbb0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74  };../*.** Permit
1bbc0 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68  ted values of th
1bbd0 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e  e SrcList.a.join
1bbe0 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64  type field.*/.#d
1bbf0 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20  efine JT_INNER  
1bc00 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20     0x0001    /* 
1bc10 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65  Any kind of inne
1bc20 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20  r or cross join 
1bc30 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52  */.#define JT_CR
1bc40 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20 20  OSS     0x0002  
1bc50 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73    /* Explicit us
1bc60 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b  e of the CROSS k
1bc70 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
1bc80 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30  e JT_NATURAL   0
1bc90 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65  x0004    /* True
1bca0 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22   for a "natural"
1bcb0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
1bcc0 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78   JT_LEFT      0x
1bcd0 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20  0008    /* Left 
1bce0 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
1bcf0 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20  efine JT_RIGHT  
1bd00 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20     0x0010    /* 
1bd10 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e  Right outer join
1bd20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f   */.#define JT_O
1bd30 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30 20  UTER     0x0020 
1bd40 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52     /* The "OUTER
1bd50 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65  " keyword is pre
1bd60 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sent */.#define 
1bd70 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30  JT_ERROR     0x0
1bd80 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77  040    /* unknow
1bd90 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64  n or unsupported
1bda0 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a   join type */...
1bdb0 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72  /*.** Flags appr
1bdc0 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20  opriate for the 
1bdd0 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d  wctrlFlags param
1bde0 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57  eter of sqlite3W
1bdf0 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61  hereBegin().** a
1be00 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f  nd the WhereInfo
1be10 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62  .wctrlFlags memb
1be20 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  er..**.** Value 
1be30 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66  constraints (enf
1be40 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74  orced via assert
1be50 28 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52  ()):.**     WHER
1be60 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20  E_USE_LIMIT  == 
1be70 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f  SF_FixedLimit.*/
1be80 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1be90 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20  RDERBY_NORMAL   
1bea0 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20  0x0000 /* No-op 
1beb0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1bec0 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20  _ORDERBY_MIN    
1bed0 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45    0x0001 /* ORDE
1bee0 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
1bef0 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a  for min() func *
1bf00 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1bf10 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20  ORDERBY_MAX     
1bf20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52   0x0002 /* ORDER
1bf30 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
1bf40 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f  or max() func */
1bf50 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1bf60 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20  NEPASS_DESIRED  
1bf70 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74  0x0004 /* Want t
1bf80 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50  o do one-pass UP
1bf90 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23  DATE/DELETE */.#
1bfa0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
1bfb0 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78  PASS_MULTIROW 0x
1bfc0 30 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20  0008 /* ONEPASS 
1bfd0 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69  is ok with multi
1bfe0 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66  ple rows */.#def
1bff0 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43  ine WHERE_DUPLIC
1c000 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 31  ATES_OK    0x001
1c010 30 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72  0 /* Ok to retur
1c020 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61  n a row more tha
1c030 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e  n once */.#defin
1c040 65 20 57 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c  e WHERE_OR_SUBCL
1c050 41 55 53 45 20 20 20 20 20 30 78 30 30 32 30 20  AUSE     0x0020 
1c060 2f 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 61 20  /* Processing a 
1c070 73 75 62 2d 57 48 45 52 45 20 61 73 20 70 61 72  sub-WHERE as par
1c080 74 20 6f 66 0a 20 20 20 20 20 20 20 20 20 20 20  t of.           
1c090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0a0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68             ** th
1c0b0 65 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f  e OR optimizatio
1c0c0 6e 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  n  */.#define WH
1c0d0 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20  ERE_GROUPBY     
1c0e0 20 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 70       0x0040 /* p
1c0f0 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c  OrderBy is reall
1c100 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a  y a GROUP BY */.
1c110 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1c120 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20 30  STINCTBY       0
1c130 78 30 30 38 30 20 2f 2a 20 70 4f 72 64 65 72 62  x0080 /* pOrderb
1c140 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49  y is really a DI
1c150 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f  STINCT clause */
1c160 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57  .#define WHERE_W
1c170 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20  ANT_DISTINCT    
1c180 30 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75  0x0100 /* All ou
1c190 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65  tput needs to be
1c1a0 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65   distinct */.#de
1c1b0 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42  fine WHERE_SORTB
1c1c0 59 47 52 4f 55 50 20 20 20 20 20 20 30 78 30 32  YGROUP      0x02
1c1d0 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71  00 /* Support sq
1c1e0 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
1c1f0 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ed() */.#define 
1c200 57 48 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45  WHERE_SEEK_TABLE
1c210 20 20 20 20 20 20 20 30 78 30 34 30 30 20 2f 2a         0x0400 /*
1c220 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65   Do not defer se
1c230 65 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c  eks on main tabl
1c240 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
1c250 52 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54  RE_ORDERBY_LIMIT
1c260 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 4f 52      0x0800 /* OR
1c270 44 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74  DERBY+LIMIT on t
1c280 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f  he inner loop */
1c290 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53  .#define WHERE_S
1c2a0 45 45 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20  EEK_UNIQ_TABLE  
1c2b0 30 78 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x1000 /* Do not
1c2c0 20 64 65 66 65 72 20 73 65 65 6b 73 20 69 66 20   defer seeks if 
1c2d0 75 6e 69 71 75 65 20 2a 2f 0a 20 20 20 20 20 20  unique */.      
1c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2f0 20 20 2f 2a 20 20 20 20 20 30 78 32 30 30 30 20    /*     0x2000 
1c300 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79     not currently
1c310 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
1c320 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54   WHERE_USE_LIMIT
1c330 20 20 20 20 20 20 20 20 30 78 34 30 30 30 20 2f          0x4000 /
1c340 2a 20 55 73 65 20 74 68 65 20 4c 49 4d 49 54 20  * Use the LIMIT 
1c350 69 6e 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65  in cost estimate
1c360 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  s */.           
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c380 20 20 20 20 30 78 38 30 30 30 20 20 20 20 6e 6f      0x8000    no
1c390 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64  t currently used
1c3a0 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20   */../* Allowed 
1c3b0 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
1c3c0 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  om sqlite3WhereI
1c3d0 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23  sDistinct().*/.#
1c3e0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1c3f0 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20  TINCT_NOOP      
1c400 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b  0  /* DISTINCT k
1c410 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20  eyword not used 
1c420 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c430 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45  _DISTINCT_UNIQUE
1c440 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70      1  /* No dup
1c450 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69  licates */.#defi
1c460 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1c470 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f  T_ORDERED   2  /
1c480 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73  * All duplicates
1c490 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f   are adjacent */
1c4a0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1c4b0 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45  ISTINCT_UNORDERE
1c4c0 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74  D 3  /* Duplicat
1c4d0 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64  es are scattered
1c4e0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d   */../*.** A Nam
1c4f0 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73  eContext defines
1c500 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68   a context in wh
1c510 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74  ich to resolve t
1c520 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a  able and column.
1c530 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63  ** names.  The c
1c540 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20  ontext consists 
1c550 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62  of a list of tab
1c560 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73  les (the pSrcLis
1c570 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20  t) field and.** 
1c580 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20  a list of named 
1c590 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69  expression (pELi
1c5a0 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20  st).  The named 
1c5b0 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
1c5c0 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20  may.** be NULL. 
1c5d0 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73   The pSrc corres
1c5e0 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f  ponds to the FRO
1c5f0 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
1c600 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68  LECT or.** to th
1c610 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  e table being op
1c620 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53  erated on by INS
1c630 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20  ERT, UPDATE, or 
1c640 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20  DELETE.  The.** 
1c650 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  pEList correspon
1c660 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74  ds to the result
1c670 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54   set of a SELECT
1c680 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72   and is NULL for
1c690 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d  .** other statem
1c6a0 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65  ents..**.** Name
1c6b0 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20  Contexts can be 
1c6c0 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65  nested.  When re
1c6d0 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74  solving names, t
1c6e0 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a  he inner-most.**
1c6f0 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72   context is sear
1c700 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20  ched first.  If 
1c710 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e  no match is foun
1c720 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65  d, the next oute
1c730 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  r.** context is 
1c740 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65  checked.  If the
1c750 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d  re is still no m
1c760 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63  atch, the next c
1c770 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65  ontext.** is che
1c780 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63  cked.  This proc
1c790 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e  ess continues un
1c7a0 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74  til either a mat
1c7b0 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f  ch is found.** o
1c7c0 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61  r all contexts a
1c7d0 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20  re check.  When 
1c7e0 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
1c7f0 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65  , the nRef membe
1c800 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  r of.** the cont
1c810 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ext containing t
1c820 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72  he match is incr
1c830 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45  emented..**.** E
1c840 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74  ach subquery get
1c850 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74  s a new NameCont
1c860 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20  ext.  The pNext 
1c870 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20  field points to 
1c880 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
1c890 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  xt in the parent
1c8a0 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68   query.  Thus th
1c8b0 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61  e process of sca
1c8c0 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d  nning the.** Nam
1c8d0 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f  eContext list co
1c8e0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61  rresponds to sea
1c8f0 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73  rching through s
1c900 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65  uccessively oute
1c910 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20  r.** subqueries 
1c920 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61  looking for a ma
1c930 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e  tch..*/.struct N
1c940 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50  ameContext {.  P
1c950 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
1c960 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65      /* The parse
1c970 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  r */.  SrcList *
1c980 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f  pSrcList;   /* O
1c990 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65  ne or more table
1c9a0 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76  s used to resolv
1c9b0 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 6e 69  e names */.  uni
1c9c0 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73  on {.    ExprLis
1c9d0 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a  t *pEList;    /*
1c9e0 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f   Optional list o
1c9f0 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c  f result-set col
1ca00 75 6d 6e 73 20 2a 2f 0a 20 20 20 20 41 67 67 49  umns */.    AggI
1ca10 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
1ca20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
1ca30 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65 73  about aggregates
1ca40 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a   at this level *
1ca50 2f 0a 20 20 20 20 55 70 73 65 72 74 20 2a 70 55  /.    Upsert *pU
1ca60 70 73 65 72 74 3b 20 20 20 20 20 2f 2a 20 4f 4e  psert;     /* ON
1ca70 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
1ca80 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
1ca90 6d 20 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 20  m an upsert */. 
1caa0 20 7d 20 75 4e 43 3b 0a 20 20 4e 61 6d 65 43 6f   } uNC;.  NameCo
1cab0 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f  ntext *pNext;  /
1cac0 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d  * Next outer nam
1cad0 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c  e context.  NULL
1cae0 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a   for outermost *
1caf0 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
1cb00 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1cb10 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f  er of names reso
1cb20 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e  lved by this con
1cb30 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  text */.  int nE
1cb40 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
1cb50 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
1cb60 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77  rs encountered w
1cb70 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e  hile resolving n
1cb80 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63  ames */.  u16 nc
1cb90 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f  Flags;         /
1cba0 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e  * Zero or more N
1cbb0 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  C_* flags define
1cbc0 64 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 53 65 6c  d below */.  Sel
1cbd0 65 63 74 20 2a 70 57 69 6e 53 65 6c 65 63 74 3b  ect *pWinSelect;
1cbe0 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74    /* SELECT stat
1cbf0 65 6d 65 6e 74 20 66 6f 72 20 61 6e 79 20 77 69  ement for any wi
1cc00 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a  ndow functions *
1cc10 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
1cc20 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
1cc30 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20  he NameContext, 
1cc40 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ncFlags field..*
1cc50 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
1cc60 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63  raints (all chec
1cc70 6b 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ked via assert()
1cc80 29 3a 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41  ):.**    NC_HasA
1cc90 67 67 20 20 20 20 3d 3d 20 53 46 5f 48 61 73 41  gg    == SF_HasA
1cca0 67 67 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d  gg.**    NC_MinM
1ccb0 61 78 41 67 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d  axAgg == SF_MinM
1ccc0 61 78 41 67 67 20 3d 3d 20 53 51 4c 49 54 45 5f  axAgg == SQLITE_
1ccd0 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a  FUNC_MINMAX.**.*
1cce0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c  /.#define NC_All
1ccf0 6f 77 41 67 67 20 20 30 78 30 30 30 31 20 20 2f  owAgg  0x0001  /
1cd00 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
1cd10 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65  tions are allowe
1cd20 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e  d here */.#defin
1cd30 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30  e NC_PartIdx   0
1cd40 78 30 30 30 32 20 20 2f 2a 20 54 72 75 65 20 69  x0002  /* True i
1cd50 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61  f resolving a pa
1cd60 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52  rtial index WHER
1cd70 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  E */.#define NC_
1cd80 49 73 43 68 65 63 6b 20 20 20 30 78 30 30 30 34  IsCheck   0x0004
1cd90 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
1cda0 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20  olving names in 
1cdb0 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  a CHECK constrai
1cdc0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  nt */.#define NC
1cdd0 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30  _InAggFunc 0x000
1cde0 38 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e  8  /* True if an
1cdf0 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74  alyzing argument
1ce00 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63  s to an agg func
1ce10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48   */.#define NC_H
1ce20 61 73 41 67 67 20 20 20 20 30 78 30 30 31 30 20  asAgg    0x0010 
1ce30 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
1ce40 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1ce50 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  ons seen */.#def
1ce60 69 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20 20  ine NC_IdxExpr  
1ce70 20 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75 65   0x0020  /* True
1ce80 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f   if resolving co
1ce90 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45 20  lumns of CREATE 
1cea0 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65  INDEX */.#define
1ceb0 20 4e 43 5f 56 61 72 53 65 6c 65 63 74 20 30 78   NC_VarSelect 0x
1cec0 30 30 34 30 20 20 2f 2a 20 41 20 63 6f 72 72 65  0040  /* A corre
1ced0 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20 68  lated subquery h
1cee0 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a  as been seen */.
1cef0 23 64 65 66 69 6e 65 20 4e 43 5f 55 45 4c 69 73  #define NC_UELis
1cf00 74 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20  t    0x0080  /* 
1cf10 54 72 75 65 20 69 66 20 75 4e 43 2e 70 45 4c 69  True if uNC.pELi
1cf20 73 74 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64  st is used */.#d
1cf30 65 66 69 6e 65 20 4e 43 5f 55 41 67 67 49 6e 66  efine NC_UAggInf
1cf40 6f 20 20 30 78 30 31 30 30 20 20 2f 2a 20 54 72  o  0x0100  /* Tr
1cf50 75 65 20 69 66 20 75 4e 43 2e 70 41 67 67 49 6e  ue if uNC.pAggIn
1cf60 66 6f 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64  fo is used */.#d
1cf70 65 66 69 6e 65 20 4e 43 5f 55 55 70 73 65 72 74  efine NC_UUpsert
1cf80 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20 54 72     0x0200  /* Tr
1cf90 75 65 20 69 66 20 75 4e 43 2e 70 55 70 73 65 72  ue if uNC.pUpser
1cfa0 74 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65  t is used */.#de
1cfb0 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67  fine NC_MinMaxAg
1cfc0 67 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e  g 0x1000  /* min
1cfd0 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65 73 20  /max aggregates 
1cfe0 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20  seen.  See note 
1cff0 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65  above */.#define
1d000 20 4e 43 5f 43 6f 6d 70 6c 65 78 20 20 20 30 78   NC_Complex   0x
1d010 32 30 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66  2000  /* True if
1d020 20 61 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 73   a function or s
1d030 75 62 71 75 65 72 79 20 73 65 65 6e 20 2a 2f 0a  ubquery seen */.
1d040 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77  #define NC_Allow
1d050 57 69 6e 20 20 30 78 34 30 30 30 20 20 2f 2a 20  Win  0x4000  /* 
1d060 57 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73  Window functions
1d070 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72   are allowed her
1d080 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  e */../*.** An i
1d090 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1d0a0 6f 6c 6c 6f 77 69 6e 67 20 6f 62 6a 65 63 74 20  ollowing object 
1d0b0 64 65 73 63 72 69 62 65 73 20 61 20 73 69 6e 67  describes a sing
1d0c0 6c 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 0a 2a  le ON CONFLICT.*
1d0d0 2a 20 63 6c 61 75 73 65 20 69 6e 20 61 6e 20 75  * clause in an u
1d0e0 70 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  psert..**.** The
1d0f0 20 70 55 70 73 65 72 74 54 61 72 67 65 74 20 66   pUpsertTarget f
1d100 69 65 6c 64 20 69 73 20 6f 6e 6c 79 20 73 65 74  ield is only set
1d110 20 69 66 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c   if the ON CONFL
1d120 49 43 54 20 63 6c 61 75 73 65 20 69 6e 63 6c 75  ICT clause inclu
1d130 64 65 73 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d  des.** conflict-
1d140 74 61 72 67 65 74 20 63 6c 61 75 73 65 2e 20 20  target clause.  
1d150 28 49 6e 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54  (In "ON CONFLICT
1d160 28 61 2c 62 29 22 20 74 68 65 20 22 28 61 2c 62  (a,b)" the "(a,b
1d170 29 22 20 69 73 20 74 68 65 0a 2a 2a 20 63 6f 6e  )" is the.** con
1d180 66 6c 69 63 74 2d 74 61 72 67 65 74 20 63 6c 61  flict-target cla
1d190 75 73 65 2e 29 20 20 54 68 65 20 70 55 70 73 65  use.)  The pUpse
1d1a0 72 74 54 61 72 67 65 74 57 68 65 72 65 20 69 73  rtTargetWhere is
1d1b0 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 0a 2a 2a   the optional.**
1d1c0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 75 73   WHERE clause us
1d1d0 65 64 20 74 6f 20 69 64 65 6e 74 69 66 79 20 70  ed to identify p
1d1e0 61 72 74 69 61 6c 20 75 6e 69 71 75 65 20 69 6e  artial unique in
1d1f0 64 65 78 65 73 2e 0a 2a 2a 0a 2a 2a 20 70 55 70  dexes..**.** pUp
1d200 73 65 72 74 53 65 74 20 69 73 20 74 68 65 20 6c  sertSet is the l
1d210 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 3d 65 78  ist of column=ex
1d220 70 72 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20  pr terms of the 
1d230 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
1d240 2e 20 0a 2a 2a 20 54 68 65 20 70 55 70 73 65 72  . .** The pUpser
1d250 74 53 65 74 20 66 69 65 6c 64 20 69 73 20 4e 55  tSet field is NU
1d260 4c 4c 20 66 6f 72 20 61 20 4f 4e 20 43 4f 4e 46  LL for a ON CONF
1d270 4c 49 43 54 20 44 4f 20 4e 4f 54 48 49 4e 47 2e  LICT DO NOTHING.
1d280 20 20 54 68 65 0a 2a 2a 20 70 55 70 73 65 72 74    The.** pUpsert
1d290 57 68 65 72 65 20 69 73 20 74 68 65 20 57 48 45  Where is the WHE
1d2a0 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 74 68  RE clause for th
1d2b0 65 20 55 50 44 41 54 45 20 61 6e 64 20 69 73 20  e UPDATE and is 
1d2c0 4e 55 4c 4c 20 69 66 20 74 68 65 0a 2a 2a 20 57  NULL if the.** W
1d2d0 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 6f  HERE clause is o
1d2e0 6d 69 74 74 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  mitted..*/.struc
1d2f0 74 20 55 70 73 65 72 74 20 7b 0a 20 20 45 78 70  t Upsert {.  Exp
1d300 72 4c 69 73 74 20 2a 70 55 70 73 65 72 74 54 61  rList *pUpsertTa
1d310 72 67 65 74 3b 20 20 2f 2a 20 4f 70 74 69 6f 6e  rget;  /* Option
1d320 61 6c 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f  al description o
1d330 66 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e  f conflicting in
1d340 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  dex */.  Expr *p
1d350 55 70 73 65 72 74 54 61 72 67 65 74 57 68 65 72  UpsertTargetWher
1d360 65 3b 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75  e; /* WHERE clau
1d370 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69  se for partial i
1d380 6e 64 65 78 20 74 61 72 67 65 74 73 20 2a 2f 0a  ndex targets */.
1d390 20 20 45 78 70 72 4c 69 73 74 20 2a 70 55 70 73    ExprList *pUps
1d3a0 65 72 74 53 65 74 3b 20 20 20 20 20 2f 2a 20 54  ertSet;     /* T
1d3b0 68 65 20 53 45 54 20 63 6c 61 75 73 65 20 66 72  he SET clause fr
1d3c0 6f 6d 20 61 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43  om an ON CONFLIC
1d3d0 54 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 45 78  T UPDATE */.  Ex
1d3e0 70 72 20 2a 70 55 70 73 65 72 74 57 68 65 72 65  pr *pUpsertWhere
1d3f0 3b 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45  ;       /* WHERE
1d400 20 63 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20   clause for the 
1d410 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50 44 41  ON CONFLICT UPDA
1d420 54 45 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 66  TE */.  /* The f
1d430 69 65 6c 64 73 20 61 62 6f 76 65 20 63 6f 6d 70  ields above comp
1d440 72 69 73 65 20 74 68 65 20 70 61 72 73 65 20 74  rise the parse t
1d450 72 65 65 20 66 6f 72 20 74 68 65 20 75 70 73 65  ree for the upse
1d460 72 74 20 63 6c 61 75 73 65 2e 0a 20 20 2a 2a 20  rt clause..  ** 
1d470 54 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  The fields below
1d480 20 61 72 65 20 75 73 65 64 20 74 6f 20 74 72 61   are used to tra
1d490 6e 73 66 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f  nsfer informatio
1d4a0 6e 20 66 72 6f 6d 20 74 68 65 20 49 4e 53 45 52  n from the INSER
1d4b0 54 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 69 6e  T.  ** processin
1d4c0 67 20 64 6f 77 6e 20 69 6e 74 6f 20 74 68 65 20  g down into the 
1d4d0 55 50 44 41 54 45 20 70 72 6f 63 65 73 73 69 6e  UPDATE processin
1d4e0 67 20 77 68 69 6c 65 20 67 65 6e 65 72 61 74 69  g while generati
1d4f0 6e 67 20 63 6f 64 65 2e 0a 20 20 2a 2a 20 55 70  ng code..  ** Up
1d500 73 65 72 74 20 6f 77 6e 73 20 74 68 65 20 6d 65  sert owns the me
1d510 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 65 64 20 61  mory allocated a
1d520 62 6f 76 65 2c 20 62 75 74 20 6e 6f 74 20 74 68  bove, but not th
1d530 65 20 6d 65 6d 6f 72 79 20 62 65 6c 6f 77 2e 20  e memory below. 
1d540 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 55 70 73  */.  Index *pUps
1d550 65 72 74 49 64 78 3b 20 20 20 20 20 20 20 20 2f  ertIdx;        /
1d560 2a 20 43 6f 6e 73 74 72 61 69 6e 74 20 74 68 61  * Constraint tha
1d570 74 20 70 55 70 73 65 72 74 54 61 72 67 65 74 20  t pUpsertTarget 
1d580 69 64 65 6e 74 69 66 69 65 73 20 2a 2f 0a 20 20  identifies */.  
1d590 53 72 63 4c 69 73 74 20 2a 70 55 70 73 65 72 74  SrcList *pUpsert
1d5a0 53 72 63 3b 20 20 20 20 20 20 2f 2a 20 54 61 62  Src;      /* Tab
1d5b0 6c 65 20 74 6f 20 62 65 20 75 70 64 61 74 65 64  le to be updated
1d5c0 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 44 61 74   */.  int regDat
1d5d0 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a;              
1d5e0 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65  /* First registe
1d5f0 72 20 68 6f 6c 64 69 6e 67 20 61 72 72 61 79 20  r holding array 
1d600 6f 66 20 56 41 4c 55 45 53 20 2a 2f 0a 20 20 69  of VALUES */.  i
1d610 6e 74 20 69 44 61 74 61 43 75 72 3b 20 20 20 20  nt iDataCur;    
1d620 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
1d630 78 20 6f 66 20 74 68 65 20 64 61 74 61 20 63 75  x of the data cu
1d640 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 69 49  rsor */.  int iI
1d650 64 78 43 75 72 3b 20 20 20 20 20 20 20 20 20 20  dxCur;          
1d660 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
1d670 74 68 65 20 66 69 72 73 74 20 69 6e 64 65 78 20  the first index 
1d680 63 75 72 73 6f 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  cursor */.};../*
1d690 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1d6a0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1d6b0 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
1d6c0 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74  ins all informat
1d6d0 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f  ion.** needed to
1d6e0 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66   generate code f
1d6f0 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45  or a single SELE
1d700 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
1d710 0a 2a 2a 20 53 65 65 20 74 68 65 20 68 65 61 64  .** See the head
1d720 65 72 20 63 6f 6d 6d 65 6e 74 20 6f 6e 20 74 68  er comment on th
1d730 65 20 63 6f 6d 70 75 74 65 4c 69 6d 69 74 52 65  e computeLimitRe
1d740 67 69 73 74 65 72 73 28 29 20 72 6f 75 74 69 6e  gisters() routin
1d750 65 20 66 6f 72 20 61 0a 2a 2a 20 64 65 74 61 69  e for a.** detai
1d760 6c 65 64 20 64 65 73 63 72 69 70 74 69 6f 6e 20  led description 
1d770 6f 66 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f  of the meaning o
1d780 66 20 74 68 65 20 69 4c 69 6d 69 74 20 61 6e 64  f the iLimit and
1d790 20 69 4f 66 66 73 65 74 20 66 69 65 6c 64 73 2e   iOffset fields.
1d7a0 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45  .**.** addrOpenE
1d7b0 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f  phm[] entries co
1d7c0 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73  ntain the addres
1d7d0 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65  s of OP_OpenEphe
1d7e0 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a  meral opcodes..*
1d7f0 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65  * These addresse
1d800 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64  s must be stored
1d810 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20   so that we can 
1d820 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c  go back and fill
1d830 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45   in.** the P4_KE
1d840 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72  YINFO and P2 par
1d850 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20  ameters later.  
1d860 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49  Neither the KeyI
1d870 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e  nfo nor.** the n
1d880 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1d890 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f   in P2 can be co
1d8a0 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61  mputed at the sa
1d8b0 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68  me time.** as th
1d8c0 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e  e OP_OpenEphm in
1d8d0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64  struction is cod
1d8e0 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a  ed because not.*
1d8f0 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61  * enough informa
1d900 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63  tion about the c
1d910 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73  ompound query is
1d920 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70   known at that p
1d930 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79  oint..** The Key
1d940 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
1d950 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d  nTran[0] and [1]
1d960 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
1d970 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a  ing sequences.**
1d980 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
1d990 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  set.  The KeyInf
1d9a0 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70  o for addrOpenEp
1d9b0 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63  hm[2] contains c
1d9c0 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75  ollating.** sequ
1d9d0 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52  ences for the OR
1d9e0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1d9f0 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  /.struct Select 
1da00 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  {.  ExprList *pE
1da10 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68  List;      /* Th
1da20 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
1da30 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f  result */.  u8 o
1da40 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1da50 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b     /* One of: TK
1da60 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b  _UNION TK_ALL TK
1da70 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58  _INTERSECT TK_EX
1da80 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  CEPT */.  LogEst
1da90 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20   nSelectRow;    
1daa0 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75   /* Estimated nu
1dab0 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72  mber of result r
1dac0 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c  ows */.  u32 sel
1dad0 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
1dae0 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20  /* Various SF_* 
1daf0 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  values */.  int 
1db00 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b  iLimit, iOffset;
1db10 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
1db20 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c  isters holding L
1db30 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f  IMIT & OFFSET co
1db40 75 6e 74 65 72 73 20 2a 2f 0a 20 20 75 33 32 20  unters */.  u32 
1db50 73 65 6c 49 64 3b 20 20 20 20 20 20 20 20 20 20  selId;          
1db60 20 20 20 2f 2a 20 55 6e 69 71 75 65 20 69 64 65     /* Unique ide
1db70 6e 74 69 66 69 65 72 20 6e 75 6d 62 65 72 20 66  ntifier number f
1db80 6f 72 20 74 68 69 73 20 53 45 4c 45 43 54 20 2a  or this SELECT *
1db90 2f 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e  /.  int addrOpen
1dba0 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50  Ephm[2];   /* OP
1dbb0 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64  _OpenEphem opcod
1dbc0 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68  es related to th
1dbd0 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53  is select */.  S
1dbe0 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20  rcList *pSrc;   
1dbf0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f        /* The FRO
1dc00 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  M clause */.  Ex
1dc10 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20  pr *pWhere;     
1dc20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52       /* The WHER
1dc30 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  E clause */.  Ex
1dc40 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79  prList *pGroupBy
1dc50 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55  ;    /* The GROU
1dc60 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  P BY clause */. 
1dc70 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20   Expr *pHaving; 
1dc80 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48          /* The H
1dc90 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a  AVING clause */.
1dca0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64    ExprList *pOrd
1dcb0 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20  erBy;    /* The 
1dcc0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
1dcd0 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72  */.  Select *pPr
1dce0 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50  ior;        /* P
1dcf0 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61  rior select in a
1dd00 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74   compound select
1dd10 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20   statement */.  
1dd20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20  Select *pNext;  
1dd30 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73         /* Next s
1dd40 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66  elect to the lef
1dd50 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
1dd60 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69  */.  Expr *pLimi
1dd70 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  t;          /* L
1dd80 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  IMIT expression.
1dd90 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20   NULL means not 
1dda0 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20  used. */.  With 
1ddb0 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
1ddc0 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65    /* WITH clause
1ddd0 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69   attached to thi
1dde0 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c  s select. Or NUL
1ddf0 4c 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  L. */.#ifndef SQ
1de00 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57  LITE_OMIT_WINDOW
1de10 46 55 4e 43 0a 20 20 57 69 6e 64 6f 77 20 2a 70  FUNC.  Window *p
1de20 57 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Win;          /*
1de30 20 4c 69 73 74 20 6f 66 20 77 69 6e 64 6f 77 20   List of window 
1de40 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 57  functions */.  W
1de50 69 6e 64 6f 77 20 2a 70 57 69 6e 44 65 66 6e 3b  indow *pWinDefn;
1de60 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
1de70 20 6e 61 6d 65 64 20 77 69 6e 64 6f 77 20 64 65   named window de
1de80 66 69 6e 69 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  finitions */.#en
1de90 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c  dif.};../*.** Al
1dea0 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
1deb0 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73   Select.selFlags
1dec0 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66  .  The "SF" pref
1ded0 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ix stands for.**
1dee0 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a   "Select Flag"..
1def0 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
1df00 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65  traints (all che
1df10 63 6b 65 64 20 76 69 61 20 61 73 73 65 72 74 28  cked via assert(
1df20 29 29 0a 2a 2a 20 20 20 20 20 53 46 5f 48 61 73  )).**     SF_Has
1df30 41 67 67 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61  Agg     == NC_Ha
1df40 73 41 67 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d  sAgg.**     SF_M
1df50 69 6e 4d 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f  inMaxAgg  == NC_
1df60 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 3d 3d  MinMaxAgg     ==
1df70 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
1df80 4d 41 58 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69  MAX.**     SF_Fi
1df90 78 65 64 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52  xedLimit == WHER
1dfa0 45 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23  E_USE_LIMIT.*/.#
1dfb0 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e  define SF_Distin
1dfc0 63 74 20 20 20 20 20 20 20 30 78 30 30 30 30 31  ct       0x00001
1dfd0 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75    /* Output shou
1dfe0 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a  ld be DISTINCT *
1dff0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c  /.#define SF_All
1e000 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30              0x00
1e010 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73  002  /* Includes
1e020 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64   the ALL keyword
1e030 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
1e040 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 30 78  esolved       0x
1e050 30 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74 69  00004  /* Identi
1e060 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20  fiers have been 
1e070 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66  resolved */.#def
1e080 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65  ine SF_Aggregate
1e090 20 20 20 20 20 20 30 78 30 30 30 30 38 20 20 2f        0x00008  /
1e0a0 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 20 66  * Contains agg f
1e0b0 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20 47 52  unctions or a GR
1e0c0 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e  OUP BY */.#defin
1e0d0 65 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20  e SF_HasAgg     
1e0e0 20 20 20 20 30 78 30 30 30 31 30 20 20 2f 2a 20      0x00010  /* 
1e0f0 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61  Contains aggrega
1e100 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
1e110 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45  #define SF_UsesE
1e120 70 68 65 6d 65 72 61 6c 20 20 30 78 30 30 30 32  phemeral  0x0002
1e130 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f  0  /* Uses the O
1e140 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63  penEphemeral opc
1e150 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ode */.#define S
1e160 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20 20  F_Expanded      
1e170 20 30 78 30 30 30 34 30 20 20 2f 2a 20 73 71 6c   0x00040  /* sql
1e180 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64  ite3SelectExpand
1e190 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69  () called on thi
1e1a0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
1e1b0 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20 30  HasTypeInfo    0
1e1c0 78 30 30 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20  x00080  /* FROM 
1e1d0 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65 20  subqueries have 
1e1e0 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a  Table metadata *
1e1f0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d  /.#define SF_Com
1e200 70 6f 75 6e 64 20 20 20 20 20 20 20 30 78 30 30  pound       0x00
1e210 31 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  100  /* Part of 
1e220 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  a compound query
1e230 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56   */.#define SF_V
1e240 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 30 78  alues         0x
1e250 30 30 32 30 30 20 20 2f 2a 20 53 79 6e 74 68 65  00200  /* Synthe
1e260 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45  sized from VALUE
1e270 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  S clause */.#def
1e280 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75  ine SF_MultiValu
1e290 65 20 20 20 20 20 30 78 30 30 34 30 30 20 20 2f  e     0x00400  /
1e2a0 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45 53 20  * Single VALUES 
1e2b0 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74 69 70  term with multip
1e2c0 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69  le rows */.#defi
1e2d0 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d  ne SF_NestedFrom
1e2e0 20 20 20 20 20 30 78 30 30 38 30 30 20 20 2f 2a       0x00800  /*
1e2f0 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e   Part of a paren
1e300 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c  thesized FROM cl
1e310 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1e320 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20  SF_MinMaxAgg    
1e330 20 20 30 78 30 31 30 30 30 20 20 2f 2a 20 41 67    0x01000  /* Ag
1e340 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69  gregate containi
1e350 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28  ng min() or max(
1e360 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ) */.#define SF_
1e370 52 65 63 75 72 73 69 76 65 20 20 20 20 20 20 30  Recursive      0
1e380 78 30 32 30 30 30 20 20 2f 2a 20 54 68 65 20 72  x02000  /* The r
1e390 65 63 75 72 73 69 76 65 20 70 61 72 74 20 6f 66  ecursive part of
1e3a0 20 61 20 72 65 63 75 72 73 69 76 65 20 43 54 45   a recursive CTE
1e3b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 46   */.#define SF_F
1e3c0 69 78 65 64 4c 69 6d 69 74 20 20 20 20 20 30 78  ixedLimit     0x
1e3d0 30 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63  04000  /* nSelec
1e3e0 74 52 6f 77 20 73 65 74 20 62 79 20 61 20 63 6f  tRow set by a co
1e3f0 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a  nstant LIMIT */.
1e400 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65  #define SF_Maybe
1e410 43 6f 6e 76 65 72 74 20 20 20 30 78 30 38 30 30  Convert   0x0800
1e420 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65  0  /* Need conve
1e430 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
1e440 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
1e450 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65  #define SF_Conve
1e460 72 74 65 64 20 20 20 20 20 20 30 78 31 30 30 30  rted      0x1000
1e470 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74  0  /* By convert
1e480 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
1e490 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64  Subquery() */.#d
1e4a0 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65  efine SF_Include
1e4b0 48 69 64 64 65 6e 20 20 30 78 32 30 30 30 30 20  Hidden  0x20000 
1e4c0 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69 64 64   /* Include hidd
1e4d0 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75  en columns in ou
1e4e0 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tput */.#define 
1e4f0 53 46 5f 43 6f 6d 70 6c 65 78 52 65 73 75 6c 74  SF_ComplexResult
1e500 20 20 30 78 34 30 30 30 30 20 20 2f 2a 20 52 65    0x40000  /* Re
1e510 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20 73 75  sult contains su
1e520 62 71 75 65 72 79 20 6f 72 20 66 75 6e 63 74 69  bquery or functi
1e530 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  on */../*.** The
1e540 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45   results of a SE
1e550 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74  LECT can be dist
1e560 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72  ributed in sever
1e570 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69  al ways, as defi
1e580 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66  ned.** by one of
1e590 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
1e5a0 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54  acros.  The "SRT
1e5b0 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22  " prefix means "
1e5c0 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a  SELECT Result.**
1e5d0 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Type"..**.**   
1e5e0 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20    SRT_Union     
1e5f0 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1e600 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65  as a key in a te
1e610 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a  mporary index.**
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e630 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 64 20       identified 
1e640 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  by pDest->iSDPar
1e650 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
1e660 5f 45 78 63 65 70 74 20 20 20 20 20 20 52 65 6d  _Except      Rem
1e670 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  ove results from
1e680 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69   the temporary i
1e690 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50  ndex pDest->iSDP
1e6a0 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  arm..**.**     S
1e6b0 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 53  RT_Exists      S
1e6c0 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f  tore a 1 in memo
1e6d0 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69  ry cell pDest->i
1e6e0 53 44 50 61 72 6d 20 69 66 20 74 68 65 20 72 65  SDParm if the re
1e6f0 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  sult.**         
1e700 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1e710 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a  is not empty..**
1e720 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63  .**     SRT_Disc
1e730 61 72 64 20 20 20 20 20 54 68 72 6f 77 20 74 68  ard     Throw th
1e740 65 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20  e results away. 
1e750 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
1e760 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20   SELECT.**      
1e770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1e780 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
1e790 20 74 72 69 67 67 65 72 73 20 77 68 6f 73 65 20   triggers whose 
1e7a0 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a  only purpose is.
1e7b0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e7c0 20 20 20 20 20 20 20 74 68 65 20 73 69 64 65 2d         the side-
1e7d0 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74  effects of funct
1e7e0 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  ions..**.** All 
1e7f0 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65  of the above are
1e800 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20   free to ignore 
1e810 74 68 65 69 72 20 4f 52 44 45 52 20 42 59 20 63  their ORDER BY c
1e820 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61  lause. Those tha
1e830 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74  t.** follow must
1e840 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52   honor the ORDER
1e850 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a   BY clause..**.*
1e860 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74  *     SRT_Output
1e870 20 20 20 20 20 20 47 65 6e 65 72 61 74 65 20 61        Generate a
1e880 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28   row of output (
1e890 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73  using the OP_Res
1e8a0 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20  ultRow.**       
1e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70                op
1e8c0 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20 72  code) for each r
1e8d0 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ow in the result
1e8e0 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20   set..**.**     
1e8f0 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
1e900 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68  Only valid if th
1e910 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 73 69  e result is a si
1e920 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20  ngle column..** 
1e930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e940 20 20 20 20 53 74 6f 72 65 20 74 68 65 20 66 69      Store the fi
1e950 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  rst column of th
1e960 65 20 66 69 72 73 74 20 72 65 73 75 6c 74 20 72  e first result r
1e970 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ow.**           
1e980 20 20 20 20 20 20 20 20 20 20 69 6e 20 72 65 67            in reg
1e990 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
1e9a0 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f  Parm then abando
1e9b0 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20  n the rest.**   
1e9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9d0 20 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20    of the query. 
1e9e0 20 54 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f   This destinatio
1e9f0 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54  n implies "LIMIT
1ea00 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53   1"..**.**     S
1ea10 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 54  RT_Set         T
1ea20 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62  he result must b
1ea30 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  e a single colum
1ea40 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a  n.  Store each.*
1ea50 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1ea60 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73        row of res
1ea70 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20 69  ult as the key i
1ea80 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  n table pDest->i
1ea90 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20  SDParm..**      
1eaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
1eab0 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74  pply the affinit
1eac0 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74  y pDest->affSdst
1ead0 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a   before storing.
1eae0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1eaf0 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20         results. 
1eb00 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   Used to impleme
1eb10 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e  nt "IN (SELECT .
1eb20 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ..)"..**.**     
1eb30 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
1eb40 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72  Create an tempor
1eb50 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1eb60 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f  >iSDParm and sto
1eb70 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
1eb80 20 20 20 20 20 20 20 20 20 20 74 68 65 20 72 65            the re
1eb90 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20  sult there. The 
1eba0 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f  cursor is left o
1ebb0 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20  pen after.**    
1ebc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebd0 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69   returning.  Thi
1ebe0 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61  s is like SRT_Ta
1ebf0 62 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 0a  ble except that.
1ec00 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ec10 20 20 20 20 20 20 20 74 68 69 73 20 64 65 73 74         this dest
1ec20 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f  ination uses OP_
1ec30 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f  OpenEphemeral to
1ec40 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20   create.**      
1ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ec60 68 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a  he table first..
1ec70 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f  **.**     SRT_Co
1ec80 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61  routine   Genera
1ec90 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  te a co-routine 
1eca0 74 68 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e  that returns a n
1ecb0 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20  ew row of.**    
1ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecd0 20 72 65 73 75 6c 74 73 20 65 61 63 68 20 74 69   results each ti
1ece0 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64  me it is invoked
1ecf0 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69  .  The entry poi
1ed00 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  nt.**           
1ed10 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65            of the
1ed20 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73   co-routine is s
1ed30 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
1ed40 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  r pDest->iSDParm
1ed50 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ed60 20 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20          and the 
1ed70 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74  result row is st
1ed80 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e  ored in pDest->n
1ed90 44 65 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a  Dest registers.*
1eda0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1edb0 20 20 20 20 20 20 73 74 61 72 74 69 6e 67 20 77        starting w
1edc0 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74  ith pDest->iSdst
1edd0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1ede0 54 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72  Table       Stor
1edf0 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d  e results in tem
1ee00 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1ee10 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1ee20 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20      SRT_Fifo    
1ee30 20 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65      This is like
1ee40 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78   SRT_EphemTab ex
1ee50 63 65 70 74 20 74 68 61 74 20 74 68 65 20 74 61  cept that the ta
1ee60 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ble.**          
1ee70 20 20 20 20 20 20 20 20 20 20 20 69 73 20 61 73             is as
1ee80 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79  sumed to already
1ee90 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46   be open.  SRT_F
1eea0 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20  ifo has.**      
1eeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1eec0 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72  he additional pr
1eed0 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20  operty of being 
1eee0 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a  able to ignore.*
1eef0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1ef00 20 20 20 20 20 20 74 68 65 20 4f 52 44 45 52 20        the ORDER 
1ef10 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a  BY clause..**.**
1ef20 20 20 20 20 20 53 52 54 5f 44 69 73 74 46 69 66       SRT_DistFif
1ef30 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c  o    Store resul
1ef40 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72  ts in a temporar
1ef50 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1ef60 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20  SDParm..**      
1ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1ef80 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70  ut also use temp
1ef90 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1efa0 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a  t->iSDParm+1 as.
1efb0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1efc0 20 20 20 20 20 20 20 61 20 72 65 63 6f 72 64 20         a record 
1efd0 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73  of all prior res
1efe0 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20  ults and ignore 
1eff0 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a  any duplicate.**
1f000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f010 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65       rows.  Name
1f020 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e   means:  "Distin
1f030 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20  ct Fifo"..**.** 
1f040 20 20 20 20 53 52 54 5f 51 75 65 75 65 20 20 20      SRT_Queue   
1f050 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1f060 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75  s in priority qu
1f070 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  eue pDest->iSDPa
1f080 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20  rm (really.**   
1f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0a0 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70    an index).  Ap
1f0b0 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20  pend a sequence 
1f0c0 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61  number so that a
1f0d0 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20  ll entries.**   
1f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0f0 20 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a    are distinct..
1f100 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
1f110 73 74 51 75 65 75 65 20 20 20 53 74 6f 72 65 20  stQueue   Store 
1f120 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72  results in prior
1f130 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d  ity queue pDest-
1f140 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66  >iSDParm only if
1f150 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f160 20 20 20 20 20 20 20 20 74 68 65 20 73 61 6d 65          the same
1f170 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65   record has neve
1f180 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65  r been stored be
1f190 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20  fore.  The.**   
1f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1b0 20 20 69 6e 64 65 78 20 61 74 20 70 44 65 73 74    index at pDest
1f1c0 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64  ->iSDParm+1 hold
1f1d0 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65   all prior store
1f1e0 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  s..*/.#define SR
1f1f0 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31  T_Union        1
1f200 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1f210 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  t as keys in an 
1f220 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1f230 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
1f240 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72    2  /* Remove r
1f250 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49  esult from a UNI
1f260 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ON index */.#def
1f270 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20  ine SRT_Exists  
1f280 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65       3  /* Store
1f290 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74   1 if the result
1f2a0 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f   is not empty */
1f2b0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1f2c0 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20  card      4  /* 
1f2d0 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20  Do not save the 
1f2e0 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65  results anywhere
1f2f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1f300 46 69 66 6f 20 20 20 20 20 20 20 20 20 35 20 20  Fifo         5  
1f310 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1f320 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20  as data with an 
1f330 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20  automatic rowid 
1f340 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
1f350 69 73 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f  istFifo     6  /
1f360 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c  * Like SRT_Fifo,
1f370 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75   but unique resu
1f380 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  lts only */.#def
1f390 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20 20  ine SRT_Queue   
1f3a0 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65       7  /* Store
1f3b0 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75   result in an qu
1f3c0 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  eue */.#define S
1f3d0 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 20  RT_DistQueue    
1f3e0 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51  8  /* Like SRT_Q
1f3f0 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65  ueue, but unique
1f400 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
1f410 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42  ../* The ORDER B
1f420 59 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f  Y clause is igno
1f430 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74  red for all of t
1f440 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66  he above */.#def
1f450 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64  ine IgnorableOrd
1f460 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65  erby(X) ((X->eDe
1f470 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65  st)<=SRT_DistQue
1f480 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54  ue)..#define SRT
1f490 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 39 20  _Output       9 
1f4a0 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20   /* Output each 
1f4b0 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
1f4c0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d  .#define SRT_Mem
1f4d0 20 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20           10  /* 
1f4e0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
1f4f0 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f  a memory cell */
1f500 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74  .#define SRT_Set
1f510 20 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20           11  /* 
1f520 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
1f530 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
1f540 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
1f550 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31 32 20  _EphemTab    12 
1f560 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73   /* Create trans
1f570 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f  ient tab and sto
1f580 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  re like SRT_Tabl
1f590 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
1f5a0 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20  _Coroutine   13 
1f5b0 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73   /* Generate a s
1f5c0 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73  ingle row of res
1f5d0 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ult */.#define S
1f5e0 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31  RT_Table       1
1f5f0 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  4  /* Store resu
1f600 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
1f610 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
1f620 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  id */../*.** An 
1f630 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
1f640 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65   object describe
1f650 73 20 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f  s where to put o
1f660 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  f the results of
1f670 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61  .** a SELECT sta
1f680 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  tement..*/.struc
1f690 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20  t SelectDest {. 
1f6a0 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20   u8 eDest;      
1f6b0 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20        /* How to 
1f6c0 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72  dispose of the r
1f6d0 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53  esults.  On of S
1f6e0 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20  RT_* above. */. 
1f6f0 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20   int iSDParm;   
1f700 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d        /* A param
1f710 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68 65  eter used by the
1f720 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20   eDest disposal 
1f730 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20  method */.  int 
1f740 69 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20  iSdst;          
1f750 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
1f760 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73 20  r where results 
1f770 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20  are written */. 
1f780 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20   int nSdst;     
1f790 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f7a0 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
1f7b0 6f 63 61 74 65 64 20 2a 2f 0a 20 20 63 68 61 72  ocated */.  char
1f7c0 20 2a 7a 41 66 66 53 64 73 74 3b 20 20 20 20 20   *zAffSdst;     
1f7d0 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65   /* Affinity use
1f7e0 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52  d when eDest==SR
1f7f0 54 5f 53 65 74 20 2a 2f 0a 20 20 45 78 70 72 4c  T_Set */.  ExprL
1f800 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
1f810 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66  /* Key columns f
1f820 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64  or SRT_Queue and
1f830 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a   SRT_DistQueue *
1f840 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69  /.};../*.** Duri
1f850 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69  ng code generati
1f860 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73  on of statements
1f870 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73   that do inserts
1f880 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d   into AUTOINCREM
1f890 45 4e 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74  ENT.** tables, t
1f8a0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66  he following inf
1f8b0 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61  ormation is atta
1f8c0 63 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c  ched to the Tabl
1f8d0 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a  e.u.autoInc.p.**
1f8e0 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68   pointer of each
1f8f0 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74   autoincrement t
1f900 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73  able to record s
1f910 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61  ome side informa
1f920 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65  tion that.** the
1f930 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20   code generator 
1f940 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20  needs.  We have 
1f950 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c  to keep per-tabl
1f960 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a  e autoincrement.
1f970 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ** information i
1f980 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61  n case inserts a
1f990 72 65 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74  re done within t
1f9a0 72 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65  riggers.  Trigge
1f9b0 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72  rs do not.** nor
1f9c0 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65  mally coordinate
1f9d0 20 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65   their activitie
1f9e0 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65  s, but we do nee
1f9f0 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20  d to coordinate 
1fa00 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61  the.** loading a
1fa10 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74  nd saving of aut
1fa20 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72  oincrement infor
1fa30 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
1fa40 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a  t AutoincInfo {.
1fa50 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70    AutoincInfo *p
1fa60 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20  Next;   /* Next 
1fa70 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20  info block in a 
1fa80 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c  list of them all
1fa90 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
1faa0 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  b;          /* T
1fab0 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62  able this info b
1fac0 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a  lock refers to *
1fad0 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
1fae0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1faf0 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44  ex in sqlite3.aD
1fb00 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20  b[] of database 
1fb10 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a  holding pTab */.
1fb20 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20    int regCtr;   
1fb30 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
1fb40 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69  y register holdi
1fb50 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75  ng the rowid cou
1fb60 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  nter */.};../*.*
1fb70 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69  * At least one i
1fb80 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1fb90 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1fba0 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  re is created fo
1fbb0 72 20 65 61 63 68 0a 2a 2a 20 74 72 69 67 67 65  r each.** trigge
1fbc0 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69  r that may be fi
1fbd0 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e  red while parsin
1fbe0 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44  g an INSERT, UPD
1fbf0 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a  ATE or DELETE.**
1fc00 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20   statement. All 
1fc10 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65  such objects are
1fc20 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c   stored in the l
1fc30 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
1fc40 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54  d at.** Parse.pT
1fc50 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65  riggerPrg and de
1fc60 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65  leted once state
1fc70 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  ment compilation
1fc80 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d   has been.** com
1fc90 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20  pleted..**.** A 
1fca0 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d  Vdbe sub-program
1fcb0 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73   that implements
1fcc0 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48   the body and WH
1fcd0 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69  EN clause of tri
1fce0 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50  gger.** TriggerP
1fcf0 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73  rg.pTrigger, ass
1fd00 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20  uming a default 
1fd10 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
1fd20 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72  se of.** Trigger
1fd30 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73  Prg.orconf, is s
1fd40 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69  tored in the Tri
1fd50 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d  ggerPrg.pProgram
1fd60 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68   variable..** Th
1fd70 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  e Parse.pTrigger
1fd80 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63  Prg list never c
1fd90 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72  ontains two entr
1fda0 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  ies with the sam
1fdb0 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20  e.** values for 
1fdc0 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e  both pTrigger an
1fdd0 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20  d orconf..**.** 
1fde0 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  The TriggerPrg.a
1fdf0 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61  Colmask[0] varia
1fe00 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20  ble is set to a 
1fe10 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  mask of old.* co
1fe20 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65  lumns.** accesse
1fe30 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66  d (or set to 0 f
1fe40 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65  or triggers fire
1fe50 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66  d as a result of
1fe60 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74 65   INSERT.** state
1fe70 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c  ments). Similarl
1fe80 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72  y, the TriggerPr
1fe90 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61  g.aColmask[1] va
1fea0 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
1feb0 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65  .** a mask of ne
1fec0 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64  w.* columns used
1fed0 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
1fee0 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67  .*/.struct Trigg
1fef0 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65  erPrg {.  Trigge
1ff00 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20  r *pTrigger;    
1ff10 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69    /* Trigger thi
1ff20 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f  s program was co
1ff30 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72  ded from */.  Tr
1ff40 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b  iggerPrg *pNext;
1ff50 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e        /* Next en
1ff60 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72  try in Parse.pTr
1ff70 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f  iggerPrg list */
1ff80 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
1ff90 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72  Program;   /* Pr
1ffa0 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69  ogram implementi
1ffb0 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f  ng pTrigger/orco
1ffc0 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f  nf */.  int orco
1ffd0 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nf;             
1ffe0 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
1fff0 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f  NFLICT policy */
20000 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b  .  u32 aColmask[
20010 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  2];        /* Ma
20020 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65  sks of old.*, ne
20030 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65  w.* columns acce
20040 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ssed */.};../*.*
20050 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61  * The yDbMask da
20060 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62  tatype for the b
20070 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74  itmask of all at
20080 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
20090 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
200a0 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
200b0 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
200c0 65 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b  ed char yDbMask[
200d0 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  (SQLITE_MAX_ATTA
200e0 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65  CHED+9)/8];.# de
200f0 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28  fine DbMaskTest(
20100 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49  M,I)    (((M)[(I
20110 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29  )/8]&(1<<((I)&7)
20120 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  ))!=0).# define 
20130 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20  DbMaskZero(M)   
20140 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c     memset((M),0,
20150 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66  sizeof(M)).# def
20160 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c  ine DbMaskSet(M,
20170 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38  I)     (M)[(I)/8
20180 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a  ]|=(1<<((I)&7)).
20190 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41  # define DbMaskA
201a0 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69  llZero(M)   sqli
201b0 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
201c0 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  (M).# define DbM
201d0 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
201e0 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c  (sqlite3DbMaskAl
201f0 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c  lZero(M)==0).#el
20200 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73  se.  typedef uns
20210 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73  igned int yDbMas
20220 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  k;.# define DbMa
20230 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
20240 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29  ((M)&(((yDbMask)
20250 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20  1)<<(I)))!=0).# 
20260 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
20270 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a  o(M)      (M)=0.
20280 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53  # define DbMaskS
20290 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c  et(M,I)     (M)|
202a0 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  =(((yDbMask)1)<<
202b0 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  (I)).# define Db
202c0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20  MaskAllZero(M)  
202d0 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65   (M)==0.# define
202e0 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d   DbMaskNonZero(M
202f0 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69  )   (M)!=0.#endi
20300 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20  f../*.** An SQL 
20310 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  parser context. 
20320 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20   A copy of this 
20330 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
20340 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  sed through.** t
20350 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f  he parser and do
20360 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20  wn into all the 
20370 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f  parser action ro
20380 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74  utine in order t
20390 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e  o.** carry aroun
203a0 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  d information th
203b0 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20  at is global to 
203c0 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65  the entire parse
203d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75  ..**.** The stru
203e0 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64  cture is divided
203f0 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e   into two parts.
20400 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65    When the parse
20410 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65  r and code.** ge
20420 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d  nerate call them
20430 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65  selves recursive
20440 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61  ly, the first pa
20450 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74  rt of the struct
20460 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61  ure.** is consta
20470 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e  nt but the secon
20480 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20  d part is reset 
20490 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
204a0 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65   and end of.** e
204b0 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a  ach recursion..*
204c0 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c  *.** The nTableL
204d0 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f  ock and aTableLo
204e0 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  ck variables are
204f0 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68   only used if th
20500 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 0a 2a  e shared-cache.*
20510 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61  * feature is ena
20520 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33  bled (if sqlite3
20530 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64  Tsd()->useShared
20540 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54  Data is true). T
20550 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  hey are.** used 
20560 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74  to store the set
20570 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20   of table-locks 
20580 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
20590 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a  statement being.
205a0 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e  ** compiled. Fun
205b0 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62  ction sqlite3Tab
205c0 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64  leLock() is used
205d0 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20   to add entries 
205e0 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a  to the.** list..
205f0 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20  */.struct Parse 
20600 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
20610 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
20620 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74  main database st
20630 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61  ructure */.  cha
20640 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20  r *zErrMsg;     
20650 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65    /* An error me
20660 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20  ssage */.  Vdbe 
20670 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
20680 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72  /* An engine for
20690 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62   executing datab
206a0 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a  ase bytecode */.
206b0 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
206c0 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e         /* Return
206d0 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75   code from execu
206e0 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c  tion */.  u8 col
206f0 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f  NamesSet;      /
20700 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f  * TRUE after OP_
20710 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62  ColumnName has b
20720 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56  een issued to pV
20730 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63  dbe */.  u8 chec
20740 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a  kSchema;      /*
20750 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63   Causes schema c
20760 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65  ookie check afte
20770 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20  r an error */.  
20780 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20  u8 nested;      
20790 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
207a0 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74  f nested calls t
207b0 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64  o the parser/cod
207c0 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20  e generator */. 
207d0 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20   u8 nTempReg;   
207e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
207f0 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  of temporary reg
20800 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52  isters in aTempR
20810 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d  eg[] */.  u8 isM
20820 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f  ultiWrite;     /
20830 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
20840 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69  ent may modify/i
20850 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72  nsert multiple r
20860 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41  ows */.  u8 mayA
20870 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  bort;         /*
20880 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
20890 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20  nt may throw an 
208a0 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20  ABORT exception 
208b0 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f  */.  u8 hasCompo
208c0 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65  und;      /* Nee
208d0 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76  d to invoke conv
208e0 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
208f0 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
20900 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63  .  u8 okConstFac
20910 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f  tor;    /* OK to
20920 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73   factor out cons
20930 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64 69  tants */.  u8 di
20940 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20  sableLookaside; 
20950 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d  /* Number of tim
20960 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73  es lookaside has
20970 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20 2a   been disabled *
20980 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65  /.  int nRangeRe
20990 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65  g;       /* Size
209a0 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72   of the temporar
209b0 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
209c0 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65   */.  int iRange
209d0 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  Reg;       /* Fi
209e0 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20  rst register in 
209f0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
20a00 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
20a10 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
20a20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20a30 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20  errors seen */. 
20a40 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20   int nTab;      
20a50 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20a60 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c  of previously al
20a70 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72  located VDBE cur
20a80 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  sors */.  int nM
20a90 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  em;            /
20aa0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
20ab0 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f  ry cells used so
20ac0 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f   far */.  int nO
20ad0 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  pAlloc;        /
20ae0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74  * Number of slot
20af0 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
20b00 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20  Vdbe.aOp[] */.  
20b10 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20  int szOpAlloc;  
20b20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66       /* Bytes of
20b30 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 61 6c   memory space al
20b40 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65  located for Vdbe
20b50 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  .aOp[] */.  int 
20b60 69 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20  iSelfTab;       
20b70 20 2f 2a 20 54 61 62 6c 65 20 61 73 73 6f 63 69   /* Table associ
20b80 61 74 65 64 20 77 69 74 68 20 61 6e 20 69 6e 64  ated with an ind
20b90 65 78 20 6f 6e 20 65 78 70 72 2c 20 6f 72 20 6e  ex on expr, or n
20ba0 65 67 61 74 69 76 65 0a 20 20 20 20 20 20 20 20  egative.        
20bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
20bc0 2a 20 6f 66 20 74 68 65 20 62 61 73 65 20 72 65  * of the base re
20bd0 67 69 73 74 65 72 20 64 75 72 69 6e 67 20 63 68  gister during ch
20be0 65 63 6b 2d 63 6f 6e 73 74 72 61 69 6e 74 20 65  eck-constraint e
20bf0 76 61 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61  val */.  int nLa
20c00 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  bel;          /*
20c10 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c   Number of label
20c20 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20  s used */.  int 
20c30 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20  *aLabel;        
20c40 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c   /* Space to hol
20c50 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a  d the labels */.
20c60 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e    ExprList *pCon
20c70 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61  stExpr;/* Consta
20c80 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  nt expressions *
20c90 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72  /.  Token constr
20ca0 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65  aintName;/* Name
20cb0 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69   of the constrai
20cc0 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  nt currently bei
20cd0 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79  ng parsed */.  y
20ce0 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b  DbMask writeMask
20cf0 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77  ;   /* Start a w
20d00 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
20d10 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61   on these databa
20d20 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b  ses */.  yDbMask
20d30 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a   cookieMask;  /*
20d40 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65   Bitmask of sche
20d50 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61  ma verified data
20d60 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72  bases */.  int r
20d70 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20  egRowid;        
20d80 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
20d90 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45  ing rowid of CRE
20da0 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20  ATE TABLE entry 
20db0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74  */.  int regRoot
20dc0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  ;         /* Reg
20dd0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
20de0 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  ot page number f
20df0 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a  or new objects *
20e00 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b  /.  int nMaxArg;
20e10 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20           /* Max 
20e20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f 20 75  args passed to u
20e30 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20  ser function by 
20e40 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  sub-program */. 
20e50 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20   int nSelect;   
20e60 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20e70 6f 66 20 53 45 4c 45 43 54 20 73 74 6d 74 73 2e  of SELECT stmts.
20e80 20 43 6f 75 6e 74 65 72 20 66 6f 72 20 53 65 6c   Counter for Sel
20e90 65 63 74 2e 73 65 6c 49 64 20 2a 2f 0a 23 69 66  ect.selId */.#if
20ea0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
20eb0 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
20ec0 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20  int nTableLock; 
20ed0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
20ee0 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61   of locks in aTa
20ef0 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62  bleLock */.  Tab
20f00 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f  leLock *aTableLo
20f10 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20  ck; /* Required 
20f20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20  table locks for 
20f30 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
20f40 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75  e */.#endif.  Au
20f50 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63  toincInfo *pAinc
20f60 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  ;  /* Informatio
20f70 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52  n about AUTOINCR
20f80 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a  EMENT counters *
20f90 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c  /.  Parse *pTopl
20fa0 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73  evel;    /* Pars
20fb0 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
20fc0 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72  main program (or
20fd0 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c   NULL) */.  Tabl
20fe0 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20  e *pTriggerTab; 
20ff0 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65   /* Table trigge
21000 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64  rs are being cod
21010 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20  ed for */.  int 
21020 61 64 64 72 43 72 54 61 62 3b 20 20 20 20 20 20  addrCrTab;      
21030 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f   /* Address of O
21040 50 5f 43 72 65 61 74 65 42 74 72 65 65 20 6f 70  P_CreateBtree op
21050 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54  code on CREATE T
21060 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51  ABLE */.  u32 nQ
21070 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f  ueryLoop;      /
21080 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20  * Est number of 
21090 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20  iterations of a 
210a0 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e  query (10*log2(N
210b0 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d  )) */.  u32 oldm
210c0 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
210d0 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  Mask of old.* co
210e0 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
210f0 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73   */.  u32 newmas
21100 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
21110 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
21120 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
21130 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f  /.  u8 eTriggerO
21140 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55  p;       /* TK_U
21150 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
21160 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f   or TK_DELETE */
21170 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20  .  u8 eOrconf;  
21180 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
21190 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
211a0 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65  olicy for trigge
211b0 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20  r steps */.  u8 
211c0 64 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b  disableTriggers;
211d0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73    /* True to dis
211e0 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
211f0 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  /***********
21200 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21210 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21220 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21230 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
21240 20 20 2a 2a 20 46 69 65 6c 64 73 20 61 62 6f 76    ** Fields abov
21250 65 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61  e must be initia
21260 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e 20 20  lized to zero.  
21270 54 68 65 20 66 69 65 6c 64 73 20 74 68 61 74 20  The fields that 
21280 66 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77  follow,.  ** dow
21290 6e 20 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69  n to the beginni
212a0 6e 67 20 6f 66 20 74 68 65 20 72 65 63 75 72 73  ng of the recurs
212b0 69 76 65 20 73 65 63 74 69 6f 6e 2c 20 64 6f 20  ive section, do 
212c0 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 0a 20  not need to be. 
212d0 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   ** initialized 
212e0 61 73 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20  as they will be 
212f0 73 65 74 20 62 65 66 6f 72 65 20 62 65 69 6e 67  set before being
21300 20 75 73 65 64 2e 20 20 54 68 65 20 62 6f 75 6e   used.  The boun
21310 64 61 72 79 20 69 73 0a 20 20 2a 2a 20 64 65 74  dary is.  ** det
21320 65 72 6d 69 6e 65 64 20 62 79 20 6f 66 66 73 65  ermined by offse
21330 74 6f 66 28 50 61 72 73 65 2c 61 54 65 6d 70 52  tof(Parse,aTempR
21340 65 67 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  eg)..  *********
21350 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21360 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21370 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21380 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21390 2a 2f 0a 0a 20 20 69 6e 74 20 61 54 65 6d 70 52  */..  int aTempR
213a0 65 67 5b 38 5d 3b 20 20 20 20 20 20 20 20 2f 2a  eg[8];        /*
213b0 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f   Holding area fo
213c0 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  r temporary regi
213d0 73 74 65 72 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  sters */.  Token
213e0 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20   sNameToken;    
213f0 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68     /* Token with
21400 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68   unqualified sch
21410 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20  ema object name 
21420 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  */..  /*********
21430 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21440 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21450 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21460 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
21470 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f    ** Above is co
21480 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72  nstant between r
21490 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f  ecursions.  Belo
214a0 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72  w is reset befor
214b0 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a  e and after.  **
214c0 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
214d0 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62    The boundary b
214e0 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f  etween these two
214f0 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65   regions is dete
21500 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e  rmined.  ** usin
21510 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  g offsetof(Parse
21520 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 73 6f 20  ,sLastToken) so 
21530 74 68 65 20 73 4c 61 73 74 54 6f 6b 65 6e 20 66  the sLastToken f
21540 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68 65  ield must be the
21550 0a 20 20 2a 2a 20 66 69 72 73 74 20 66 69 65 6c  .  ** first fiel
21560 64 20 69 6e 20 74 68 65 20 72 65 63 75 72 73 69  d in the recursi
21570 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a  ve region..  ***
21580 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21590 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
215a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
215b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
215c0 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20  *****/..  Token 
215d0 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20  sLastToken;     
215e0 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f    /* The last to
215f0 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  ken parsed */.  
21600 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20 20 20  ynVar nVar;     
21610 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
21620 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61  ber of '?' varia
21630 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65  bles seen in the
21640 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20   SQL so far */. 
21650 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65 72   u8 iPkSortOrder
21660 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 53  ;          /* AS
21670 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49 4e  C or DESC for IN
21680 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
21690 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69  Y */.  u8 explai
216a0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
216b0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
216c0 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20  EXPLAIN flag is 
216d0 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65  found on the que
216e0 72 79 20 2a 2f 0a 23 69 66 20 21 28 64 65 66 69  ry */.#if !(defi
216f0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
21700 56 49 52 54 55 41 4c 54 41 42 4c 45 29 20 26 26  VIRTUALTABLE) &&
21710 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
21720 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 29  OMIT_ALTERTABLE)
21730 29 0a 20 20 75 38 20 65 50 61 72 73 65 4d 6f 64  ).  u8 eParseMod
21740 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
21750 20 50 41 52 53 45 5f 4d 4f 44 45 5f 58 58 58 20   PARSE_MODE_XXX 
21760 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 65 6e 64  constant */.#end
21770 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
21780 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
21790 42 4c 45 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c  BLE.  int nVtabL
217a0 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ock;            
217b0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72  /* Number of vir
217c0 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c  tual tables to l
217d0 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ock */.#endif.  
217e0 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
217f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
21800 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69  ression tree hei
21810 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73  ght of current s
21820 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66  ub-select */.#if
21830 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
21840 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 61  _EXPLAIN.  int a
21850 64 64 72 45 78 70 6c 61 69 6e 3b 20 20 20 20 20  ddrExplain;     
21860 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20       /* Address 
21870 6f 66 20 63 75 72 72 65 6e 74 20 4f 50 5f 45 78  of current OP_Ex
21880 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 2a 2f 0a  plain opcode */.
21890 23 65 6e 64 69 66 0a 20 20 56 4c 69 73 74 20 2a  #endif.  VList *
218a0 70 56 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20  pVList;         
218b0 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 62 65     /* Mapping be
218c0 74 77 65 65 6e 20 76 61 72 69 61 62 6c 65 20 6e  tween variable n
218d0 61 6d 65 73 20 61 6e 64 20 6e 75 6d 62 65 72 73  ames and numbers
218e0 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70   */.  Vdbe *pRep
218f0 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20  repare;         
21900 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72  /* VM being repr
21910 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52  epared (sqlite3R
21920 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20  eprepare()) */. 
21930 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
21940 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  il;        /* Al
21950 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20  l SQL text past 
21960 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c  the last semicol
21970 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54  on parsed */.  T
21980 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b  able *pNewTable;
21990 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61           /* A ta
219a0 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72  ble being constr
219b0 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20  ucted by CREATE 
219c0 54 41 42 4c 45 20 2a 2f 0a 20 20 49 6e 64 65 78  TABLE */.  Index
219d0 20 2a 70 4e 65 77 49 6e 64 65 78 3b 20 20 20 20   *pNewIndex;    
219e0 20 20 20 20 20 2f 2a 20 41 6e 20 69 6e 64 65 78       /* An index
219f0 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74   being construct
21a00 65 64 20 62 79 20 43 52 45 41 54 45 20 49 4e 44  ed by CREATE IND
21a10 45 58 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  EX */.  Trigger 
21a20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20  *pNewTrigger;   
21a30 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64    /* Trigger und
21a40 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20  er construct by 
21a50 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  a CREATE TRIGGER
21a60 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
21a70 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
21a80 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d  /* The 6th param
21a90 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74  eter to db->xAut
21aa0 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23  h callbacks */.#
21ab0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21ac0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
21ad0 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20    Token sArg;   
21ae0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
21af0 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20  omplete text of 
21b00 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e  a module argumen
21b10 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61  t */.  Table **a
21b20 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  pVtabLock;      
21b30 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
21b40 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65  irtual tables ne
21b50 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f  eding locking */
21b60 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20  .#endif.  Table 
21b70 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20  *pZombieTab;    
21b80 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54      /* List of T
21b90 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20  able objects to 
21ba0 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64  delete after cod
21bb0 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67  e gen */.  Trigg
21bc0 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50  erPrg *pTriggerP
21bd0 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c  rg;  /* Linked l
21be0 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69  ist of coded tri
21bf0 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20  ggers */.  With 
21c00 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
21c10 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
21c20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
21c30 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a  NULL */.  With *
21c40 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20 20  pWithToFree;    
21c50 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69 73      /* Free this
21c60 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74 20   WITH object at 
21c70 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70  the end of the p
21c80 61 72 73 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20  arse */.#ifndef 
21c90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45  SQLITE_OMIT_ALTE
21ca0 52 54 41 42 4c 45 0a 20 20 52 65 6e 61 6d 65 54  RTABLE.  RenameT
21cb0 6f 6b 65 6e 20 2a 70 52 65 6e 61 6d 65 3b 20 20  oken *pRename;  
21cc0 20 20 20 2f 2a 20 54 6f 6b 65 6e 73 20 73 75 62     /* Tokens sub
21cd0 6a 65 63 74 20 74 6f 20 72 65 6e 61 6d 69 6e 67  ject to renaming
21ce0 20 62 79 20 41 4c 54 45 52 20 54 41 42 4c 45 20   by ALTER TABLE 
21cf0 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23 64  */.#endif.};..#d
21d00 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45  efine PARSE_MODE
21d10 5f 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 30  _NORMAL        0
21d20 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d  .#define PARSE_M
21d30 4f 44 45 5f 44 45 43 4c 41 52 45 5f 56 54 41 42  ODE_DECLARE_VTAB
21d40 20 20 31 0a 23 64 65 66 69 6e 65 20 50 41 52 53    1.#define PARS
21d50 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f  E_MODE_RENAME_CO
21d60 4c 55 4d 4e 20 32 0a 23 64 65 66 69 6e 65 20 50  LUMN 2.#define P
21d70 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45  ARSE_MODE_RENAME
21d80 5f 54 41 42 4c 45 20 20 33 0a 0a 2f 2a 0a 2a 2a  _TABLE  3../*.**
21d90 20 53 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e 74   Sizes and point
21da0 65 72 73 20 6f 66 20 76 61 72 69 6f 75 73 20 70  ers of various p
21db0 61 72 74 73 20 6f 66 20 74 68 65 20 50 61 72 73  arts of the Pars
21dc0 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65  e object..*/.#de
21dd0 66 69 6e 65 20 50 41 52 53 45 5f 48 44 52 5f 53  fine PARSE_HDR_S
21de0 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  Z offsetof(Parse
21df0 2c 61 54 65 6d 70 52 65 67 29 20 2f 2a 20 52 65  ,aTempReg) /* Re
21e00 63 75 72 73 69 76 65 20 70 61 72 74 20 77 2f 6f  cursive part w/o
21e10 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65   aColCache*/.#de
21e20 66 69 6e 65 20 50 41 52 53 45 5f 52 45 43 55 52  fine PARSE_RECUR
21e30 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50  SE_SZ offsetof(P
21e40 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29  arse,sLastToken)
21e50 20 20 20 20 2f 2a 20 52 65 63 75 72 73 69 76 65      /* Recursive
21e60 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65   part */.#define
21e70 20 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28   PARSE_TAIL_SZ (
21e80 73 69 7a 65 6f 66 28 50 61 72 73 65 29 2d 50 41  sizeof(Parse)-PA
21e90 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20  RSE_RECURSE_SZ) 
21ea0 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65  /* Non-recursive
21eb0 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65   part */.#define
21ec0 20 50 41 52 53 45 5f 54 41 49 4c 28 58 29 20 28   PARSE_TAIL(X) (
21ed0 28 28 63 68 61 72 2a 29 28 58 29 29 2b 50 41 52  ((char*)(X))+PAR
21ee0 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 20  SE_RECURSE_SZ)  
21ef0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 61  /* Pointer to ta
21f00 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  il */../*.** Ret
21f10 75 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72  urn true if curr
21f20 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20  ently inside an 
21f30 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
21f40 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a  vtab() call..*/.
21f50 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
21f60 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
21f70 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
21f80 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73  LARE_VTAB 0.#els
21f90 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  e.  #define IN_D
21fa0 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61  ECLARE_VTAB (pPa
21fb0 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3d  rse->eParseMode=
21fc0 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c  =PARSE_MODE_DECL
21fd0 41 52 45 5f 56 54 41 42 29 0a 23 65 6e 64 69 66  ARE_VTAB).#endif
21fe0 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
21ff0 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
22000 41 42 4c 45 29 0a 20 20 23 64 65 66 69 6e 65 20  ABLE).  #define 
22010 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43 54  IN_RENAME_OBJECT
22020 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69   0.#else.  #defi
22030 6e 65 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a  ne IN_RENAME_OBJ
22040 45 43 54 20 28 70 50 61 72 73 65 2d 3e 65 50 61  ECT (pParse->ePa
22050 72 73 65 4d 6f 64 65 3e 3d 50 41 52 53 45 5f 4d  rseMode>=PARSE_M
22060 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d  ODE_RENAME_COLUM
22070 4e 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  N).#endif..#if d
22080 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
22090 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
220a0 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
220b0 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
220c0 4c 45 29 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  LE).  #define IN
220d0 5f 53 50 45 43 49 41 4c 5f 50 41 52 53 45 20 30  _SPECIAL_PARSE 0
220e0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
220f0 20 49 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52 53   IN_SPECIAL_PARS
22100 45 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72 73  E (pParse->ePars
22110 65 4d 6f 64 65 21 3d 50 41 52 53 45 5f 4d 4f 44  eMode!=PARSE_MOD
22120 45 5f 4e 4f 52 4d 41 4c 29 0a 23 65 6e 64 69 66  E_NORMAL).#endif
22130 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
22140 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
22150 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
22160 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f  an be declared o
22170 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73  n a stack and us
22180 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68  ed.** to save th
22190 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  e Parse.zAuthCon
221a0 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68  text value so th
221b0 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
221c0 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a  tored later..*/.
221d0 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65  struct AuthConte
221e0 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  xt {.  const cha
221f0 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
22200 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20     /* Put saved 
22210 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
22220 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72  xt here */.  Par
22230 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
22240 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
22250 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
22260 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  */.};../*.** Bit
22270 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20  field flags for 
22280 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69  P5 value in vari
22290 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a  ous opcodes..**.
222a0 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
222b0 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
222c0 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
222d0 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54      OPFLAG_LENGT
222e0 48 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54  HARG    == SQLIT
222f0 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a  E_FUNC_LENGTH.**
22300 20 20 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f      OPFLAG_TYPEO
22310 46 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54  FARG    == SQLIT
22320 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a  E_FUNC_TYPEOF.**
22330 20 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43      OPFLAG_BULKC
22340 53 52 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45  SR      == BTREE
22350 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20  _BULKLOAD.**    
22360 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20  OPFLAG_SEEKEQ   
22370 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45 45      == BTREE_SEE
22380 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  K_EQ.**    OPFLA
22390 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 3d  G_FORDELETE    =
223a0 3d 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54  = BTREE_FORDELET
223b0 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53  E.**    OPFLAG_S
223c0 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42  AVEPOSITION == B
223d0 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f  TREE_SAVEPOSITIO
223e0 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41  N.**    OPFLAG_A
223f0 55 58 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42  UXDELETE    == B
22400 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a  TREE_AUXDELETE.*
22410 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22420 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30  _NCHANGE       0
22430 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73  x01    /* OP_Ins
22440 65 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64 61  ert: Set to upda
22450 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a  te db->nChange *
22460 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
22470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22480 20 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75         /* Also u
22490 73 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20 50  sed in P2 (not P
224a0 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20  5) of OP_Delete 
224b0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
224c0 47 5f 4e 4f 43 48 4e 47 20 20 20 20 20 20 20 20  G_NOCHNG        
224d0 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 56 43  0x01    /* OP_VC
224e0 6f 6c 75 6d 6e 20 6e 6f 63 68 61 6e 67 65 20 66  olumn nochange f
224f0 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  or UPDATE */.#de
22500 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45  fine OPFLAG_EPHE
22510 4d 20 20 20 20 20 20 20 20 20 30 78 30 31 20 20  M         0x01  
22520 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20    /* OP_Column: 
22530 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74  Ephemeral output
22540 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e   is ok */.#defin
22550 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
22560 49 44 20 20 20 20 20 30 78 32 30 20 20 20 20 2f  ID     0x20    /
22570 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  * Set to update 
22580 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f  db->lastRowid */
22590 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
225a0 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78  ISUPDATE      0x
225b0 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50  04    /* This OP
225c0 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71  _Insert is an sq
225d0 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  l UPDATE */.#def
225e0 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e  ine OPFLAG_APPEN
225f0 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20  D        0x08   
22600 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65   /* This is like
22610 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
22620 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  nd */.#define OP
22630 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
22640 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72  LT 0x10    /* Tr
22650 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65  y to avoid a see
22660 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74  k in BtreeInsert
22670 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
22680 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20  FLAG_ISNOOP     
22690 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50     0x40    /* OP
226a0 5f 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65  _Delete does pre
226b0 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c  -update-hook onl
226c0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  y */.#define OPF
226d0 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20  LAG_LENGTHARG   
226e0 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
226f0 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64  Column only used
22700 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f   for length() */
22710 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22720 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78  TYPEOFARG     0x
22730 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  80    /* OP_Colu
22740 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
22750 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65   typeof() */.#de
22760 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  fine OPFLAG_BULK
22770 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20  CSR       0x01  
22780 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75    /* OP_Open** u
22790 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b  sed to open bulk
227a0 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69   cursor */.#defi
227b0 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  ne OPFLAG_SEEKEQ
227c0 20 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20          0x02    
227d0 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72  /* OP_Open** cur
227e0 73 6f 72 20 75 73 65 73 20 45 51 20 73 65 65 6b  sor uses EQ seek
227f0 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
22800 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
22810 45 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a  E     0x08    /*
22820 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20   OP_Open should 
22830 75 73 65 20 42 54 52 45 45 5f 46 4f 52 44 45 4c  use BTREE_FORDEL
22840 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ETE */.#define O
22850 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20  PFLAG_P2ISREG   
22860 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50      0x10    /* P
22870 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69  2 to OP_Open** i
22880 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d  s a register num
22890 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ber */.#define O
228a0 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20  PFLAG_PERMUTE   
228b0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
228c0 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74  P_Compare: use t
228d0 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a  he permutation *
228e0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
228f0 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 20 30  _SAVEPOSITION  0
22900 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c  x02    /* OP_Del
22910 65 74 65 2f 49 6e 73 65 72 74 3a 20 73 61 76 65  ete/Insert: save
22920 20 63 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23   cursor pos */.#
22930 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55  define OPFLAG_AU
22940 58 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 34  XDELETE     0x04
22950 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65      /* OP_Delete
22960 3a 20 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c  : index in a DEL
22970 45 54 45 20 6f 70 20 2a 2f 0a 23 64 65 66 69 6e  ETE op */.#defin
22980 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f  e OPFLAG_NOCHNG_
22990 4d 41 47 49 43 20 20 30 78 36 64 20 20 20 20 2f  MAGIC  0x6d    /
229a0 2a 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a  * OP_MakeRecord:
229b0 20 73 65 72 69 61 6c 74 79 70 65 20 31 30 20 69   serialtype 10 i
229c0 73 20 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45  s ok */../*. * E
229d0 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73  ach trigger pres
229e0 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
229f0 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74  ase schema is st
22a00 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61  ored as an insta
22a10 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74  nce of. * struct
22a20 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20   Trigger.. *. * 
22a30 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74  Pointers to inst
22a40 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
22a50 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72  Trigger are stor
22a60 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a  ed in two ways..
22a70 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72   * 1. In the "tr
22a80 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62  igHash" hash tab
22a90 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20  le (part of the 
22aa0 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65  sqlite3* that re
22ab0 70 72 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20  presents the. * 
22ac0 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68     database). Th
22ad0 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65  is allows Trigge
22ae0 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20  r structures to 
22af0 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20  be retrieved by 
22b00 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20  name.. * 2. All 
22b10 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61  triggers associa
22b20 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c  ted with a singl
22b30 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c  e table form a l
22b40 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e  inked list, usin
22b50 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78  g the. *    pNex
22b60 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75  t member of stru
22b70 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f  ct Trigger. A po
22b80 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72  inter to the fir
22b90 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
22ba0 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c  e. *    linked l
22bb0 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73  ist is stored as
22bc0 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20   the "pTrigger" 
22bd0 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73  member of the as
22be0 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73  sociated. *    s
22bf0 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a  truct Table.. *.
22c00 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73   * The "step_lis
22c10 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73  t" member points
22c20 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
22c30 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65  ement of a linke
22c40 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69  d list. * contai
22c50 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61  ning the SQL sta
22c60 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
22c70 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72  d as the trigger
22c80 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74   program.. */.st
22c90 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20  ruct Trigger {. 
22ca0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
22cb0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
22cc0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67  name of the trig
22cd0 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20  ger             
22ce0 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
22cf0 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20  char *table;    
22d00 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74          /* The t
22d10 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20  able or view to 
22d20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
22d30 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75  r applies */.  u
22d40 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
22d50 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
22d60 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
22d70 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
22d80 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38           */.  u8
22d90 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20   tr_tm;         
22da0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
22db0 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20  TRIGGER_BEFORE, 
22dc0 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f  TRIGGER_AFTER */
22dd0 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20  .  Expr *pWhen; 
22de0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
22df0 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66  e WHEN clause of
22e00 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
22e10 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f  (may be NULL) */
22e20 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75  .  IdList *pColu
22e30 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66  mns;       /* If
22e40 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41   this is an UPDA
22e50 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69  TE OF <column-li
22e60 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20  st> trigger,.   
22e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e80 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63            the <c
22e90 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73  olumn-list> is s
22ea0 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
22eb0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
22ec0 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d          /* Schem
22ed0 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
22ee0 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63   trigger */.  Sc
22ef0 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61  hema *pTabSchema
22f00 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
22f10 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
22f20 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65  able */.  Trigge
22f30 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74  rStep *step_list
22f40 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f  ; /* Link list o
22f50 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  f trigger progra
22f60 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20  m steps         
22f70 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72      */.  Trigger
22f80 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
22f90 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72   /* Next trigger
22fa0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
22fb0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b   the table */.};
22fc0 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65  ../*.** A trigge
22fd0 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45  r is either a BE
22fe0 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52  FORE or an AFTER
22ff0 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66   trigger.  The f
23000 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e  ollowing constan
23010 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20  ts.** determine 
23020 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  which..**.** If 
23030 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70  there are multip
23040 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75  le triggers, you
23050 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42   might of some B
23060 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41  EFORE and some A
23070 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74  FTER..** In that
23080 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73   cases, the cons
23090 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20  tants below can 
230a0 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72  be ORed together
230b0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49  ..*/.#define TRI
230c0 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23  GGER_BEFORE  1.#
230d0 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41  define TRIGGER_A
230e0 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20  FTER   2../*. * 
230f0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73  An instance of s
23100 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
23110 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  p is used to sto
23120 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20  re a single SQL 
23130 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61  statement. * tha
23140 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61  t is a part of a
23150 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
23160 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65  .. *. * Instance
23170 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
23180 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72  gerStep are stor
23190 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c  ed in a singly l
231a0 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b  inked list (link
231b0 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20  ed. * using the 
231c0 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20  "pNext" member) 
231d0 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68  referenced by th
231e0 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
231f0 6d 62 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61  mber of the. * a
23200 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74  ssociated struct
23210 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63   Trigger instanc
23220 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  e. The first ele
23230 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b  ment of the link
23240 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68  ed list is. * th
23250 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20  e first step of 
23260 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67  the trigger-prog
23270 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22  ram.. *. * The "
23280 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63  op" member indic
23290 61 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69  ates whether thi
232a0 73 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c  s is a "DELETE",
232b0 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41   "INSERT", "UPDA
232c0 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43  TE" or. * "SELEC
232d0 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  T" statement. Th
232e0 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68  e meanings of th
232f0 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20  e other members 
23300 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
23310 20 74 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66   the. * value of
23320 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73   "op" as follows
23330 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  :. *. * (op == T
23340 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63  K_INSERT). * orc
23350 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73  onf    -> stores
23360 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
23370 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53   algorithm. * pS
23380 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68  elect   -> If th
23390 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
233a0 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20  INTO ... SELECT 
233b0 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
233c0 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
233d0 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
233e0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
233f0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
23400 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  t. Otherwise NUL
23410 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20  L.. * zTarget   
23420 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65  -> Dequoted name
23430 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
23440 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a   insert into.. *
23450 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66   pExprList -> If
23460 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
23470 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55  RT INTO ... VALU
23480 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  ES ... statement
23490 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
234a0 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
234b0 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20  es values to be 
234c0 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77  inserted. Otherw
234d0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64  ise NULL.. * pId
234e0 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69  List   -> If thi
234f0 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
23500 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e  NTO ... (<column
23510 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20  -names>) VALUES 
23520 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  .... *          
23530 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74      statement, t
23540 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20  hen this stores 
23550 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  the column-names
23560 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20   to be. *       
23570 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20         inserted 
23580 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20  into.. *. * (op 
23590 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a  == TK_DELETE). *
235a0 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
235b0 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
235c0 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65  he table to dele
235d0 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65  te from.. * pWhe
235e0 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
235f0 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
23600 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
23610 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
23620 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
23630 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
23640 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70   NULL.. *. * (op
23650 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20   == TK_UPDATE). 
23660 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44  * zTarget   -> D
23670 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20  equoted name of 
23680 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64  the table to upd
23690 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20  ate.. * pWhere  
236a0 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
236b0 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44  lause of the UPD
236c0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ATE statement if
236d0 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
236e0 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
236f0 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
23700 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  L.. * pExprList 
23710 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65  -> A list of the
23720 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61   columns to upda
23730 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65  te and the expre
23740 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65  ssions to update
23750 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
23760 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71   them to. See sq
23770 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f  lite3Update() do
23780 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22  cumentation of "
23790 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20  pChanges". *    
237a0 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65            argume
237b0 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63  nt.. *. */.struc
237c0 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a  t TriggerStep {.
237d0 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
237e0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
237f0 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
23800 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
23810 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20  , TK_SELECT */. 
23820 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20   u8 orconf;     
23830 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c        /* OE_Roll
23840 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54  back etc. */.  T
23850 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20  rigger *pTrig;  
23860 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67      /* The trigg
23870 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65  er that this ste
23880 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a  p is a part of *
23890 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
238a0 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45  ect;     /* SELE
238b0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20  CT statement or 
238c0 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e  RHS of INSERT IN
238d0 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f  TO SELECT ... */
238e0 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74  .  char *zTarget
238f0 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65  ;       /* Targe
23900 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45  t table for DELE
23910 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45  TE, UPDATE, INSE
23920 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  RT */.  Expr *pW
23930 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  here;        /* 
23940 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
23950 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55   for DELETE or U
23960 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20  PDATE steps */. 
23970 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72   ExprList *pExpr
23980 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61  List; /* SET cla
23990 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 20 2a  use for UPDATE *
239a0 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c  /.  IdList *pIdL
239b0 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75  ist;     /* Colu
239c0 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53  mn names for INS
239d0 45 52 54 20 2a 2f 0a 20 20 55 70 73 65 72 74 20  ERT */.  Upsert 
239e0 2a 70 55 70 73 65 72 74 3b 20 20 20 20 20 2f 2a  *pUpsert;     /*
239f0 20 55 70 73 65 72 74 20 63 6c 61 75 73 65 73 20   Upsert clauses 
23a00 6f 6e 20 61 6e 20 49 4e 53 45 52 54 20 2a 2f 0a  on an INSERT */.
23a10 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20    char *zSpan;  
23a20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e         /* Origin
23a30 61 6c 20 53 51 4c 20 74 65 78 74 20 6f 66 20 74  al SQL text of t
23a40 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
23a50 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e   TriggerStep *pN
23a60 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e  ext;  /* Next in
23a70 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a   the link-list *
23a80 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
23a90 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74  *pLast;  /* Last
23aa0 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b   element in link
23ab0 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72  -list. Valid for
23ac0 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a   1st elem only *
23ad0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
23ae0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
23af0 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
23b00 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79  ormation used by
23b10 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e   the sqliteFix..
23b20 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73  ..** routines as
23b30 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70   they walk the p
23b40 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b  arse tree to mak
23b50 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72  e database refer
23b60 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69  ences.** explici
23b70 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  t..*/.typedef st
23b80 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46  ruct DbFixer DbF
23b90 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46  ixer;.struct DbF
23ba0 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a  ixer {.  Parse *
23bb0 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20  pParse;      /* 
23bc0 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74  The parsing cont
23bd0 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73  ext.  Error mess
23be0 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72  ages written her
23bf0 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
23c00 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69  Schema;    /* Fi
23c10 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20  x items to this 
23c20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
23c30 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20  bVarOnly;       
23c40 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72  /* Check for var
23c50 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73  iable references
23c60 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74   only */.  const
23c70 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f   char *zDb;    /
23c80 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20  * Make sure all 
23c90 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74  objects are cont
23ca0 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61  ained in this da
23cb0 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73  tabase */.  cons
23cc0 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20  t char *zType;  
23cd0 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63  /* Type of the c
23ce0 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20  ontainer - used 
23cf0 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67  for error messag
23d00 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f  es */.  const To
23d10 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e  ken *pName; /* N
23d20 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ame of the conta
23d30 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
23d40 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
23d50 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  /.};../*.** An o
23d60 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20  bjected used to 
23d70 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74  accumulate the t
23d80 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20  ext of a string 
23d90 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e  where we.** do n
23da0 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b  ot necessarily k
23db0 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20  now how big the 
23dc0 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69  string will be i
23dd0 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  n the end..*/.st
23de0 72 75 63 74 20 73 71 6c 69 74 65 33 5f 73 74 72  ruct sqlite3_str
23df0 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
23e00 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74  ;         /* Opt
23e10 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66  ional database f
23e20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43  or lookaside.  C
23e30 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20  an be NULL */.  
23e40 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20  char *zText;    
23e50 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69       /* The stri
23e60 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20  ng collected so 
23e70 66 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41  far */.  u32  nA
23e80 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  lloc;         /*
23e90 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65   Amount of space
23ea0 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54   allocated in zT
23eb0 65 78 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78  ext */.  u32  mx
23ec0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a  Alloc;        /*
23ed0 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64   Maximum allowed
23ee0 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20   allocation.  0 
23ef0 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73  for no malloc us
23f00 61 67 65 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43  age */.  u32  nC
23f10 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  har;          /*
23f20 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   Length of the s
23f30 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a  tring so far */.
23f40 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b    u8   accError;
23f50 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45         /* SQLITE
23f60 5f 4e 4f 4d 45 4d 20 6f 72 20 53 51 4c 49 54 45  _NOMEM or SQLITE
23f70 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20  _TOOBIG */.  u8 
23f80 20 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20    printfFlags;  
23f90 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e    /* SQLITE_PRIN
23fa0 54 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a  TF flags below *
23fb0 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  /.};.#define SQL
23fc0 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52  ITE_PRINTF_INTER
23fd0 4e 41 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74  NAL 0x01  /* Int
23fe0 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63  ernal-use-only c
23ff0 6f 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65  onverters allowe
24000 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
24010 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55  ITE_PRINTF_SQLFU
24020 4e 43 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c  NC  0x02  /* SQL
24030 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   function argume
24040 6e 74 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20  nts to VXPrintf 
24050 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
24060 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45  E_PRINTF_MALLOCE
24070 44 20 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20  D 0x04  /* True 
24080 69 66 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f  if xText is allo
24090 63 61 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a  cated space */..
240a0 23 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63  #define isMalloc
240b0 65 64 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72  ed(X)  (((X)->pr
240c0 69 6e 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49  intfFlags & SQLI
240d0 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43  TE_PRINTF_MALLOC
240e0 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20  ED)!=0).../*.** 
240f0 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  A pointer to thi
24100 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
24110 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61  sed to communica
24120 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  te information.*
24130 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e  * from sqlite3In
24140 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53  it and OP_ParseS
24150 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73  chema into the s
24160 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
24170 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ck..*/.typedef s
24180 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65  truct {.  sqlite
24190 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
241a0 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65   The database be
241b0 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
241c0 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
241d0 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f  rMsg;    /* Erro
241e0 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64  r message stored
241f0 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69   here */.  int i
24200 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Db;            /
24210 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74  * 0 for main dat
24220 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45  abase.  1 for TE
24230 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41  MP, 2.. for ATTA
24240 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63  CHed */.  int rc
24250 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
24260 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f   Result code sto
24270 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 75 33  red here */.  u3
24280 32 20 6d 49 6e 69 74 46 6c 61 67 73 3b 20 20 20  2 mInitFlags;   
24290 20 20 2f 2a 20 46 6c 61 67 73 20 63 6f 6e 74 72    /* Flags contr
242a0 6f 6c 6c 69 6e 67 20 65 72 72 6f 72 20 6d 65 73  olling error mes
242b0 73 61 67 65 73 20 2a 2f 0a 7d 20 49 6e 69 74 44  sages */.} InitD
242c0 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ata;../*.** Allo
242d0 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 6d  wed values for m
242e0 49 6e 69 74 46 6c 61 67 73 0a 2a 2f 0a 23 64 65  InitFlags.*/.#de
242f0 66 69 6e 65 20 49 4e 49 54 46 4c 41 47 5f 41 6c  fine INITFLAG_Al
24300 74 65 72 54 61 62 6c 65 20 20 20 30 78 30 30 30  terTable   0x000
24310 31 20 20 2f 2a 20 54 68 69 73 20 69 73 20 61 20  1  /* This is a 
24320 72 65 70 61 72 73 65 20 61 66 74 65 72 20 41 4c  reparse after AL
24330 54 45 52 20 54 41 42 4c 45 20 2a 2f 0a 0a 2f 2a  TER TABLE */../*
24340 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f  .** Structure co
24350 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20  ntaining global 
24360 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61  configuration da
24370 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  ta for the SQLit
24380 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a  e library..**.**
24390 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
243a0 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f  also contains so
243b0 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61  me state informa
243c0 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
243d0 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a  Sqlite3Config {.
243e0 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20    int bMemstat; 
243f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24400 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
24410 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61  nable memory sta
24420 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f  tus */.  int bCo
24430 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  reMutex;        
24440 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
24450 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72  ue to enable cor
24460 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20  e mutexing */.  
24470 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20  int bFullMutex; 
24480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24490 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
244a0 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e  ble full mutexin
244b0 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e  g */.  int bOpen
244c0 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  Uri;            
244d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
244e0 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69   to interpret fi
244f0 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20  lenames as URIs 
24500 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73  */.  int bUseCis
24510 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24520 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f         /* Use co
24530 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66  vering indices f
24540 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f  or full-scans */
24550 0a 20 20 69 6e 74 20 62 53 6d 61 6c 6c 4d 61 6c  .  int bSmallMal
24560 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  loc;            
24570 20 20 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c 61       /* Avoid la
24580 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  rge memory alloc
24590 61 74 69 6f 6e 73 20 69 66 20 74 72 75 65 20 2a  ations if true *
245a0 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e  /.  int mxStrlen
245b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
245c0 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
245d0 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a   string length *
245e0 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72  /.  int neverCor
245f0 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20 20  rupt;           
24600 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
24610 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c  e is always well
24620 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74  -formed */.  int
24630 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20   szLookaside;   
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24650 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
24660 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65 20  ide buffer size 
24670 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73  */.  int nLookas
24680 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ide;            
24690 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
246a0 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
246b0 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e  er count */.  in
246c0 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20  t nStmtSpill;   
246d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246e0 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20  /* Stmt-journal 
246f0 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68  spill-to-disk th
24700 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c  reshold */.  sql
24710 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
24720 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   m;            /
24730 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f  * Low-level memo
24740 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ry allocation in
24750 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
24760 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
24770 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f  ds mutex;      /
24780 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65  * Low-level mute
24790 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  x interface */. 
247a0 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f   sqlite3_pcache_
247b0 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32  methods2 pcache2
247c0 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20  ;  /* Low-level 
247d0 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72  page-cache inter
247e0 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  face */.  void *
247f0 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  pHeap;          
24800 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
24810 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63  eap storage spac
24820 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70  e */.  int nHeap
24830 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24840 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
24850 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20   of pHeap[] */. 
24860 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65   int mnReq, mxRe
24870 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q;              
24880 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61     /* Min and ma
24890 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20  x heap requests 
248a0 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74  sizes */.  sqlit
248b0 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b  e3_int64 szMmap;
248c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
248d0 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72  mmap() space per
248e0 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20   open file */.  
248f0 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78  sqlite3_int64 mx
24900 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
24910 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c    /* Maximum val
24920 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f  ue for szMmap */
24930 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20  .  void *pPage; 
24940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24950 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63       /* Page cac
24960 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  he memory */.  i
24970 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20  nt szPage;      
24980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24990 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
249a0 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d   page in pPage[]
249b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b   */.  int nPage;
249c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
249e0 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50  r of pages in pP
249f0 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d  age[] */.  int m
24a00 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20  xParserStack;   
24a10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24a20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66  maximum depth of
24a30 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61 63   the parser stac
24a40 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65  k */.  int share
24a50 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20  dCacheEnabled;  
24a60 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65           /* true
24a70 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68 65   if shared-cache
24a80 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f   mode enabled */
24a90 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20  .  u32 szPma;   
24aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ab0 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
24ac0 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20  Sorter PMA size 
24ad0 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76  */.  /* The abov
24ae0 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69  e might be initi
24af0 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65  alized to non-ze
24b00 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ro.  The followi
24b10 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79  ng need to alway
24b20 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79  s.  ** initially
24b30 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65   be zero, howeve
24b40 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e  r. */.  int isIn
24b50 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
24b60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
24b70 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69  e after initiali
24b80 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73  zation has finis
24b90 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50  hed */.  int inP
24ba0 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20  rogress;        
24bb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
24bc0 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c  ue while initial
24bd0 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  ization in progr
24be0 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  ess */.  int isM
24bf0 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20  utexInit;       
24c00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
24c10 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65 73  ue after mutexes
24c20 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64   are initialized
24c30 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c   */.  int isMall
24c40 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  ocInit;         
24c50 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
24c60 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
24c70 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
24c80 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69   int isPCacheIni
24c90 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
24ca0 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
24cb0 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69   malloc is initi
24cc0 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
24cd0 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20  nRefInitMutex;  
24ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24cf0 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73   Number of users
24d00 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a   of pInitMutex *
24d10 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
24d20 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20  x *pInitMutex;  
24d30 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75        /* Mutex u
24d40 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69  sed by sqlite3_i
24d50 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20  nitialize() */. 
24d60 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f   void (*xLog)(vo
24d70 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
24d80 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f  ar*); /* Functio
24d90 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f  n for logging */
24da0 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67  .  void *pLogArg
24db0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24dc0 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
24dd0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f   argument to xLo
24de0 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  g() */.#ifdef SQ
24df0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c  LITE_ENABLE_SQLL
24e00 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c  OG.  void(*xSqll
24e10 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  og)(void*,sqlite
24e20 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
24e30 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53  int);.  void *pS
24e40 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66  qllogArg;.#endif
24e50 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56  .#ifdef SQLITE_V
24e60 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f  DBE_COVERAGE.  /
24e70 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
24e80 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74  callback (if not
24e90 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65   NULL) is invoke
24ea0 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20  d on every VDBE 
24eb0 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72  branch.  ** oper
24ec0 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20  ation.  Set the 
24ed0 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53  callback using S
24ee0 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56  QLITE_TESTCTRL_V
24ef0 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20  DBE_COVERAGE..  
24f00 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62  */.  void (*xVdb
24f10 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 75  eBranch)(void*,u
24f20 6e 73 69 67 6e 65 64 20 69 53 72 63 4c 69 6e 65  nsigned iSrcLine
24f30 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78  ,u8 eThis,u8 eMx
24f40 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
24f50 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65  */.  void *pVdbe
24f60 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20  BranchArg;      
24f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24f90 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a  * 1st argument *
24fa0 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
24fb0 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
24fc0 4c 45 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74  LE.  int (*xTest
24fd0 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20  Callback)(int); 
24fe0 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65         /* Invoke
24ff0 64 20 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c  d by sqlite3Faul
25000 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66  tSim() */.#endif
25010 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d  .  int bLocaltim
25020 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20  eFault;         
25030 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
25040 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29  fail localtime()
25050 20 63 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74 20   calls */.  int 
25060 62 49 6e 74 65 72 6e 61 6c 46 75 6e 63 74 69 6f  bInternalFunctio
25070 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ns;           /*
25080 20 49 6e 74 65 72 6e 61 6c 20 53 51 4c 20 66 75   Internal SQL fu
25090 6e 63 74 69 6f 6e 73 20 61 72 65 20 76 69 73 69  nctions are visi
250a0 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e  ble */.  int iOn
250b0 63 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c 64  ceResetThreshold
250c0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ;          /* Wh
250d0 65 6e 20 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f  en to reset OP_O
250e0 6e 63 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  nce counters */.
250f0 20 20 75 33 32 20 73 7a 53 6f 72 74 65 72 52 65    u32 szSorterRe
25100 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f;              
25110 20 20 20 20 2f 2a 20 4d 69 6e 20 73 69 7a 65 20      /* Min size 
25120 69 6e 20 62 79 74 65 73 20 74 6f 20 75 73 65 20  in bytes to use 
25130 73 6f 72 74 65 72 2d 72 65 66 73 20 2a 2f 0a 7d  sorter-refs */.}
25140 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61  ;../*.** This ma
25150 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
25160 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73  de of assert() s
25170 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64  tatements to ind
25180 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68  icate that.** th
25190 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79  e assert is only
251a0 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c   valid on a well
251b0 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
251c0 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a  .  Instead of:.*
251d0 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
251e0 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20   X );.**.** One 
251f0 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  writes:.**.**   
25200 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43    assert( X || C
25210 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a  ORRUPT_DB );.**.
25220 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  ** CORRUPT_DB is
25230 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72   true during nor
25240 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  mal operation.  
25250 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20  CORRUPT_DB does 
25260 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20  not indicate.** 
25270 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73  that the databas
25280 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20  e is definitely 
25290 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68  corrupt, only th
252a0 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63  at it might be c
252b0 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d  orrupt..** For m
252c0 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20  ost test cases, 
252d0 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65  CORRUPT_DB is se
252e0 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67  t to false using
252f0 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71   a special.** sq
25300 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
25310 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62  ol().  This enab
25320 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61  les assert() sta
25330 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65  tements to prove
25340 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20  .** things that 
25350 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20  are always true 
25360 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  for well-formed 
25370 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64  databases..*/.#d
25380 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42  efine CORRUPT_DB
25390 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67    (sqlite3Config
253a0 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30  .neverCorrupt==0
253b0 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74  )../*.** Context
253c0 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20   pointer passed 
253d0 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65  down through the
253e0 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73   tree-walk..*/.s
253f0 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20  truct Walker {. 
25400 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
25410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25420 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
25430 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a  rser context.  *
25440 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43  /.  int (*xExprC
25450 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
25460 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a  , Expr*);     /*
25470 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78   Callback for ex
25480 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
25490 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  nt (*xSelectCall
254a0 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65  back)(Walker*,Se
254b0 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c  lect*);  /* Call
254c0 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
254d0 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65   */.  void (*xSe
254e0 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57  lectCallback2)(W
254f0 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b  alker*,Select*);
25500 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61  /* Second callba
25510 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
25520 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65  /.  int walkerDe
25530 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  pth;            
25540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25550 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75   Number of subqu
25560 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43  eries */.  u8 eC
25570 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
25580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25590 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20       /* A small 
255a0 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20  processing code 
255b0 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20  */.  union {    
255c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
255e0 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72  * Extra data for
255f0 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20   callback */.   
25600 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
25610 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  C;              
25620 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
25630 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  ming context */.
25640 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20      int n;      
25650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25670 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20   A counter */.  
25680 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20    int iCur;     
25690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
256b0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a   cursor number *
256c0 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70  /.    SrcList *p
256d0 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20  SrcList;        
256e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256f0 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  /* FROM clause *
25700 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63  /.    struct Src
25710 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74  Count *pSrcCount
25720 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25730 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75  /* Counting colu
25740 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  mn references */
25750 0a 20 20 20 20 73 74 72 75 63 74 20 43 43 75 72  .    struct CCur
25760 48 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b  Hint *pCCurHint;
25770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25780 2a 20 55 73 65 64 20 62 79 20 63 6f 64 65 43 75  * Used by codeCu
25790 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20  rsorHint() */.  
257a0 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20    int *aiCol;   
257b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61              /* a
257d0 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  rray of column i
257e0 6e 64 65 78 65 73 20 2a 2f 0a 20 20 20 20 73 74  ndexes */.    st
257f0 72 75 63 74 20 49 64 78 43 6f 76 65 72 20 2a 70  ruct IdxCover *p
25800 49 64 78 43 6f 76 65 72 3b 20 20 20 20 20 20 20  IdxCover;       
25810 20 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b          /* Check
25820 20 66 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72   for index cover
25830 61 67 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  age */.    struc
25840 74 20 49 64 78 45 78 70 72 54 72 61 6e 73 20 2a  t IdxExprTrans *
25850 70 49 64 78 54 72 61 6e 73 3b 20 20 20 20 20 20  pIdxTrans;      
25860 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20       /* Convert 
25870 69 64 78 65 64 20 65 78 70 72 20 74 6f 20 63 6f  idxed expr to co
25880 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72  lumn */.    Expr
25890 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20  List *pGroupBy; 
258a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258b0 20 20 20 20 20 20 2f 2a 20 47 52 4f 55 50 20 42        /* GROUP B
258c0 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  Y clause */.    
258d0 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
258e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 41 56            /* HAV
25900 49 4e 47 20 74 6f 20 57 48 45 52 45 20 63 6c 61  ING to WHERE cla
25910 75 73 65 20 63 74 78 20 2a 2f 0a 20 20 20 20 73  use ctx */.    s
25920 74 72 75 63 74 20 57 69 6e 64 6f 77 52 65 77 72  truct WindowRewr
25930 69 74 65 20 2a 70 52 65 77 72 69 74 65 3b 20 20  ite *pRewrite;  
25940 20 20 20 20 20 20 20 20 20 2f 2a 20 57 69 6e 64           /* Wind
25950 6f 77 20 72 65 77 72 69 74 65 20 63 6f 6e 74 65  ow rewrite conte
25960 78 74 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  xt */.    struct
25970 20 57 68 65 72 65 43 6f 6e 73 74 20 2a 70 43 6f   WhereConst *pCo
25980 6e 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nst;            
25990 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61      /* WHERE cla
259a0 75 73 65 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f  use constants */
259b0 0a 20 20 20 20 73 74 72 75 63 74 20 52 65 6e 61  .    struct Rena
259c0 6d 65 43 74 78 20 2a 70 52 65 6e 61 6d 65 3b 20  meCtx *pRename; 
259d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
259e0 2a 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20  * RENAME COLUMN 
259f0 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 7d 20 75  context */.  } u
25a00 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64  ;.};../* Forward
25a10 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f   declarations */
25a20 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
25a30 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78  Expr(Walker*, Ex
25a40 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
25a50 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61  3WalkExprList(Wa
25a60 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lker*, ExprList*
25a70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
25a80 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a  lkSelect(Walker*
25a90 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
25aa0 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
25ab0 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53  tExpr(Walker*, S
25ac0 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
25ad0 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72  ite3WalkSelectFr
25ae0 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  om(Walker*, Sele
25af0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
25b00 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61  3ExprWalkNoop(Wa
25b10 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  lker*, Expr*);.i
25b20 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
25b30 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a  WalkNoop(Walker*
25b40 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
25b50 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c  sqlite3SelectWal
25b60 6b 46 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20 53  kFail(Walker*, S
25b70 65 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65 66 20  elect*);.#ifdef 
25b80 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f 69  SQLITE_DEBUG.voi
25b90 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  d sqlite3SelectW
25ba0 61 6c 6b 41 73 73 65 72 74 32 28 57 61 6c 6b 65  alkAssert2(Walke
25bb0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 65  r*, Select*);.#e
25bc0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ndif../*.** Retu
25bd0 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65  rn code from the
25be0 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b   parse-tree walk
25bf0 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61  ing primitives a
25c00 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c  nd their.** call
25c10 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  backs..*/.#defin
25c20 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20  e WRC_Continue  
25c30 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75    0   /* Continu
25c40 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c  e down into chil
25c50 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  dren */.#define 
25c60 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20  WRC_Prune       
25c70 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c  1   /* Omit chil
25c80 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75  dren but continu
25c90 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e  e walking siblin
25ca0 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  gs */.#define WR
25cb0 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20  C_Abort       2 
25cc0 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65    /* Abandon the
25cd0 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f   tree walk */../
25ce0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
25cf0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
25d00 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  re represents a 
25d10 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f  set of one or mo
25d20 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d  re CTEs.** (comm
25d30 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
25d40 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79  ions) created by
25d50 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63   a single WITH c
25d60 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  lause..*/.struct
25d70 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43   With {.  int nC
25d80 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
25d90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
25da0 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74  ber of CTEs in t
25db0 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a  he WITH clause *
25dc0 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72  /.  With *pOuter
25dd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25de0 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e      /* Containin
25df0 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f  g WITH clause, o
25e00 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75  r NULL */.  stru
25e10 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20  ct Cte {        
25e20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
25e30 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74  or each CTE in t
25e40 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e  he WITH clause..
25e50 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  .. */.    char *
25e60 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
25e70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
25e80 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f  e of this CTE */
25e90 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
25ea0 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cols;           
25eb0 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
25ec0 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20  explicit column 
25ed0 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a  names, or NULL *
25ee0 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
25ef0 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20  elect;          
25f00 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
25f10 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  inition of this 
25f20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74  CTE */.    const
25f30 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20   char *zCteErr; 
25f40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72             /* Er
25f50 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20  ror message for 
25f60 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e  circular referen
25f70 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  ces */.  } a[1];
25f80 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  .};..#ifdef SQLI
25f90 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41  TE_DEBUG./*.** A
25fa0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
25fb0 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63  e TreeView objec
25fc0 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 70 72  t is used for pr
25fd0 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65  inting the conte
25fe0 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74  nt of.** data st
25ff0 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69  ructures on sqli
26000 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 29  te3DebugPrintf()
26010 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69   using a tree-li
26020 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75  ke view..*/.stru
26030 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20  ct TreeView {.  
26040 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20  int iLevel;     
26050 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
26060 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72   level of the tr
26070 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a  ee we are on */.
26080 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d    u8  bLine[100]
26090 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61  ;         /* Dra
260a0 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f  w vertical in co
260b0 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b  lumn i if bLine[
260c0 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b  i] is true */.};
260d0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
260e0 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a  E_DEBUG */../*.*
260f0 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73  * This object is
26100 20 75 73 65 64 20 69 6e 20 76 61 72 69 6f 69 75   used in varioiu
26110 73 20 77 61 79 73 2c 20 61 6c 6c 20 72 65 6c 61  s ways, all rela
26120 74 65 64 20 74 6f 20 77 69 6e 64 6f 77 20 66 75  ted to window fu
26130 6e 63 74 69 6f 6e 73 0a 2a 2a 0a 2a 2a 20 20 20  nctions.**.**   
26140 28 31 29 20 41 20 73 69 6e 67 6c 65 20 69 6e 73  (1) A single ins
26150 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
26160 72 75 63 74 75 72 65 20 69 73 20 61 74 74 61 63  ructure is attac
26170 68 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 20 20  hed to the.**   
26180 20 20 20 20 74 68 65 20 45 78 70 72 2e 70 57 69      the Expr.pWi
26190 6e 20 66 69 65 6c 64 20 66 6f 72 20 65 61 63 68  n field for each
261a0 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
261b0 20 69 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f   in an expressio
261c0 6e 20 74 72 65 65 2e 0a 2a 2a 20 20 20 20 20 20  n tree..**      
261d0 20 54 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c   This object hol
261e0 64 73 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69  ds the informati
261f0 6f 6e 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  on contained in 
26200 74 68 65 20 4f 56 45 52 20 63 6c 61 75 73 65 2c  the OVER clause,
26210 0a 2a 2a 20 20 20 20 20 20 20 70 6c 75 73 20 61  .**       plus a
26220 64 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73  dditional fields
26230 20 75 73 65 64 20 64 75 72 69 6e 67 20 63 6f 64   used during cod
26240 65 20 67 65 6e 65 72 61 74 69 6f 6e 2e 0a 2a 2a  e generation..**
26250 0a 2a 2a 20 20 20 28 32 29 20 41 6c 6c 20 77 69  .**   (2) All wi
26260 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 69  ndow functions i
26270 6e 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43  n a single SELEC
26280 54 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 2d  T form a linked-
26290 6c 69 73 74 0a 2a 2a 20 20 20 20 20 20 20 61 74  list.**       at
262a0 74 61 63 68 65 64 20 74 6f 20 53 65 6c 65 63 74  tached to Select
262b0 2e 70 57 69 6e 2e 20 20 54 68 65 20 57 69 6e 64  .pWin.  The Wind
262c0 6f 77 2e 70 46 75 6e 63 20 61 6e 64 20 57 69 6e  ow.pFunc and Win
262d0 64 6f 77 2e 70 45 78 70 72 0a 2a 2a 20 20 20 20  dow.pExpr.**    
262e0 20 20 20 66 69 65 6c 64 73 20 70 6f 69 6e 74 20     fields point 
262f0 62 61 63 6b 20 74 6f 20 74 68 65 20 65 78 70 72  back to the expr
26300 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 74  ession that is t
26310 68 65 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69  he window functi
26320 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 33 29 20  on..**.**   (3) 
26330 54 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65  The terms of the
26340 20 57 49 4e 44 4f 57 20 63 6c 61 75 73 65 20 6f   WINDOW clause o
26350 66 20 61 20 53 45 4c 45 43 54 20 61 72 65 20 69  f a SELECT are i
26360 6e 73 74 61 6e 63 65 73 20 6f 66 20 74 68 69 73  nstances of this
26370 0a 2a 2a 20 20 20 20 20 20 20 6f 62 6a 65 63 74  .**       object
26380 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   on a linked lis
26390 74 20 61 74 74 61 63 68 65 64 20 74 6f 20 53 65  t attached to Se
263a0 6c 65 63 74 2e 70 57 69 6e 44 65 66 6e 2e 0a 2a  lect.pWinDefn..*
263b0 2a 0a 2a 2a 20 54 68 65 20 75 73 65 73 20 28 31  *.** The uses (1
263c0 29 20 61 6e 64 20 28 32 29 20 61 72 65 20 72 65  ) and (2) are re
263d0 61 6c 6c 79 20 74 68 65 20 73 61 6d 65 20 57 69  ally the same Wi
263e0 6e 64 6f 77 20 6f 62 6a 65 63 74 20 74 68 61 74  ndow object that
263f0 20 6a 75 73 74 20 68 61 70 70 65 6e 73 0a 2a 2a   just happens.**
26400 20 74 6f 20 62 65 20 61 63 63 65 73 73 69 62 6c   to be accessibl
26410 65 20 69 6e 20 74 77 6f 20 64 69 66 66 65 72 65  e in two differe
26420 6e 74 20 77 61 79 73 2e 20 20 55 73 65 20 28 33  nt ways.  Use (3
26430 29 20 69 73 20 61 72 65 20 73 65 70 61 72 61 74  ) is are separat
26440 65 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74  e objects..*/.st
26450 72 75 63 74 20 57 69 6e 64 6f 77 20 7b 0a 20 20  ruct Window {.  
26460 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
26470 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
26480 6f 66 20 77 69 6e 64 6f 77 20 28 6d 61 79 20 62  of window (may b
26490 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45 78 70  e NULL) */.  Exp
264a0 72 4c 69 73 74 20 2a 70 50 61 72 74 69 74 69 6f  rList *pPartitio
264b0 6e 3b 20 20 20 2f 2a 20 50 41 52 54 49 54 49 4f  n;   /* PARTITIO
264c0 4e 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  N BY clause */. 
264d0 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65   ExprList *pOrde
264e0 72 42 79 3b 20 20 20 20 20 2f 2a 20 4f 52 44 45  rBy;     /* ORDE
264f0 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  R BY clause */. 
26500 20 75 38 20 65 54 79 70 65 3b 20 20 20 20 20 20   u8 eType;      
26510 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52           /* TK_R
26520 41 4e 47 45 20 6f 72 20 54 4b 5f 52 4f 57 53 20  ANGE or TK_ROWS 
26530 2a 2f 0a 20 20 75 38 20 65 53 74 61 72 74 3b 20  */.  u8 eStart; 
26540 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26550 55 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52 52 45  UNBOUNDED, CURRE
26560 4e 54 2c 20 50 52 45 43 45 44 49 4e 47 20 6f 72  NT, PRECEDING or
26570 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20   FOLLOWING */.  
26580 75 38 20 65 45 6e 64 3b 20 20 20 20 20 20 20 20  u8 eEnd;        
26590 20 20 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55          /* UNBOU
265a0 4e 44 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50  NDED, CURRENT, P
265b0 52 45 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c  RECEDING or FOLL
265c0 4f 57 49 4e 47 20 2a 2f 0a 20 20 45 78 70 72 20  OWING */.  Expr 
265d0 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20  *pStart;        
265e0 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
265f0 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 50 52 45   for "<expr> PRE
26600 43 45 44 49 4e 47 22 20 2a 2f 0a 20 20 45 78 70  CEDING" */.  Exp
26610 72 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  r *pEnd;        
26620 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
26630 6f 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 46  on for "<expr> F
26640 4f 4c 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20 20 57  OLLOWING" */.  W
26650 69 6e 64 6f 77 20 2a 70 4e 65 78 74 57 69 6e 3b  indow *pNextWin;
26660 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77         /* Next w
26670 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 62  indow function b
26680 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 69 73  elonging to this
26690 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 45 78 70   SELECT */.  Exp
266a0 72 20 2a 70 46 69 6c 74 65 72 3b 20 20 20 20 20  r *pFilter;     
266b0 20 20 20 20 20 2f 2a 20 54 68 65 20 46 49 4c 54       /* The FILT
266c0 45 52 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  ER expression */
266d0 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e  .  FuncDef *pFun
266e0 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
266f0 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
26700 69 6e 74 20 69 45 70 68 43 73 72 3b 20 20 20 20  int iEphCsr;    
26710 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 74 69          /* Parti
26720 74 69 6f 6e 20 62 75 66 66 65 72 20 6f 72 20 50  tion buffer or P
26730 65 65 72 20 62 75 66 66 65 72 20 2a 2f 0a 20 20  eer buffer */.  
26740 69 6e 74 20 72 65 67 41 63 63 75 6d 3b 0a 20 20  int regAccum;.  
26750 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 0a 20  int regResult;. 
26760 20 69 6e 74 20 63 73 72 41 70 70 3b 20 20 20 20   int csrApp;    
26770 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63           /* Func
26780 74 69 6f 6e 20 63 75 72 73 6f 72 20 28 75 73 65  tion cursor (use
26790 64 20 62 79 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f  d by min/max) */
267a0 0a 20 20 69 6e 74 20 72 65 67 41 70 70 3b 20 20  .  int regApp;  
267b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75             /* Fu
267c0 6e 63 74 69 6f 6e 20 72 65 67 69 73 74 65 72 20  nction register 
267d0 28 61 6c 73 6f 20 75 73 65 64 20 62 79 20 6d 69  (also used by mi
267e0 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74 20  n/max) */.  int 
267f0 72 65 67 50 61 72 74 3b 20 20 20 20 20 20 20 20  regPart;        
26800 20 20 20 20 2f 2a 20 46 69 72 73 74 20 69 6e 20      /* First in 
26810 61 20 73 65 74 20 6f 66 20 72 65 67 69 73 74 65  a set of registe
26820 72 73 20 68 6f 6c 64 69 6e 67 20 50 41 52 54 49  rs holding PARTI
26830 54 49 4f 4e 20 42 59 0a 20 20 20 20 20 20 20 20  TION BY.        
26840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26850 20 20 2a 2a 20 61 6e 64 20 4f 52 44 45 52 20 42    ** and ORDER B
26860 59 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  Y values for the
26870 20 77 69 6e 64 6f 77 20 2a 2f 0a 20 20 45 78 70   window */.  Exp
26880 72 20 2a 70 4f 77 6e 65 72 3b 20 20 20 20 20 20  r *pOwner;      
26890 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
268a0 6f 6e 20 6f 62 6a 65 63 74 20 74 68 69 73 20 77  on object this w
268b0 69 6e 64 6f 77 20 69 73 20 61 74 74 61 63 68 65  indow is attache
268c0 64 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  d to */.  int nB
268d0 75 66 66 65 72 43 6f 6c 3b 20 20 20 20 20 20 20  ufferCol;       
268e0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
268f0 6f 6c 75 6d 6e 73 20 69 6e 20 62 75 66 66 65 72  olumns in buffer
26900 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
26910 69 41 72 67 43 6f 6c 3b 20 20 20 20 20 20 20 20  iArgCol;        
26920 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 6f 66      /* Offset of
26930 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   first argument 
26940 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f  for this functio
26950 6e 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 6e 64 65 66  n */.};..#ifndef
26960 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e   SQLITE_OMIT_WIN
26970 44 4f 57 46 55 4e 43 0a 76 6f 69 64 20 73 71 6c  DOWFUNC.void sql
26980 69 74 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65  ite3WindowDelete
26990 28 73 71 6c 69 74 65 33 2a 2c 20 57 69 6e 64 6f  (sqlite3*, Windo
269a0 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  w*);.void sqlite
269b0 33 57 69 6e 64 6f 77 4c 69 73 74 44 65 6c 65 74  3WindowListDelet
269c0 65 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57  e(sqlite3 *db, W
269d0 69 6e 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64 6f  indow *p);.Windo
269e0 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  w *sqlite3Window
269f0 41 6c 6c 6f 63 28 50 61 72 73 65 2a 2c 20 69 6e  Alloc(Parse*, in
26a00 74 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 69  t, int, Expr*, i
26a10 6e 74 20 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  nt , Expr*);.voi
26a20 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41  d sqlite3WindowA
26a30 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  ttach(Parse*, Ex
26a40 70 72 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 69  pr*, Window*);.i
26a50 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  nt sqlite3Window
26a60 43 6f 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 20  Compare(Parse*, 
26a70 57 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a  Window*, Window*
26a80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
26a90 69 6e 64 6f 77 43 6f 64 65 49 6e 69 74 28 50 61  indowCodeInit(Pa
26aa0 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a  rse*, Window*);.
26ab0 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64  void sqlite3Wind
26ac0 6f 77 43 6f 64 65 53 74 65 70 28 50 61 72 73 65  owCodeStep(Parse
26ad0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 57 68 65 72  *, Select*, Wher
26ae0 65 49 6e 66 6f 2a 2c 20 69 6e 74 2c 20 69 6e 74  eInfo*, int, int
26af0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 69  );.int sqlite3Wi
26b00 6e 64 6f 77 52 65 77 72 69 74 65 28 50 61 72 73  ndowRewrite(Pars
26b10 65 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  e*, Select*);.in
26b20 74 20 73 71 6c 69 74 65 33 45 78 70 61 6e 64 53  t sqlite3ExpandS
26b30 75 62 71 75 65 72 79 28 50 61 72 73 65 2a 2c 20  ubquery(Parse*, 
26b40 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
26b50 74 65 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  tem*);.void sqli
26b60 74 65 33 57 69 6e 64 6f 77 55 70 64 61 74 65 28  te3WindowUpdate(
26b70 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c  Parse*, Window*,
26b80 20 57 69 6e 64 6f 77 2a 2c 20 46 75 6e 63 44 65   Window*, FuncDe
26b90 66 2a 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c  f*);.Window *sql
26ba0 69 74 65 33 57 69 6e 64 6f 77 44 75 70 28 73 71  ite3WindowDup(sq
26bb0 6c 69 74 65 33 20 2a 64 62 2c 20 45 78 70 72 20  lite3 *db, Expr 
26bc0 2a 70 4f 77 6e 65 72 2c 20 57 69 6e 64 6f 77 20  *pOwner, Window 
26bd0 2a 70 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c  *p);.Window *sql
26be0 69 74 65 33 57 69 6e 64 6f 77 4c 69 73 74 44 75  ite3WindowListDu
26bf0 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57  p(sqlite3 *db, W
26c00 69 6e 64 6f 77 20 2a 70 29 3b 0a 76 6f 69 64 20  indow *p);.void 
26c10 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e  sqlite3WindowFun
26c20 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 23 65  ctions(void);.#e
26c30 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
26c40 69 74 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65  ite3WindowDelete
26c50 28 61 2c 62 29 0a 23 20 64 65 66 69 6e 65 20 73  (a,b).# define s
26c60 71 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63  qlite3WindowFunc
26c70 74 69 6f 6e 73 28 29 0a 23 20 64 65 66 69 6e 65  tions().# define
26c80 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74   sqlite3WindowAt
26c90 74 61 63 68 28 61 2c 62 2c 63 29 0a 23 65 6e 64  tach(a,b,c).#end
26ca0 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69  if../*.** Assumi
26cb0 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f  ng zIn points to
26cc0 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
26cd0 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61  of a UTF-8 chara
26ce0 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65  cter,.** advance
26cf0 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f   zIn to point to
26d00 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
26d10 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d  of the next UTF-
26d20 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a  8 character..*/.
26d30 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
26d40 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20  KIP_UTF8(zIn) { 
26d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d60 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28         \.  if( (
26d70 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20  *(zIn++))>=0xc0 
26d80 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ){              
26d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26da0 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a  \.    while( (*z
26db0 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30  In & 0xc0)==0x80
26dc0 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20   ){ zIn++; }    
26dd0 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20           \.  }  
26de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e10 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65    \.}../*.** The
26e20 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d   SQLITE_*_BKPT m
26e30 61 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69  acros are substi
26e40 74 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72  tutes for the er
26e50 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a  ror codes with.*
26e60 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  * the same name 
26e70 62 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20  but without the 
26e80 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54  _BKPT suffix.  T
26e90 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f  hese macros invo
26ea0 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74  ke.** routines t
26eb0 68 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c  hat report the l
26ec0 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68  ine-number on wh
26ed0 69 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72  ich the error or
26ee0 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e  iginated.** usin
26ef0 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e  g sqlite3_log().
26f00 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61    The routines a
26f10 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f  lso provide a co
26f20 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a  nvenient place.*
26f30 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67  * to set a debug
26f40 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a  ger breakpoint..
26f50 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  */.int sqlite3Re
26f60 70 6f 72 74 45 72 72 6f 72 28 69 6e 74 20 69 45  portError(int iE
26f70 72 72 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20  rr, int lineno, 
26f80 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70  const char *zTyp
26f90 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  e);.int sqlite3C
26fa0 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29  orruptError(int)
26fb0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73  ;.int sqlite3Mis
26fc0 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69  useError(int);.i
26fd0 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70  nt sqlite3Cantop
26fe0 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64  enError(int);.#d
26ff0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52  efine SQLITE_COR
27000 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65  RUPT_BKPT sqlite
27010 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f  3CorruptError(__
27020 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
27030 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b  SQLITE_MISUSE_BK
27040 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65  PT sqlite3Misuse
27050 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
27060 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
27070 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c  ANTOPEN_BKPT sql
27080 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f  ite3CantopenErro
27090 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64  r(__LINE__).#ifd
270a0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
270b0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d    int sqlite3Nom
270c0 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20  emError(int);.  
270d0 69 6e 74 20 73 71 6c 69 74 65 33 49 6f 65 72 72  int sqlite3Ioerr
270e0 6e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b  nomemError(int);
270f0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  .  int sqlite3Co
27100 72 72 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 69  rruptPgnoError(i
27110 6e 74 2c 50 67 6e 6f 29 3b 0a 23 20 64 65 66 69  nt,Pgno);.# defi
27120 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f  ne SQLITE_NOMEM_
27130 42 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65  BKPT sqlite3Nome
27140 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  mError(__LINE__)
27150 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
27160 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50  _IOERR_NOMEM_BKP
27170 54 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f  T sqlite3Ioerrno
27180 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  memError(__LINE_
27190 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  _).# define SQLI
271a0 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28  TE_CORRUPT_PGNO(
271b0 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  P) sqlite3Corrup
271c0 74 50 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e  tPgnoError(__LIN
271d0 45 5f 5f 2c 28 50 29 29 0a 23 65 6c 73 65 0a 23  E__,(P)).#else.#
271e0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
271f0 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45  OMEM_BKPT SQLITE
27200 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20  _NOMEM.# define 
27210 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
27220 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 49  EM_BKPT SQLITE_I
27230 4f 45 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66  OERR_NOMEM.# def
27240 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
27250 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74  PT_PGNO(P) sqlit
27260 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f  e3CorruptError(_
27270 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6e 64 69 66 0a  _LINE__).#endif.
27280 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20  ./*.** FTS3 and 
27290 46 54 53 34 20 62 6f 74 68 20 72 65 71 75 69 72  FTS4 both requir
272a0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
272b0 73 75 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64  support.*/.#if d
272c0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
272d0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
272e0 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
272f0 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e  ENABLE_FTS3.# un
27300 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
27310 45 5f 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f  E_FTS4.#endif../
27320 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61  *.** FTS4 is rea
27330 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e  lly an extension
27340 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69   for FTS3.  It i
27350 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20  s enabled using 
27360 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e  the.** SQLITE_EN
27370 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e  ABLE_FTS3 macro.
27380 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63    But to avoid c
27390 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f  onfusion we also
273a0 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c   call.** the SQL
273b0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20  ITE_ENABLE_FTS4 
273c0 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61  macro to serve a
273d0 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53  s an alias for S
273e0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
273f0 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  3..*/.#if define
27400 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
27410 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e 65  FTS4) && !define
27420 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
27430 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53  FTS3).# define S
27440 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
27450 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  3 1.#endif../*.*
27460 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65  * The ctype.h he
27470 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66  ader is needed f
27480 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73  or non-ASCII sys
27490 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73  tems.  It is als
274a0 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46  o.** needed by F
274b0 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73  TS3 when FTS3 is
274c0 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65   included in the
274d0 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a   amalgamation..*
274e0 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
274f0 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20  QLITE_ASCII) || 
27500 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53  \.    (defined(S
27510 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
27520 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  3) && defined(SQ
27530 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
27540 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63  N)).# include <c
27550 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a  type.h>.#endif..
27560 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
27570 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63  ing macros mimic
27580 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69   the standard li
27590 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20  brary functions 
275a0 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73  toupper(),.** is
275b0 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d  space(), isalnum
275c0 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e  (), isdigit() an
275d0 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65  d isxdigit(), re
275e0 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a  spectively. The.
275f0 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f  ** sqlite versio
27600 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72  ns only work for
27610 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
27620 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  s, regardless of
27630 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64   locale..*/.#ifd
27640 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a  ef SQLITE_ASCII.
27650 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27660 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29  Toupper(x)  ((x)
27670 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d  &~(sqlite3CtypeM
27680 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
27690 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20  r)(x)]&0x20)).# 
276a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
276b0 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69  space(x)   (sqli
276c0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
276d0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
276e0 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73  0x01).# define s
276f0 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
27700 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
27710 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
27720 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20  ar)(x)]&0x06).# 
27730 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
27740 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69  alpha(x)   (sqli
27750 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
27760 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
27770 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73  0x02).# define s
27780 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
27790 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
277a0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
277b0 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20  ar)(x)]&0x04).# 
277c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
277d0 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69  xdigit(x)  (sqli
277e0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
277f0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
27800 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73  0x08).# define s
27810 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
27820 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72     (sqlite3Upper
27830 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65  ToLower[(unsigne
27840 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 20 64  d char)(x)]).# d
27850 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71  efine sqlite3Isq
27860 75 6f 74 65 28 78 29 20 20 20 28 73 71 6c 69 74  uote(x)   (sqlit
27870 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
27880 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
27890 78 38 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  x80).#else.# def
278a0 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
278b0 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72 28  er(x)   toupper(
278c0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
278d0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
278e0 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20  ite3Isspace(x)  
278f0 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e   isspace((unsign
27900 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
27910 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
27920 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75  lnum(x)   isalnu
27930 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  m((unsigned char
27940 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
27950 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
27960 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69     isalpha((unsi
27970 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
27980 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
27990 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64 69  sdigit(x)   isdi
279a0 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68  git((unsigned ch
279b0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
279c0 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
279d0 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28 75  (x)  isxdigit((u
279e0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
279f0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27a00 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74  e3Tolower(x)   t
27a10 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64  olower((unsigned
27a20 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
27a30 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f  ine sqlite3Isquo
27a40 74 65 28 78 29 20 20 20 28 28 78 29 3d 3d 27 22  te(x)   ((x)=='"
27a50 27 7c 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78  '||(x)=='\''||(x
27a60 29 3d 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27  )=='['||(x)=='`'
27a70 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ).#endif.int sql
27a80 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38 29  ite3IsIdChar(u8)
27a90 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61  ;../*.** Interna
27aa0 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f  l function proto
27ab0 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c  types.*/.int sql
27ac0 69 74 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73  ite3StrICmp(cons
27ad0 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
27ae0 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
27af0 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20  3Strlen30(const 
27b00 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20  char*);.#define 
27b10 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 4e  sqlite3Strlen30N
27b20 4e 28 43 29 20 28 73 74 72 6c 65 6e 28 43 29 26  N(C) (strlen(C)&
27b30 30 78 33 66 66 66 66 66 66 66 29 0a 63 68 61 72  0x3fffffff).char
27b40 20 2a 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54   *sqlite3ColumnT
27b50 79 70 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72  ype(Column*,char
27b60 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  *);.#define sqli
27b70 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69  te3StrNICmp sqli
27b80 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e  te3_strnicmp..in
27b90 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49  t sqlite3MallocI
27ba0 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  nit(void);.void 
27bb0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64  sqlite3MallocEnd
27bc0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71  (void);.void *sq
27bd0 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29  lite3Malloc(u64)
27be0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d  ;.void *sqlite3M
27bf0 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a  allocZero(u64);.
27c00 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
27c10 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65  allocZero(sqlite
27c20 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a  3*, u64);.void *
27c30 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
27c40 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  aw(sqlite3*, u64
27c50 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
27c60 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71  DbMallocRawNN(sq
27c70 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68  lite3*, u64);.ch
27c80 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72  ar *sqlite3DbStr
27c90 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
27ca0 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
27cb0 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75  *sqlite3DbStrNDu
27cc0 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
27cd0 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 63 68   char*, u64);.ch
27ce0 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 70 61  ar *sqlite3DbSpa
27cf0 6e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  nDup(sqlite3*,co
27d00 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
27d10 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  char*);.void *sq
27d20 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69  lite3Realloc(voi
27d30 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a  d*, u64);.void *
27d40 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
27d50 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a  OrFree(sqlite3 *
27d60 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a  , void *, u64);.
27d70 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52  void *sqlite3DbR
27d80 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a  ealloc(sqlite3 *
27d90 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a  , void *, u64);.
27da0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72  void sqlite3DbFr
27db0 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  ee(sqlite3*, voi
27dc0 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
27dd0 33 44 62 46 72 65 65 4e 4e 28 73 71 6c 69 74 65  3DbFreeNN(sqlite
27de0 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  3*, void*);.int 
27df0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a  sqlite3MallocSiz
27e00 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  e(void*);.int sq
27e10 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a  lite3DbMallocSiz
27e20 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  e(sqlite3*, void
27e30 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
27e40 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29  3PageMalloc(int)
27e50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
27e60 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76  geFree(void*);.v
27e70 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65  oid sqlite3MemSe
27e80 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a  tDefault(void);.
27e90 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55  #ifndef SQLITE_U
27ea0 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73  NTESTABLE.void s
27eb0 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c  qlite3BenignMall
27ec0 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29  ocHooks(void (*)
27ed0 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29  (void), void (*)
27ee0 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a  (void));.#endif.
27ef0 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e  int sqlite3HeapN
27f00 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b  earlyFull(void);
27f10 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65  ../*.** On syste
27f20 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74  ms with ample st
27f30 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68  ack space and th
27f40 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63  at support alloc
27f50 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65  a(), make.** use
27f60 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20   of alloca() to 
27f70 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72  obtain space for
27f80 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63   large automatic
27f90 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65   objects.  By de
27fa0 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e  fault,.** obtain
27fb0 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c   space from mall
27fc0 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  oc()..**.** The 
27fd0 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65  alloca() routine
27fe0 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e   never returns N
27ff0 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ULL.  This will 
28000 63 61 75 73 65 20 63 6f 64 65 20 70 61 74 68 73  cause code paths
28010 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69  .** that deal wi
28020 74 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  th sqlite3StackA
28030 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20  lloc() failures 
28040 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c  to be unreachabl
28050 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
28060 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23  ITE_USE_ALLOCA.#
28070 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
28080 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e  tackAllocRaw(D,N
28090 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20  )   alloca(N).# 
280a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
280b0 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  ackAllocZero(D,N
280c0 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61  )  memset(alloca
280d0 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66  (N), 0, N).# def
280e0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
280f0 46 72 65 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a  Free(D,P).#else.
28100 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28110 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c  StackAllocRaw(D,
28120 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61  N)   sqlite3DbMa
28130 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64  llocRaw(D,N).# d
28140 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
28150 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
28160 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
28170 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66  cZero(D,N).# def
28180 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
28190 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20  Free(D,P)       
281a0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c  sqlite3DbFree(D,
281b0 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f  P).#endif../* Do
281c0 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20   not allow both 
281d0 4d 45 4d 53 59 53 35 20 61 6e 64 20 4d 45 4d 53  MEMSYS5 and MEMS
281e0 59 53 33 20 74 6f 20 62 65 20 64 65 66 69 6e 65  YS3 to be define
281f0 64 20 74 6f 67 65 74 68 65 72 2e 20 20 49 66 20  d together.  If 
28200 74 68 65 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73  they.** are, dis
28210 61 62 6c 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a  able MEMSYS3.*/.
28220 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
28230 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e  ABLE_MEMSYS5.con
28240 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
28250 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
28260 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69  emGetMemsys5(voi
28270 64 29 3b 0a 23 75 6e 64 65 66 20 53 51 4c 49 54  d);.#undef SQLIT
28280 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33  E_ENABLE_MEMSYS3
28290 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
282a0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
282b0 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS3.const sqlit
282c0 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
282d0 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
282e0 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64  sys3(void);.#end
282f0 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  if...#ifndef SQL
28300 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20  ITE_MUTEX_OMIT. 
28310 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
28320 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71  ethods const *sq
28330 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65  lite3DefaultMute
28340 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
28350 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
28360 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e   const *sqlite3N
28370 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  oopMutex(void);.
28380 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
28390 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c  *sqlite3MutexAll
283a0 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  oc(int);.  int s
283b0 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28  qlite3MutexInit(
283c0 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c  void);.  int sql
283d0 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69  ite3MutexEnd(voi
283e0 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21  d);.#endif.#if !
283f0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
28400 55 54 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64  UTEX_OMIT) && !d
28410 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55  efined(SQLITE_MU
28420 54 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64  TEX_NOOP).  void
28430 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61   sqlite3MemoryBa
28440 72 72 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c  rrier(void);.#el
28450 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
28460 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72  te3MemoryBarrier
28470 28 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74  ().#endif..sqlit
28480 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33  e3_int64 sqlite3
28490 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29  StatusValue(int)
284a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
284b0 61 74 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29  atusUp(int, int)
284c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
284d0 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e  atusDown(int, in
284e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
284f0 53 74 61 74 75 73 48 69 67 68 77 61 74 65 72 28  StatusHighwater(
28500 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
28510 71 6c 69 74 65 33 4c 6f 6f 6b 61 73 69 64 65 55  qlite3LookasideU
28520 73 65 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  sed(sqlite3*,int
28530 2a 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74  *);../* Access t
28540 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64 20 62  o mutexes used b
28550 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73  y sqlite3_status
28560 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75  () */.sqlite3_mu
28570 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63  tex *sqlite3Pcac
28580 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  he1Mutex(void);.
28590 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
285a0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65  qlite3MallocMute
285b0 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 20 64 65  x(void);..#if de
285c0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
285d0 42 4c 45 5f 4d 55 4c 54 49 54 48 52 45 41 44 45  BLE_MULTITHREADE
285e0 44 5f 43 48 45 43 4b 53 29 20 26 26 20 21 64 65  D_CHECKS) && !de
285f0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
28600 45 58 5f 4f 4d 49 54 29 0a 76 6f 69 64 20 73 71  EX_OMIT).void sq
28610 6c 69 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e  lite3MutexWarnOn
28620 43 6f 6e 74 65 6e 74 69 6f 6e 28 73 71 6c 69 74  Contention(sqlit
28630 65 33 5f 6d 75 74 65 78 2a 29 3b 0a 23 65 6c 73  e3_mutex*);.#els
28640 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
28650 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e  e3MutexWarnOnCon
28660 74 65 6e 74 69 6f 6e 28 78 29 0a 23 65 6e 64 69  tention(x).#endi
28670 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
28680 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
28690 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69  POINT.  int sqli
286a0 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29  te3IsNaN(double)
286b0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
286c0 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29   sqlite3IsNaN(X)
286d0 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    0.#endif../*.*
286e0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
286f0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
28700 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69  tructure holds i
28710 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
28720 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   SQL.** function
28730 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74  s arguments that
28740 20 61 72 65 20 74 68 65 20 70 61 72 61 6d 65 74   are the paramet
28750 65 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74  ers to the print
28760 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f  f() function..*/
28770 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72  .struct PrintfAr
28780 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20  guments {.  int 
28790 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
287a0 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75       /* Total nu
287b0 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
287c0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64  s */.  int nUsed
287d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
287e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
287f0 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66  uments used so f
28800 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ar */.  sqlite3_
28810 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20  value **apArg;  
28820 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74   /* The argument
28830 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 63   values */.};..c
28840 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69  har *sqlite3MPri
28850 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ntf(sqlite3*,con
28860 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
28870 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50  char *sqlite3VMP
28880 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63  rintf(sqlite3*,c
28890 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c  onst char*, va_l
288a0 69 73 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65  ist);.#if define
288b0 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
288c0 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
288d0 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29  E_HAVE_OS_TRACE)
288e0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
288f0 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74  ebugPrintf(const
28900 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65   char*, ...);.#e
28910 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
28920 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20  (SQLITE_TEST).  
28930 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73  void *sqlite3Tes
28940 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74  tTextToPtr(const
28950 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
28960 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
28970 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69  ITE_DEBUG).  voi
28980 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
28990 77 45 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c  wExpr(TreeView*,
289a0 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38   const Expr*, u8
289b0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
289c0 33 54 72 65 65 56 69 65 77 42 61 72 65 45 78 70  3TreeViewBareExp
289d0 72 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c  rList(TreeView*,
289e0 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a   const ExprList*
289f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
28a00 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
28a10 65 65 56 69 65 77 45 78 70 72 4c 69 73 74 28 54  eeViewExprList(T
28a20 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
28a30 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63  ExprList*, u8, c
28a40 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
28a50 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
28a60 69 65 77 53 72 63 4c 69 73 74 28 54 72 65 65 56  iewSrcList(TreeV
28a70 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 72 63 4c  iew*, const SrcL
28a80 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ist*);.  void sq
28a90 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 65 6c  lite3TreeViewSel
28aa0 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ect(TreeView*, c
28ab0 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38  onst Select*, u8
28ac0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
28ad0 33 54 72 65 65 56 69 65 77 57 69 74 68 28 54 72  3TreeViewWith(Tr
28ae0 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57  eeView*, const W
28af0 69 74 68 2a 2c 20 75 38 29 3b 0a 23 69 66 6e 64  ith*, u8);.#ifnd
28b00 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
28b10 49 4e 44 4f 57 46 55 4e 43 0a 20 20 76 6f 69 64  INDOWFUNC.  void
28b20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
28b30 57 69 6e 64 6f 77 28 54 72 65 65 56 69 65 77 2a  Window(TreeView*
28b40 2c 20 63 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c  , const Window*,
28b50 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c   u8);.  void sql
28b60 69 74 65 33 54 72 65 65 56 69 65 77 57 69 6e 46  ite3TreeViewWinF
28b70 75 6e 63 28 54 72 65 65 56 69 65 77 2a 2c 20 63  unc(TreeView*, c
28b80 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38  onst Window*, u8
28b90 29 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  );.#endif.#endif
28ba0 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ...void sqlite3S
28bb0 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a  etString(char **
28bc0 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  , sqlite3*, cons
28bd0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
28be0 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50  qlite3ErrorMsg(P
28bf0 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
28c00 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
28c10 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68  qlite3Dequote(ch
28c20 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
28c30 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65  e3TokenInit(Toke
28c40 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  n*,char*);.int s
28c50 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64  qlite3KeywordCod
28c60 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  e(const unsigned
28c70 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
28c80 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73  t sqlite3RunPars
28c90 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  er(Parse*, const
28ca0 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29   char*, char **)
28cb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
28cc0 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65  nishCoding(Parse
28cd0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
28ce0 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  etTempReg(Parse*
28cf0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
28d00 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61  eleaseTempReg(Pa
28d10 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  rse*,int);.int s
28d20 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e  qlite3GetTempRan
28d30 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  ge(Parse*,int);.
28d40 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
28d50 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72  aseTempRange(Par
28d60 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  se*,int,int);.vo
28d70 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54  id sqlite3ClearT
28d80 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73  empRegCache(Pars
28d90 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  e*);.#ifdef SQLI
28da0 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c  TE_DEBUG.int sql
28db0 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e  ite3NoTempsInRan
28dc0 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e  ge(Parse*,int,in
28dd0 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70 72 20  t);.#endif.Expr 
28de0 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f  *sqlite3ExprAllo
28df0 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  c(sqlite3*,int,c
28e00 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29  onst Token*,int)
28e10 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
28e20 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  xpr(sqlite3*,int
28e30 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
28e40 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
28e50 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73 71  ttachSubtrees(sq
28e60 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70  lite3*,Expr*,Exp
28e70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  r*,Expr*);.Expr 
28e80 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50 61  *sqlite3PExpr(Pa
28e90 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a  rse*, int, Expr*
28ea0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
28eb0 71 6c 69 74 65 33 50 45 78 70 72 41 64 64 53 65  qlite3PExprAddSe
28ec0 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70  lect(Parse*, Exp
28ed0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 45 78  r*, Select*);.Ex
28ee0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
28ef0 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  nd(sqlite3*,Expr
28f00 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  *, Expr*);.Expr 
28f10 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63  *sqlite3ExprFunc
28f20 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  tion(Parse*,Expr
28f30 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69  List*, Token*, i
28f40 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28f50 33 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75  3ExprAssignVarNu
28f60 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70  mber(Parse*, Exp
28f70 72 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73  r*, u32);.void s
28f80 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74 65  qlite3ExprDelete
28f90 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a  (sqlite3*, Expr*
28fa0 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
28fb0 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65  ite3ExprListAppe
28fc0 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  nd(Parse*,ExprLi
28fd0 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  st*,Expr*);.Expr
28fe0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
28ff0 72 4c 69 73 74 41 70 70 65 6e 64 56 65 63 74 6f  rListAppendVecto
29000 72 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  r(Parse*,ExprLis
29010 74 2a 2c 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a  t*,IdList*,Expr*
29020 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
29030 78 70 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72  xprListSetSortOr
29040 64 65 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e  der(ExprList*,in
29050 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
29060 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28  ExprListSetName(
29070 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
29080 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
29090 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
290a0 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a  stSetSpan(Parse*
290b0 2c 45 78 70 72 4c 69 73 74 2a 2c 63 6f 6e 73 74  ,ExprList*,const
290c0 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
290d0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
290e0 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28  3ExprListDelete(
290f0 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69  sqlite3*, ExprLi
29100 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  st*);.u32 sqlite
29110 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63  3ExprListFlags(c
29120 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b  onst ExprList*);
29130 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
29140 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a  (sqlite3*, char*
29150 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
29160 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64  nitCallback(void
29170 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20  *, int, char**, 
29180 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  char**);.int sql
29190 69 74 65 33 49 6e 69 74 4f 6e 65 28 73 71 6c 69  ite3InitOne(sqli
291a0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a  te3*, int, char*
291b0 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71  *, u32);.void sq
291c0 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73  lite3Pragma(Pars
291d0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
291e0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69  ,Token*,int);.#i
291f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
29200 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d  T_VIRTUALTABLE.M
29210 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 50 72  odule *sqlite3Pr
29220 61 67 6d 61 56 74 61 62 52 65 67 69 73 74 65 72  agmaVtabRegister
29230 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
29240 63 68 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65  char *zName);.#e
29250 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
29260 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
29270 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c  OfConnection(sql
29280 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
29290 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
292a0 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ma(sqlite3*,int)
292b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
292c0 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72  llapseDatabaseAr
292d0 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ray(sqlite3*);.v
292e0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
292f0 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73  tInternalChanges
29300 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
29310 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f   sqlite3DeleteCo
29320 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65  lumnNames(sqlite
29330 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20  3*,Table*);.int 
29340 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72  sqlite3ColumnsFr
29350 6f 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  omExprList(Parse
29360 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a  *,ExprList*,i16*
29370 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64  ,Column**);.void
29380 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 41 64   sqlite3SelectAd
29390 64 43 6f 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f  dColumnTypeAndCo
293a0 6c 6c 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54  llation(Parse*,T
293b0 61 62 6c 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  able*,Select*);.
293c0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65  Table *sqlite3Re
293d0 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28  sultSetOfSelect(
293e0 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Parse*,Select*);
293f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
29400 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
29410 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65  se *, int);.Inde
29420 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72  x *sqlite3Primar
29430 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a  yKeyIndex(Table*
29440 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f  );.i16 sqlite3Co
29450 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65  lumnOfIndex(Inde
29460 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73  x*, i16);.void s
29470 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
29480 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
29490 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
294a0 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49  t,int);.#if SQLI
294b0 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e  TE_ENABLE_HIDDEN
294c0 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20  _COLUMNS.  void 
294d0 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f  sqlite3ColumnPro
294e0 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28  pertiesFromName(
294f0 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29  Table*, Column*)
29500 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
29510 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72   sqlite3ColumnPr
29520 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65  opertiesFromName
29530 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  (T,C) /* no-op *
29540 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  /.#endif.void sq
29550 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50  lite3AddColumn(P
29560 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
29570 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
29580 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72  e3AddNotNull(Par
29590 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
295a0 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72  sqlite3AddPrimar
295b0 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  yKey(Parse*, Exp
295c0 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
295d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
295e0 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73  ite3AddCheckCons
295f0 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45  traint(Parse*, E
29600 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
29610 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c  te3AddDefaultVal
29620 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ue(Parse*,Expr*,
29630 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
29640 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
29650 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65  qlite3AddCollate
29660 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
29670 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
29680 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65  e3EndTable(Parse
29690 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
296a0 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  u8,Select*);.int
296b0 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69   sqlite3ParseUri
296c0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  (const char*,con
296d0 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65  st char*,unsigne
296e0 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20  d int*,.        
296f0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
29700 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a  te3_vfs**,char**
29710 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65  ,char **);.Btree
29720 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54   *sqlite3DbNameT
29730 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  oBtree(sqlite3*,
29740 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 0a 23  const char*);..#
29750 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  ifdef SQLITE_UNT
29760 45 53 54 41 42 4c 45 0a 23 20 64 65 66 69 6e 65  ESTABLE.# define
29770 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
29780 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65  (X) SQLITE_OK.#e
29790 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  lse.  int sqlite
297a0 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a  3FaultSim(int);.
297b0 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a  #endif..Bitvec *
297c0 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65  sqlite3BitvecCre
297d0 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71  ate(u32);.int sq
297e0 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28  lite3BitvecTest(
297f0 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
29800 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
29810 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76  TestNotNull(Bitv
29820 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73  ec*, u32);.int s
29830 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74 28  qlite3BitvecSet(
29840 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76  Bitvec*, u32);.v
29850 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65  oid sqlite3Bitve
29860 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20  cClear(Bitvec*, 
29870 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  u32, void*);.voi
29880 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 44  d sqlite3BitvecD
29890 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b  estroy(Bitvec*);
298a0 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74 76  .u32 sqlite3Bitv
298b0 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b  ecSize(Bitvec*);
298c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
298d0 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e 74 20 73  UNTESTABLE.int s
298e0 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c  qlite3BitvecBuil
298f0 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a  tinTest(int,int*
29900 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65  );.#endif..RowSe
29910 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74  t *sqlite3RowSet
29920 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  Init(sqlite3*);.
29930 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
29940 65 74 44 65 6c 65 74 65 28 76 6f 69 64 2a 29 3b  etDelete(void*);
29950 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
29960 53 65 74 43 6c 65 61 72 28 76 6f 69 64 2a 29 3b  SetClear(void*);
29970 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
29980 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74  SetInsert(RowSet
29990 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  *, i64);.int sql
299a0 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52  ite3RowSetTest(R
299b0 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74  owSet*, int iBat
299c0 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  ch, i64);.int sq
299d0 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28  lite3RowSetNext(
299e0 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a  RowSet*, i64*);.
299f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
29a00 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54  ateView(Parse*,T
29a10 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
29a20 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65  en*,ExprList*,Se
29a30 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  lect*,int,int);.
29a40 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
29a50 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
29a60 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  || !defined(SQLI
29a70 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
29a80 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  ABLE).  int sqli
29a90 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
29aa0 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62  Names(Parse*,Tab
29ab0 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
29ac0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77  fine sqlite3View
29ad0 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41  GetColumnNames(A
29ae0 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69  ,B) 0.#endif..#i
29af0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  f SQLITE_MAX_ATT
29b00 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73  ACHED>30.  int s
29b10 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
29b20 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65  ero(yDbMask);.#e
29b30 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
29b40 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  3DropTable(Parse
29b50 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
29b60 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
29b70 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c  ite3CodeDropTabl
29b80 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
29b90 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
29ba0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
29bb0 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
29bc0 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  able*);.void sql
29bd0 69 74 65 33 46 72 65 65 49 6e 64 65 78 28 73 71  ite3FreeIndex(sq
29be0 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b  lite3*, Index*);
29bf0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29c00 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
29c10 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NT.  void sqlite
29c20 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
29c30 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  gin(Parse *pPars
29c40 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  e);.  void sqlit
29c50 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
29c60 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  nd(Parse *pParse
29c70 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
29c80 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
29c90 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23  rementBegin(X).#
29ca0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
29cb0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
29cc0 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  X).#endif.void s
29cd0 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72  qlite3Insert(Par
29ce0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53  se*, SrcList*, S
29cf0 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c  elect*, IdList*,
29d00 20 69 6e 74 2c 20 55 70 73 65 72 74 2a 29 3b 0a   int, Upsert*);.
29d10 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72  void *sqlite3Arr
29d20 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74  ayAllocate(sqlit
29d30 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e  e3*,void*,int,in
29d40 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74  t*,int*);.IdList
29d50 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41   *sqlite3IdListA
29d60 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 20 49 64  ppend(Parse*, Id
29d70 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
29d80 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73  int sqlite3IdLis
29d90 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63  tIndex(IdList*,c
29da0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63  onst char*);.Src
29db0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
29dc0 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69  ListEnlarge(sqli
29dd0 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
29de0 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69  int, int);.SrcLi
29df0 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
29e00 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
29e10 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
29e20 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72  en*, Token*);.Sr
29e30 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
29e40 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54  cListAppendFromT
29e50 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  erm(Parse*, SrcL
29e60 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
29e70 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
29e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e90 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65              Toke
29ea0 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  n*, Select*, Exp
29eb0 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  r*, IdList*);.vo
29ec0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
29ed0 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65  tIndexedBy(Parse
29ee0 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54   *, SrcList *, T
29ef0 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71  oken *);.void sq
29f00 6c 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e 63  lite3SrcListFunc
29f10 41 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72 63  Args(Parse*, Src
29f20 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
29f30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
29f40 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61  dexedByLookup(Pa
29f50 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72  rse *, struct Sr
29f60 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76  cList_item *);.v
29f70 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
29f80 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
29f90 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
29fa0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73  sqlite3SrcListAs
29fb0 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73  signCursors(Pars
29fc0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76  e*, SrcList*);.v
29fd0 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73  oid sqlite3IdLis
29fe0 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
29ff0 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
2a000 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44   sqlite3SrcListD
2a010 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
2a020 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78  SrcList*);.Index
2a030 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74   *sqlite3Allocat
2a040 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c  eIndexObject(sql
2a050 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68  ite3*,i16,int,ch
2a060 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar**);.void sqli
2a070 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50  te3CreateIndex(P
2a080 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
2a090 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  en*,SrcList*,Exp
2a0a0 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e  rList*,int,Token
2a0b0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
2a0d0 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  r*, int, int, u8
2a0e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
2a0f0 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ropIndex(Parse*,
2a100 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
2a110 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65  .int sqlite3Sele
2a120 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ct(Parse*, Selec
2a130 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29  t*, SelectDest*)
2a140 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
2a150 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65  3SelectNew(Parse
2a160 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c  *,ExprList*,SrcL
2a170 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
2a180 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
2a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
2a1a0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75  xpr*,ExprList*,u
2a1b0 33 32 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  32,Expr*);.void 
2a1c0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c  sqlite3SelectDel
2a1d0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65  ete(sqlite3*, Se
2a1e0 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  lect*);.Table *s
2a1f0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f  qlite3SrcListLoo
2a200 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  kup(Parse*, SrcL
2a210 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2a220 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72  e3IsReadOnly(Par
2a230 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2a240 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
2a250 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  penTable(Parse*,
2a260 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69   int iCur, int i
2a270 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  Db, Table*, int)
2a280 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
2a290 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
2a2a0 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29  TE_DELETE_LIMIT)
2a2b0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
2a2c0 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
2a2d0 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  Y).Expr *sqlite3
2a2e0 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65  LimitWhere(Parse
2a2f0 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
2a300 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
2a310 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a  ,char*);.#endif.
2a320 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
2a330 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53  teFrom(Parse*, S
2a340 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  rcList*, Expr*, 
2a350 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
2a360 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
2a370 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72  pdate(Parse*, Sr
2a380 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
2a390 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 45 78 70 72  *,Expr*,int,Expr
2a3a0 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 0a 20 20 20  List*,Expr*,.   
2a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3c0 55 70 73 65 72 74 2a 29 3b 0a 57 68 65 72 65 49  Upsert*);.WhereI
2a3d0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72  nfo *sqlite3Wher
2a3e0 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72  eBegin(Parse*,Sr
2a3f0 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
2a400 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  rList*,ExprList*
2a410 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,u16,int);.void 
2a420 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28  sqlite3WhereEnd(
2a430 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67  WhereInfo*);.Log
2a440 45 73 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  Est sqlite3Where
2a450 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57  OutputRowCount(W
2a460 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
2a470 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
2a480 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f  stinct(WhereInfo
2a490 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
2a4a0 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68  hereIsOrdered(Wh
2a4b0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
2a4c0 71 6c 69 74 65 33 57 68 65 72 65 4f 72 64 65 72  qlite3WhereOrder
2a4d0 42 79 4c 69 6d 69 74 4f 70 74 4c 61 62 65 6c 28  ByLimitOptLabel(
2a4e0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
2a4f0 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53   sqlite3WhereIsS
2a500 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  orted(WhereInfo*
2a510 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
2a520 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c  ereContinueLabel
2a530 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
2a540 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 72  t sqlite3WhereBr
2a550 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e  eakLabel(WhereIn
2a560 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
2a570 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28  3WhereOkOnePass(
2a580 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a  WhereInfo*, int*
2a590 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  );.#define ONEPA
2a5a0 53 53 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20  SS_OFF      0   
2a5b0 20 20 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f       /* Use of O
2a5c0 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77  NEPASS not allow
2a5d0 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e  ed */.#define ON
2a5e0 45 50 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31  EPASS_SINGLE   1
2a5f0 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41          /* ONEPA
2a600 53 53 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73  SS valid for a s
2a610 69 6e 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65  ingle row update
2a620 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50   */.#define ONEP
2a630 41 53 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20  ASS_MULTI    2  
2a640 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53        /* ONEPASS
2a650 20 69 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75   is valid for mu
2a660 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76  ltiple rows */.v
2a670 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
2a680 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75  odeLoadIndexColu
2a690 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78  mn(Parse*, Index
2a6a0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2a6b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2a6c0 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28  prCodeGetColumn(
2a6d0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2a6e0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  int, int, int, u
2a6f0 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
2a700 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
2a710 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20  nOfTable(Vdbe*, 
2a720 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
2a730 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2a740 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65  ite3ExprCodeMove
2a750 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
2a760 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2a770 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61  lite3ExprCode(Pa
2a780 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2a790 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a7a0 78 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72 73  xprCodeCopy(Pars
2a7b0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
2a7c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2a7d0 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28  rCodeFactorable(
2a7e0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2a7f0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2a800 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50  ExprCodeAtInit(P
2a810 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2a820 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2a830 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73  xprCodeTemp(Pars
2a840 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29  e*, Expr*, int*)
2a850 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2a860 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73  rCodeTarget(Pars
2a870 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
2a880 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2a890 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61  rCodeAndCache(Pa
2a8a0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2a8b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2a8c0 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50  prCodeExprList(P
2a8d0 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
2a8e0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
2a8f0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2a900 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78  ECEL_DUP      0x
2a910 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74  01  /* Deep, not
2a920 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20   shallow copies 
2a930 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
2a940 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20  E_ECEL_FACTOR   
2a950 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20  0x02  /* Factor 
2a960 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72  out constant ter
2a970 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ms */.#define SQ
2a980 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20  LITE_ECEL_REF   
2a990 20 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20     0x04  /* Use 
2a9a0 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72  ExprList.u.x.iOr
2a9b0 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66  derByCol */.#def
2a9c0 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
2a9d0 4f 4d 49 54 52 45 46 20 20 30 78 30 38 20 20 2f  OMITREF  0x08  /
2a9e0 2a 20 4f 6d 69 74 20 69 66 20 45 78 70 72 4c 69  * Omit if ExprLi
2a9f0 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43  st.u.x.iOrderByC
2aa00 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  ol */.void sqlit
2aa10 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72  e3ExprIfTrue(Par
2aa20 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
2aa30 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2aa40 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50  te3ExprIfFalse(P
2aa50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2aa60 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2aa70 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
2aa80 44 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Dup(Parse*, Expr
2aa90 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61  *, int, int);.Ta
2aaa0 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  ble *sqlite3Find
2aab0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63  Table(sqlite3*,c
2aac0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2aad0 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  t char*);.#defin
2aae0 65 20 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20  e LOCATE_VIEW   
2aaf0 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f   0x01.#define LO
2ab00 43 41 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30  CATE_NOERR   0x0
2ab10 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  2.Table *sqlite3
2ab20 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73  LocateTable(Pars
2ab30 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e  e*,u32 flags,con
2ab40 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2ab50 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  char*);.Table *s
2ab60 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
2ab70 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32  eItem(Parse*,u32
2ab80 20 66 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72   flags,struct Sr
2ab90 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49  cList_item *);.I
2aba0 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e  ndex *sqlite3Fin
2abb0 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  dIndex(sqlite3*,
2abc0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2abd0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2abe0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2abf0 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
2ac00 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
2ac10 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2ac20 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
2ac30 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  teIndex(sqlite3*
2ac40 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
2ac50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2ac60 61 63 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b  acuum(Parse*,Tok
2ac70 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2ac80 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a  3RunVacuum(char*
2ac90 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  *, sqlite3*, int
2aca0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
2acb0 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71  NameFromToken(sq
2acc0 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
2acd0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2ace0 43 6f 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 45  Compare(Parse*,E
2acf0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
2ad00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2ad10 70 72 43 6f 6d 70 61 72 65 53 6b 69 70 28 45 78  prCompareSkip(Ex
2ad20 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
2ad30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2ad40 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70  rListCompare(Exp
2ad50 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  rList*, ExprList
2ad60 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2ad70 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45  ite3ExprImpliesE
2ad80 78 70 72 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  xpr(Parse*,Expr*
2ad90 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
2ada0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d  nt sqlite3ExprIm
2adb0 70 6c 69 65 73 4e 6f 6e 4e 75 6c 6c 52 6f 77 28  pliesNonNullRow(
2adc0 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  Expr*,int);.void
2add0 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
2ade0 79 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61  yzeAggregates(Na
2adf0 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
2ae00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ae10 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69  ExprAnalyzeAggLi
2ae20 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  st(NameContext*,
2ae30 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
2ae40 73 71 6c 69 74 65 33 45 78 70 72 43 6f 76 65 72  sqlite3ExprCover
2ae50 65 64 42 79 49 6e 64 65 78 28 45 78 70 72 2a 2c  edByIndex(Expr*,
2ae60 20 69 6e 74 20 69 43 75 72 2c 20 49 6e 64 65 78   int iCur, Index
2ae70 20 2a 70 49 64 78 29 3b 0a 69 6e 74 20 73 71 6c   *pIdx);.int sql
2ae80 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73  ite3FunctionUses
2ae90 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53  ThisSrc(Expr*, S
2aea0 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a  rcList*);.Vdbe *
2aeb0 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50  sqlite3GetVdbe(P
2aec0 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20  arse*);.#ifndef 
2aed0 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
2aee0 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  E.void sqlite3Pr
2aef0 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64  ngSaveState(void
2af00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
2af10 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28  rngRestoreState(
2af20 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  void);.#endif.vo
2af30 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
2af40 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69  ckAll(sqlite3*,i
2af50 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2af60 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
2af70 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  a(Parse*, int);.
2af80 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
2af90 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d  VerifyNamedSchem
2afa0 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  a(Parse*, const 
2afb0 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64  char *zDb);.void
2afc0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61   sqlite3BeginTra
2afd0 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsaction(Parse*,
2afe0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2aff0 74 65 33 45 6e 64 54 72 61 6e 73 61 63 74 69 6f  te3EndTransactio
2b000 6e 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  n(Parse*,int);.v
2b010 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70  oid sqlite3Savep
2b020 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  oint(Parse*, int
2b030 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2b040 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
2b050 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a  points(sqlite3 *
2b060 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c  );.void sqlite3L
2b070 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73  eaveMutexAndClos
2b080 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a  eZombie(sqlite3*
2b090 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2b0a0 70 72 49 64 54 6f 54 72 75 65 46 61 6c 73 65 28  prIdToTrueFalse(
2b0b0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2b0c0 74 65 33 45 78 70 72 54 72 75 74 68 56 61 6c 75  te3ExprTruthValu
2b0d0 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a  e(const Expr*);.
2b0e0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2b0f0 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29  sConstant(Expr*)
2b100 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2b110 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f  rIsConstantNotJo
2b120 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  in(Expr*);.int s
2b130 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
2b140 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45  tantOrFunction(E
2b150 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73  xpr*, u8);.int s
2b160 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
2b170 74 61 6e 74 4f 72 47 72 6f 75 70 42 79 28 50 61  tantOrGroupBy(Pa
2b180 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  rse*, Expr*, Exp
2b190 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
2b1a0 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43  ite3ExprIsTableC
2b1b0 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e  onstant(Expr*,in
2b1c0 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
2b1d0 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f  E_ENABLE_CURSOR_
2b1e0 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65  HINTS.int sqlite
2b1f0 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62  3ExprContainsSub
2b200 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65  query(Expr*);.#e
2b210 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2b220 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78  ExprIsInteger(Ex
2b230 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
2b240 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65  sqlite3ExprCanBe
2b250 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a  Null(const Expr*
2b260 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2b270 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74  prNeedsNoAffinit
2b280 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78  yChange(const Ex
2b290 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20  pr*, char);.int 
2b2a0 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63  sqlite3IsRowid(c
2b2b0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 69 66  onst char*);.#if
2b2c0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2b2d0 45 5f 4e 4f 52 4d 41 4c 49 5a 45 0a 69 6e 74 20  E_NORMALIZE.int 
2b2e0 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 4e 28  sqlite3IsRowidN(
2b2f0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
2b300 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
2b310 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
2b320 77 44 65 6c 65 74 65 28 0a 20 20 20 20 50 61 72  wDelete(.    Par
2b330 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67  se*,Table*,Trigg
2b340 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  er*,int,int,int,
2b350 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74  i16,u8,u8,u8,int
2b360 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
2b370 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44  enerateRowIndexD
2b380 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61  elete(Parse*, Ta
2b390 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
2b3a0 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  int*, int);.int 
2b3b0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49  sqlite3GenerateI
2b3c0 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20  ndexKey(Parse*, 
2b3d0 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74  Index*, int, int
2b3e0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65  , int, int*,Inde
2b3f0 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  x*,int);.void sq
2b400 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74  lite3ResolvePart
2b410 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c  IdxLabel(Parse*,
2b420 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2b430 33 45 78 70 72 52 65 66 65 72 65 6e 63 65 73 55  3ExprReferencesU
2b440 70 64 61 74 65 64 43 6f 6c 75 6d 6e 28 45 78 70  pdatedColumn(Exp
2b450 72 2a 2c 69 6e 74 2a 2c 69 6e 74 29 3b 0a 76 6f  r*,int*,int);.vo
2b460 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
2b470 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63  teConstraintChec
2b480 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ks(Parse*,Table*
2b490 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  ,int*,int,int,in
2b4a0 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20  t,int,.         
2b4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b4c0 20 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75              u8,u
2b4d0 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 2c  8,int,int*,int*,
2b4e0 55 70 73 65 72 74 2a 29 3b 0a 23 69 66 64 65 66  Upsert*);.#ifdef
2b4f0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e   SQLITE_ENABLE_N
2b500 55 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f 69 64 20  ULL_TRIM.  void 
2b510 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65  sqlite3SetMakeRe
2b520 63 6f 72 64 50 35 28 56 64 62 65 2a 2c 54 61 62  cordP5(Vdbe*,Tab
2b530 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
2b540 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 74 4d  fine sqlite3SetM
2b550 61 6b 65 52 65 63 6f 72 64 50 35 28 41 2c 42 29  akeRecordP5(A,B)
2b560 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2b570 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65  ite3CompleteInse
2b580 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62  rtion(Parse*,Tab
2b590 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  le*,int,int,int,
2b5a0 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
2b5b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
2b5c0 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65  enTableAndIndice
2b5d0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
2b5e0 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20  , int, u8, int, 
2b5f0 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  u8*, int*, int*)
2b600 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
2b610 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
2b620 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  n(Parse*, int, i
2b630 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2b640 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73  3MultiWrite(Pars
2b650 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2b660 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a  3MayAbort(Parse*
2b670 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48  );.void sqlite3H
2b680 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  altConstraint(Pa
2b690 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
2b6a0 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a  char*, i8, u8);.
2b6b0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71  void sqlite3Uniq
2b6c0 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ueConstraint(Par
2b6d0 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a  se*, int, Index*
2b6e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2b6f0 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50  owidConstraint(P
2b700 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c  arse*, int, Tabl
2b710 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  e*);.Expr *sqlit
2b720 65 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65  e3ExprDup(sqlite
2b730 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45  3*,Expr*,int);.E
2b740 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
2b750 45 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69  ExprListDup(sqli
2b760 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  te3*,ExprList*,i
2b770 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
2b780 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28  lite3SrcListDup(
2b790 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74  sqlite3*,SrcList
2b7a0 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a  *,int);.IdList *
2b7b0 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70  sqlite3IdListDup
2b7c0 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74  (sqlite3*,IdList
2b7d0 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
2b7e0 74 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c  te3SelectDup(sql
2b7f0 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  ite3*,Select*,in
2b800 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  t);.FuncDef *sql
2b810 69 74 65 33 46 75 6e 63 74 69 6f 6e 53 65 61 72  ite3FunctionSear
2b820 63 68 28 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  ch(int,const cha
2b830 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2b840 33 49 6e 73 65 72 74 42 75 69 6c 74 69 6e 46 75  3InsertBuiltinFu
2b850 6e 63 73 28 46 75 6e 63 44 65 66 2a 2c 69 6e 74  ncs(FuncDef*,int
2b860 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
2b870 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28  te3FindFunction(
2b880 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
2b890 68 61 72 2a 2c 69 6e 74 2c 75 38 2c 75 38 29 3b  har*,int,u8,u8);
2b8a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
2b8b0 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63  isterBuiltinFunc
2b8c0 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
2b8d0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
2b8e0 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f  rDateTimeFunctio
2b8f0 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
2b900 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 50 65  qlite3RegisterPe
2b910 72 43 6f 6e 6e 65 63 74 69 6f 6e 42 75 69 6c 74  rConnectionBuilt
2b920 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  inFunctions(sqli
2b930 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
2b940 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
2b950 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
2b960 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
2b970 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65  kSickOrOk(sqlite
2b980 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
2b990 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61  3ChangeCookie(Pa
2b9a0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66  rse*, int);..#if
2b9b0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2b9c0 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21  _OMIT_VIEW) && !
2b9d0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2b9e0 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69  MIT_TRIGGER).voi
2b9f0 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61  d sqlite3Materia
2ba00 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c  lizeView(Parse*,
2ba10 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
2ba20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
2ba30 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  int);.#endif..#i
2ba40 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2ba50 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64  T_TRIGGER.  void
2ba60 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69   sqlite3BeginTri
2ba70 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b  gger(Parse*, Tok
2ba80 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
2ba90 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69  nt,IdList*,SrcLi
2baa0 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
2bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bac0 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b  Expr*,int, int);
2bad0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
2bae0 69 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72  inishTrigger(Par
2baf0 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  se*, TriggerStep
2bb00 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f  *, Token*);.  vo
2bb10 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
2bb20 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72  igger(Parse*, Sr
2bb30 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  cList*, int);.  
2bb40 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
2bb50 54 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65  TriggerPtr(Parse
2bb60 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
2bb70 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
2bb80 54 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61  TriggersExist(Pa
2bb90 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  rse *, Table*, i
2bba0 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
2bbb0 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72  nt *pMask);.  Tr
2bbc0 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
2bbd0 69 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20  iggerList(Parse 
2bbe0 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76  *, Table *);.  v
2bbf0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
2bc00 6f 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  owTrigger(Parse*
2bc10 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74  , Trigger *, int
2bc20 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2bc30 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20  , Table *,.     
2bc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc50 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c         int, int,
2bc60 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2bc70 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
2bc80 67 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20  gerDirect(Parse 
2bc90 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61  *, Trigger *, Ta
2bca0 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ble *, int, int,
2bcb0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2bcc0 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73  liteViewTriggers
2bcd0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2bce0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70   Expr*, int, Exp
2bcf0 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20  rList*);.  void 
2bd00 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
2bd10 67 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33  ggerStep(sqlite3
2bd20 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
2bd30 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
2bd40 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53  *sqlite3TriggerS
2bd50 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65  electStep(sqlite
2bd60 33 2a 2c 53 65 6c 65 63 74 2a 2c 0a 20 20 20 20  3*,Select*,.    
2bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd90 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2bda0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2bdb0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
2bdc0 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65 72  ite3TriggerInser
2bdd0 74 53 74 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b  tStep(Parse*,Tok
2bde0 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20  en*, IdList*,.  
2bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be10 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38        Select*,u8
2be20 2c 55 70 73 65 72 74 2a 2c 0a 20 20 20 20 20 20  ,Upsert*,.      
2be30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be50 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f    const char*,co
2be60 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72  nst char*);.  Tr
2be70 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
2be80 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53  e3TriggerUpdateS
2be90 74 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  tep(Parse*,Token
2bea0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  *,ExprList*, Exp
2beb0 72 2a 2c 20 75 38 2c 0a 20 20 20 20 20 20 20 20  r*, u8,.        
2bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bee0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
2bef0 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72 69 67  t char*);.  Trig
2bf00 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
2bf10 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65  TriggerDeleteSte
2bf20 70 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  p(Parse*,Token*,
2bf30 20 45 78 70 72 2a 2c 0a 20 20 20 20 20 20 20 20   Expr*,.        
2bf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf60 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
2bf70 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
2bf80 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
2bf90 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20  igger(sqlite3*, 
2bfa0 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69  Trigger*);.  voi
2bfb0 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
2bfc0 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
2bfd0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
2bfe0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32  st char*);.  u32
2bff0 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
2c000 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72  olmask(Parse*,Tr
2c010 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a  igger*,ExprList*
2c020 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c  ,int,int,Table*,
2c030 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73  int);.# define s
2c040 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65  qlite3ParseTople
2c050 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f  vel(p) ((p)->pTo
2c060 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54  plevel ? (p)->pT
2c070 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23  oplevel : (p)).#
2c080 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
2c090 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  sToplevel(p) ((p
2c0a0 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d 30 29  )->pToplevel==0)
2c0b0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2c0c0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
2c0d0 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20  xist(B,C,D,E,F) 
2c0e0 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
2c0f0 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
2c100 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
2c110 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
2c120 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  Ptr(A,B).# defin
2c130 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  e sqlite3UnlinkA
2c140 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
2c150 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20  A,B,C).# define 
2c160 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
2c170 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c  igger(A,B,C,D,E,
2c180 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e  F,G,H,I).# defin
2c190 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
2c1a0 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c  TriggerDirect(A,
2c1b0 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66  B,C,D,E,F).# def
2c1c0 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
2c1d0 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23  erList(X, Y) 0.#
2c1e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
2c1f0 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
2c200 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  p.# define sqlit
2c210 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20  e3IsToplevel(p) 
2c220 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  1.# define sqlit
2c230 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b  e3TriggerColmask
2c240 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20  (A,B,C,D,E,F,G) 
2c250 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  0.#endif..int sq
2c260 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61  lite3JoinType(Pa
2c270 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
2c280 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
2c290 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
2c2a0 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  eForeignKey(Pars
2c2b0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54  e*, ExprList*, T
2c2c0 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a  oken*, ExprList*
2c2d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2c2e0 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e  ite3DeferForeign
2c2f0 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  Key(Parse*, int)
2c300 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2c310 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
2c320 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
2c330 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65  e3AuthRead(Parse
2c340 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c  *,Expr*,Schema*,
2c350 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74  SrcList*);.  int
2c360 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
2c370 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f  k(Parse*,int, co
2c380 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2c390 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2c3a0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
2c3b0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
2c3c0 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68  ush(Parse*, Auth
2c3d0 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20  Context*, const 
2c3e0 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
2c3f0 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
2c400 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74  tPop(AuthContext
2c410 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
2c420 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72  3AuthReadCol(Par
2c430 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  se*, const char 
2c440 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
2c450 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64   int);.#else.# d
2c460 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
2c470 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23  hRead(a,b,c,d).#
2c480 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
2c490 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64  uthCheck(a,b,c,d
2c4a0 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b  ,e)    SQLITE_OK
2c4b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2c4c0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
2c4d0 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65  (a,b,c).# define
2c4e0 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
2c4f0 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69  extPop(a)  ((voi
2c500 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f  d)(a)).#endif.vo
2c510 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68  id sqlite3Attach
2c520 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2c530 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  Expr*, Expr*);.v
2c540 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63  oid sqlite3Detac
2c550 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  h(Parse*, Expr*)
2c560 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
2c570 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20  xInit(DbFixer*, 
2c580 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  Parse*, int, con
2c590 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2c5a0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2c5b0 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44  ite3FixSrcList(D
2c5c0 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74  bFixer*, SrcList
2c5d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2c5e0 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72  ixSelect(DbFixer
2c5f0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
2c600 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28   sqlite3FixExpr(
2c610 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29  DbFixer*, Expr*)
2c620 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
2c630 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72  ExprList(DbFixer
2c640 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
2c650 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69  nt sqlite3FixTri
2c660 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72  ggerStep(DbFixer
2c670 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
2c680 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
2c690 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  F(const char *z,
2c6a0 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75   double*, int, u
2c6b0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  8);.int sqlite3G
2c6c0 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68  etInt32(const ch
2c6d0 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  ar *, int*);.int
2c6e0 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e   sqlite3Atoi(con
2c6f0 73 74 20 63 68 61 72 2a 29 3b 0a 23 69 66 6e 64  st char*);.#ifnd
2c700 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
2c710 54 46 31 36 0a 69 6e 74 20 73 71 6c 69 74 65 33  TF16.int sqlite3
2c720 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e  Utf16ByteLen(con
2c730 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20  st void *pData, 
2c740 69 6e 74 20 6e 43 68 61 72 29 3b 0a 23 65 6e 64  int nChar);.#end
2c750 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74  if.int sqlite3Ut
2c760 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20  f8CharLen(const 
2c770 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74  char *pData, int
2c780 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c   nByte);.u32 sql
2c790 69 74 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e  ite3Utf8Read(con
2c7a0 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74  st u8**);.LogEst
2c7b0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75   sqlite3LogEst(u
2c7c0 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  64);.LogEst sqli
2c7d0 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67  te3LogEstAdd(Log
2c7e0 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66  Est,LogEst);.#if
2c7f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2c800 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f  _VIRTUALTABLE.Lo
2c810 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
2c820 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75  stFromDouble(dou
2c830 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  ble);.#endif.#if
2c840 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2c850 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
2c860 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20 20 20  STATUS) || \.   
2c870 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2c880 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
2c890 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20 20 20  STAT4) || \.    
2c8a0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
2c8b0 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54 45 44  XPLAIN_ESTIMATED
2c8c0 5f 52 4f 57 53 29 0a 75 36 34 20 73 71 6c 69 74  _ROWS).u64 sqlit
2c8d0 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f  e3LogEstToInt(Lo
2c8e0 67 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a 56 4c  gEst);.#endif.VL
2c8f0 69 73 74 20 2a 73 71 6c 69 74 65 33 56 4c 69 73  ist *sqlite3VLis
2c900 74 41 64 64 28 73 71 6c 69 74 65 33 2a 2c 56 4c  tAdd(sqlite3*,VL
2c910 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
2c920 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f 6e 73 74  ,int,int);.const
2c930 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4c   char *sqlite3VL
2c940 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 56 4c 69  istNumToName(VLi
2c950 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  st*,int);.int sq
2c960 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d 65 54 6f  lite3VListNameTo
2c970 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f 6e 73 74  Num(VList*,const
2c980 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a   char*,int);../*
2c990 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20  .** Routines to 
2c9a0 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76  read and write v
2c9b0 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
2c9c0 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20  ntegers.  These 
2c9d0 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65  used to.** be de
2c9e0 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62  fined locally, b
2c9f0 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68  ut now we use th
2ca00 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65  e varint routine
2ca10 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a  s in the util.c.
2ca20 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20  ** file..*/.int 
2ca30 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
2ca40 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
2ca50 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65   u64);.u8 sqlite
2ca60 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74  3GetVarint(const
2ca70 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
2ca80 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c  , u64 *);.u8 sql
2ca90 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
2caa0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2cab0 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69  har *, u32 *);.i
2cac0 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt sqlite3Varint
2cad0 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a  Len(u64 v);../*.
2cae0 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  ** The common ca
2caf0 73 65 20 69 73 20 66 6f 72 20 61 20 76 61 72 69  se is for a vari
2cb00 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c  nt to be a singl
2cb10 65 20 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f  e byte.  They fo
2cb20 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f  llowing.** macro
2cb30 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d  s handle the com
2cb40 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74  mon case without
2cb50 20 61 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c   a procedure cal
2cb60 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c  l, but then call
2cb70 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72  .** the procedur
2cb80 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72  e for larger var
2cb90 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ints..*/.#define
2cba0 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42   getVarint32(A,B
2cbb0 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41  )  \.  (u8)((*(A
2cbc0 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42 29  )<(u8)0x80)?((B)
2cbd0 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71  =(u32)*(A)),1:sq
2cbe0 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
2cbf0 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29  ((A),(u32 *)&(B)
2cc00 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  )).#define putVa
2cc10 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
2cc20 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29 3c   (u8)(((u32)(B)<
2cc30 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29  (u32)0x80)?(*(A)
2cc40 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  =(unsigned char)
2cc50 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74  (B)),1:\.  sqlit
2cc60 65 33 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c  e3PutVarint((A),
2cc70 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65  (B))).#define ge
2cc80 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
2cc90 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66  e3GetVarint.#def
2cca0 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20  ine putVarint   
2ccb0 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
2ccc0 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  t...const char *
2ccd0 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
2cce0 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65 33 2a  nityStr(sqlite3*
2ccf0 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  , Index*);.void 
2cd00 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69  sqlite3TableAffi
2cd10 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c  nity(Vdbe*, Tabl
2cd20 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73  e*, int);.char s
2cd30 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66  qlite3CompareAff
2cd40 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
2cd50 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69  r, char aff2);.i
2cd60 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41  nt sqlite3IndexA
2cd70 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a  ffinityOk(Expr *
2cd80 70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f  pExpr, char idx_
2cd90 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20  affinity);.char 
2cda0 73 71 6c 69 74 65 33 54 61 62 6c 65 43 6f 6c 75  sqlite3TableColu
2cdb0 6d 6e 41 66 66 69 6e 69 74 79 28 54 61 62 6c 65  mnAffinity(Table
2cdc0 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c  *,int);.char sql
2cdd0 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74 79  ite3ExprAffinity
2cde0 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69  (Expr *pExpr);.i
2cdf0 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34  nt sqlite3Atoi64
2ce00 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36  (const char*, i6
2ce10 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  4*, int, u8);.in
2ce20 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65  t sqlite3DecOrHe
2ce30 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61  xToI64(const cha
2ce40 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20  r*, i64*);.void 
2ce50 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68  sqlite3ErrorWith
2ce60 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  Msg(sqlite3*, in
2ce70 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  t, const char*,.
2ce80 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
2ce90 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c  3Error(sqlite3*,
2cea0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2ceb0 65 33 53 79 73 74 65 6d 45 72 72 6f 72 28 73 71  e3SystemError(sq
2cec0 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
2ced0 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42  d *sqlite3HexToB
2cee0 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  lob(sqlite3*, co
2cef0 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
2cf00 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48   n);.u8 sqlite3H
2cf10 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a  exToInt(int h);.
2cf20 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61  int sqlite3TwoPa
2cf30 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  rtName(Parse *, 
2cf40 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
2cf50 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69  , Token **);..#i
2cf60 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2cf70 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a  _NEED_ERR_NAME).
2cf80 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2cf90 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b  te3ErrName(int);
2cfa0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2cfb0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 45  SQLITE_ENABLE_DE
2cfc0 53 45 52 49 41 4c 49 5a 45 0a 69 6e 74 20 73 71  SERIALIZE.int sq
2cfd0 6c 69 74 65 33 4d 65 6d 64 62 49 6e 69 74 28 76  lite3MemdbInit(v
2cfe0 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f  oid);.#endif..co
2cff0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2d000 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e  3ErrStr(int);.in
2d010 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  t sqlite3ReadSch
2d020 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73  ema(Parse *pPars
2d030 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
2d040 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28  ite3FindCollSeq(
2d050 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c  sqlite3*,u8 enc,
2d060 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74   const char*,int
2d070 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
2d080 42 69 6e 61 72 79 28 63 6f 6e 73 74 20 43 6f 6c  Binary(const Col
2d090 6c 53 65 71 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  lSeq*);.CollSeq 
2d0a0 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f  *sqlite3LocateCo
2d0b0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
2d0c0 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  rse, const char*
2d0d0 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  zName);.CollSeq 
2d0e0 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c  *sqlite3ExprColl
2d0f0 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
2d100 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b  e, Expr *pExpr);
2d110 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2d120 33 45 78 70 72 4e 4e 43 6f 6c 6c 53 65 71 28 50  3ExprNNCollSeq(P
2d130 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
2d140 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
2d150 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53  sqlite3ExprCollS
2d160 65 71 4d 61 74 63 68 28 50 61 72 73 65 2a 2c 45  eqMatch(Parse*,E
2d170 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  xpr*,Expr*);.Exp
2d180 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
2d190 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61  dCollateToken(Pa
2d1a0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
2d1b0 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
2d1c0 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  , int);.Expr *sq
2d1d0 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
2d1e0 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a  ateString(Parse*
2d1f0 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,Expr*,const cha
2d200 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
2d210 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74  e3ExprSkipCollat
2d220 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  e(Expr*);.int sq
2d230 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65  lite3CheckCollSe
2d240 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53  q(Parse *, CollS
2d250 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  eq *);.int sqlit
2d260 65 33 57 72 69 74 61 62 6c 65 53 63 68 65 6d 61  e3WritableSchema
2d270 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
2d280 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65  sqlite3CheckObje
2d290 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  ctName(Parse *, 
2d2a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76  const char *);.v
2d2b0 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53  oid sqlite3VdbeS
2d2c0 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  etChanges(sqlite
2d2d0 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  3 *, int);.int s
2d2e0 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69  qlite3AddInt64(i
2d2f0 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
2d300 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36  lite3SubInt64(i6
2d310 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
2d320 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34  ite3MulInt64(i64
2d330 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
2d340 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29  te3AbsInt32(int)
2d350 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2d360 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53  ENABLE_8_3_NAMES
2d370 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c  .void sqlite3Fil
2d380 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63  eSuffix3(const c
2d390 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65  har*, char*);.#e
2d3a0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2d3b0 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28  ite3FileSuffix3(
2d3c0 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73  X,Y).#endif.u8 s
2d3d0 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
2d3e0 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75  (const char *z,u
2d3f0 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20  8);..const void 
2d400 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78  *sqlite3ValueTex
2d410 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t(sqlite3_value*
2d420 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
2d430 65 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c  e3ValueBytes(sql
2d440 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
2d450 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2d460 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65  lueSetStr(sqlite
2d470 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63  3_value*, int, c
2d480 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 0a  onst void *,u8,.
2d490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4a0 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28          void(*)(
2d4b0 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71  void*));.void sq
2d4c0 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c  lite3ValueSetNul
2d4d0 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  l(sqlite3_value*
2d4e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2d4f0 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33  alueFree(sqlite3
2d500 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65  _value*);.sqlite
2d510 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33  3_value *sqlite3
2d520 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33  ValueNew(sqlite3
2d530 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c   *);.#ifndef SQL
2d540 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63  ITE_OMIT_UTF16.c
2d550 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31  har *sqlite3Utf1
2d560 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20  6to8(sqlite3 *, 
2d570 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
2d580 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  , u8);.#endif.in
2d590 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  t sqlite3ValueFr
2d5a0 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  omExpr(sqlite3 *
2d5b0 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38  , Expr *, u8, u8
2d5c0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  , sqlite3_value 
2d5d0 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
2d5e0 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
2d5f0 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ity(sqlite3_valu
2d600 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69  e *, u8, u8);.#i
2d610 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  fndef SQLITE_AMA
2d620 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e  LGAMATION.extern
2d630 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
2d640 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f  char sqlite3Opco
2d650 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78  deProperty[];.ex
2d660 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61 72 20  tern const char 
2d670 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52 59  sqlite3StrBINARY
2d680 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
2d690 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
2d6a0 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
2d6b0 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  er[];.extern con
2d6c0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2d6d0 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70   sqlite3CtypeMap
2d6e0 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
2d6f0 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e   Token sqlite3In
2d700 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72  tTokens[];.exter
2d710 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72  n SQLITE_WSD str
2d720 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
2d730 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b  g sqlite3Config;
2d740 0a 65 78 74 65 72 6e 20 46 75 6e 63 44 65 66 48  .extern FuncDefH
2d750 61 73 68 20 73 71 6c 69 74 65 33 42 75 69 6c 74  ash sqlite3Built
2d760 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66  inFunctions;.#if
2d770 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2d780 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20  _WSD.extern int 
2d790 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79  sqlite3PendingBy
2d7a0 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  te;.#endif.#endi
2d7b0 66 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  f.#ifdef VDBE_PR
2d7c0 4f 46 49 4c 45 0a 65 78 74 65 72 6e 20 73 71 6c  OFILE.extern sql
2d7d0 69 74 65 33 5f 75 69 6e 74 36 34 20 73 71 6c 69  ite3_uint64 sqli
2d7e0 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 3b 0a  te3NProfileCnt;.
2d7f0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2d800 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
2d810 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
2d820 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2d830 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50  sqlite3Reindex(P
2d840 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
2d850 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2d860 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f  ite3AlterFunctio
2d870 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
2d880 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d  qlite3AlterRenam
2d890 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  eTable(Parse*, S
2d8a0 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  rcList*, Token*)
2d8b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
2d8c0 74 65 72 52 65 6e 61 6d 65 43 6f 6c 75 6d 6e 28  terRenameColumn(
2d8d0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2d8e0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2d8f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
2d900 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73  tToken(const uns
2d910 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e  igned char *, in
2d920 74 20 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  t *);.#ifdef SQL
2d930 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 4f 52 4d 41  ITE_ENABLE_NORMA
2d940 4c 49 5a 45 0a 69 6e 74 20 73 71 6c 69 74 65 33  LIZE.int sqlite3
2d950 47 65 74 54 6f 6b 65 6e 4e 6f 72 6d 61 6c 69 7a  GetTokenNormaliz
2d960 65 64 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  ed(const unsigne
2d970 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 2c  d char *, int *,
2d980 20 69 6e 74 20 2a 29 3b 0a 23 65 6e 64 69 66 0a   int *);.#endif.
2d990 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74  void sqlite3Nest
2d9a0 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  edParse(Parse*, 
2d9b0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
2d9c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2d9d0 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
2d9e0 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a  tements(sqlite3*
2d9f0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2da00 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74  te3CodeSubselect
2da10 28 50 61 72 73 65 2a 2c 20 45 78 70 72 20 2a 2c  (Parse*, Expr *,
2da20 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2da30 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72   sqlite3SelectPr
2da40 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ep(Parse*, Selec
2da50 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  t*, NameContext*
2da60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2da70 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72  electWrongNumTer
2da80 6d 73 45 72 72 6f 72 28 50 61 72 73 65 20 2a 70  msError(Parse *p
2da90 50 61 72 73 65 2c 20 53 65 6c 65 63 74 20 2a 70  Parse, Select *p
2daa0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  );.int sqlite3Ma
2dab0 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73  tchSpanName(cons
2dac0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2dad0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2dae0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2daf0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
2db00 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d  lveExprNames(Nam
2db10 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a  eContext*, Expr*
2db20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2db30 73 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e 61 6d  solveExprListNam
2db40 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
2db50 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69   ExprList*);.voi
2db60 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
2db70 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73  SelectNames(Pars
2db80 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
2db90 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64  eContext*);.void
2dba0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
2dbb0 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72  elfReference(Par
2dbc0 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45  se*,Table*,int,E
2dbd0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  xpr*,ExprList*);
2dbe0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
2dbf0 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28  lveOrderGroupBy(
2dc00 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
2dc10 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
2dc20 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2dc30 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61  qlite3ColumnDefa
2dc40 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c  ult(Vdbe *, Tabl
2dc50 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
2dc60 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2dc70 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e  rFinishAddColumn
2dc80 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
2dc90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2dca0 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c  AlterBeginAddCol
2dcb0 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63  umn(Parse *, Src
2dcc0 4c 69 73 74 20 2a 29 3b 0a 76 6f 69 64 20 2a 73  List *);.void *s
2dcd0 71 6c 69 74 65 33 52 65 6e 61 6d 65 54 6f 6b 65  qlite3RenameToke
2dce0 6e 4d 61 70 28 50 61 72 73 65 2a 2c 20 76 6f 69  nMap(Parse*, voi
2dcf0 64 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  d*, Token*);.voi
2dd00 64 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 54  d sqlite3RenameT
2dd10 6f 6b 65 6e 52 65 6d 61 70 28 50 61 72 73 65 2a  okenRemap(Parse*
2dd20 2c 20 76 6f 69 64 20 2a 70 54 6f 2c 20 76 6f 69  , void *pTo, voi
2dd30 64 20 2a 70 46 72 6f 6d 29 3b 0a 76 6f 69 64 20  d *pFrom);.void 
2dd40 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 45 78 70  sqlite3RenameExp
2dd50 72 55 6e 6d 61 70 28 50 61 72 73 65 2a 2c 20 45  rUnmap(Parse*, E
2dd60 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2dd70 74 65 33 52 65 6e 61 6d 65 45 78 70 72 6c 69 73  te3RenameExprlis
2dd80 74 55 6e 6d 61 70 28 50 61 72 73 65 2a 2c 20 45  tUnmap(Parse*, E
2dd90 78 70 72 4c 69 73 74 2a 29 3b 0a 43 6f 6c 6c 53  xprList*);.CollS
2dda0 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f  eq *sqlite3GetCo
2ddb0 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38  llSeq(Parse*, u8
2ddc0 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e  , CollSeq *, con
2ddd0 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
2dde0 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54  sqlite3AffinityT
2ddf0 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ype(const char*,
2de00 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 76 6f 69 64 20   Column*);.void 
2de10 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50  sqlite3Analyze(P
2de20 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
2de30 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2de40 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e  te3InvokeBusyHan
2de50 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72  dler(BusyHandler
2de60 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 2a  *, sqlite3_file*
2de70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2de80 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54  ndDb(sqlite3*, T
2de90 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2dea0 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71  te3FindDbName(sq
2deb0 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
2dec0 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
2ded0 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
2dee0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42  sqlite3*,int iDB
2def0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
2df00 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65  eleteIndexSample
2df10 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78  s(sqlite3*,Index
2df20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2df30 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e  DefaultRowEst(In
2df40 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
2df50 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46  te3RegisterLikeF
2df60 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
2df70 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2df80 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69  ite3IsLikeFuncti
2df90 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  on(sqlite3*,Expr
2dfa0 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76  *,int*,char*);.v
2dfb0 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d  oid sqlite3Schem
2dfc0 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a  aClear(void *);.
2dfd0 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53  Schema *sqlite3S
2dfe0 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33  chemaGet(sqlite3
2dff0 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e   *, Btree *);.in
2e000 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54  t sqlite3SchemaT
2e010 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a  oIndex(sqlite3 *
2e020 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b  db, Schema *);.K
2e030 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
2e040 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69  eyInfoAlloc(sqli
2e050 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  te3*,int,int);.v
2e060 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e  oid sqlite3KeyIn
2e070 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a  foUnref(KeyInfo*
2e080 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
2e090 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65  te3KeyInfoRef(Ke
2e0a0 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f  yInfo*);.KeyInfo
2e0b0 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2e0c0 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  OfIndex(Parse*, 
2e0d0 49 6e 64 65 78 2a 29 3b 0a 4b 65 79 49 6e 66 6f  Index*);.KeyInfo
2e0e0 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2e0f0 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50 61 72  FromExprList(Par
2e100 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
2e110 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 64  int, int);..#ifd
2e120 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2e130 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e  int sqlite3KeyIn
2e140 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65  foIsWriteable(Ke
2e150 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a  yInfo*);.#endif.
2e160 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74  int sqlite3Creat
2e170 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c  eFunc(sqlite3 *,
2e180 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
2e190 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c  nt, int, void *,
2e1a0 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
2e1b0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
2e1c0 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
2e1d0 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *),.  void (*)(s
2e1e0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2e1f0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2e200 65 20 2a 2a 29 2c 20 0a 20 20 76 6f 69 64 20 28  e **), .  void (
2e210 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
2e220 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29  xt*),.  void (*)
2e230 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2e240 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *),.  void (*)(s
2e250 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2e260 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2e270 65 20 2a 2a 29 2c 20 0a 20 20 46 75 6e 63 44 65  e **), .  FuncDe
2e280 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
2e290 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71  uctor.);.void sq
2e2a0 6c 69 74 65 33 4e 6f 6f 70 44 65 73 74 72 75 63  lite3NoopDestruc
2e2b0 74 6f 72 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  tor(void*);.void
2e2c0 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74   sqlite3OomFault
2e2d0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
2e2e0 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65 61 72   sqlite3OomClear
2e2f0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
2e300 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 73  sqlite3ApiExit(s
2e310 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29  qlite3 *db, int)
2e320 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
2e330 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 50 61  nTempDatabase(Pa
2e340 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71  rse *);..void sq
2e350 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69  lite3StrAccumIni
2e360 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c  t(StrAccum*, sql
2e370 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e  ite3*, char*, in
2e380 74 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73  t, int);.char *s
2e390 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
2e3a0 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b  nish(StrAccum*);
2e3b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
2e3c0 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65  ectDestInit(Sele
2e3d0 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29  ctDest*,int,int)
2e3e0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43  ;.Expr *sqlite3C
2e3f0 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28  reateColumnExpr(
2e400 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69  sqlite3 *, SrcLi
2e410 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  st *, int, int);
2e420 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ..void sqlite3Ba
2e430 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c 69  ckupRestart(sqli
2e440 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76  te3_backup *);.v
2e450 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
2e460 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f  pUpdate(sqlite3_
2e470 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20  backup *, Pgno, 
2e480 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69  const u8 *);..#i
2e490 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2e4a0 54 5f 53 55 42 51 55 45 52 59 0a 69 6e 74 20 73  T_SUBQUERY.int s
2e4b0 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 49  qlite3ExprCheckI
2e4c0 4e 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  N(Parse*, Expr*)
2e4d0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2e4e0 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2e4f0 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49 54 45 5f  kIN(x,y) SQLITE_
2e500 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  OK.#endif..#ifde
2e510 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2e520 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76  STAT3_OR_STAT4.v
2e530 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  oid sqlite3Analy
2e540 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  zeFunctions(void
2e550 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
2e560 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65  at4ProbeSetValue
2e570 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 49 6e 64  (.    Parse*,Ind
2e580 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f  ex*,UnpackedReco
2e590 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 69  rd**,Expr*,int,i
2e5a0 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  nt,int*);.int sq
2e5b0 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75 65 46  lite3Stat4ValueF
2e5c0 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20  romExpr(Parse*, 
2e5d0 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74  Expr*, u8, sqlit
2e5e0 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69  e3_value**);.voi
2e5f0 64 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  d sqlite3Stat4Pr
2e600 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64  obeFree(Unpacked
2e610 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71  Record*);.int sq
2e620 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e  lite3Stat4Column
2e630 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74  (sqlite3*, const
2e640 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74   void*, int, int
2e650 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  , sqlite3_value*
2e660 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  *);.char sqlite3
2e670 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66 66 69 6e  IndexColumnAffin
2e680 69 74 79 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e  ity(sqlite3*, In
2e690 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64  dex*, int);.#end
2e6a0 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e  if../*.** The in
2e6b0 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c  terface to the L
2e6c0 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70  EMON-generated p
2e6d0 61 72 73 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66  arser.*/.#ifndef
2e6e0 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
2e6f0 54 49 4f 4e 0a 20 20 76 6f 69 64 20 2a 73 71 6c  TION.  void *sql
2e700 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28  ite3ParserAlloc(
2e710 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 2c 20 50  void*(*)(u64), P
2e720 61 72 73 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  arse*);.  void s
2e730 71 6c 69 74 65 33 50 61 72 73 65 72 46 72 65 65  qlite3ParserFree
2e740 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28  (void*, void(*)(
2e750 76 6f 69 64 2a 29 29 3b 0a 23 65 6e 64 69 66 0a  void*));.#endif.
2e760 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2e770 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54  er(void*, int, T
2e780 6f 6b 65 6e 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oken);.int sqlit
2e790 65 33 50 61 72 73 65 72 46 61 6c 6c 62 61 63 6b  e3ParserFallback
2e7a0 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 59 59  (int);.#ifdef YY
2e7b0 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50  TRACKMAXSTACKDEP
2e7c0 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  TH.  int sqlite3
2e7d0 50 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28  ParserStackPeak(
2e7e0 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  void*);.#endif..
2e7f0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
2e800 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73  LoadExtensions(s
2e810 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65  qlite3*);.#ifnde
2e820 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f  f SQLITE_OMIT_LO
2e830 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76  AD_EXTENSION.  v
2e840 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
2e850 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
2e860 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  e3*);.#else.# de
2e870 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73  fine sqlite3Clos
2e880 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23  eExtensions(X).#
2e890 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
2e8a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
2e8b0 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73  D_CACHE.  void s
2e8c0 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
2e8d0 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Parse *, int, in
2e8e0 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61  t, u8, const cha
2e8f0 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  r *);.#else.  #d
2e900 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62  efine sqlite3Tab
2e910 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a  leLock(v,w,x,y,z
2e920 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
2e930 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69   SQLITE_TEST.  i
2e940 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f  nt sqlite3Utf8To
2e950 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  8(unsigned char*
2e960 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
2e970 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2e980 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65  RTUALTABLE.#  de
2e990 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2e9a0 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69  Clear(Y).#  defi
2e9b0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79  ne sqlite3VtabSy
2e9c0 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f  nc(X,Y) SQLITE_O
2e9d0 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
2e9e0 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
2e9f0 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2ea00 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58  ite3VtabCommit(X
2ea10 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2ea20 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62  te3VtabInSync(db
2ea30 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71  ) 0.#  define sq
2ea40 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29  lite3VtabLock(X)
2ea50 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2ea60 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a  e3VtabUnlock(X).
2ea70 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2ea80 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
2ea90 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2eaa0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
2eab0 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54  t(X, Y, Z) SQLIT
2eac0 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
2ead0 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
2eae0 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29  X,Y)  ((VTable*)
2eaf0 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64  0).#else.   void
2eb00 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
2eb10 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  r(sqlite3 *db, T
2eb20 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20  able*);.   void 
2eb30 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f  sqlite3VtabDisco
2eb40 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64  nnect(sqlite3 *d
2eb50 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20  b, Table *p);.  
2eb60 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
2eb70 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62  Sync(sqlite3 *db
2eb80 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74  , Vdbe*);.   int
2eb90 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
2eba0 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62  back(sqlite3 *db
2ebb0 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
2ebc0 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69  3VtabCommit(sqli
2ebd0 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69  te3 *db);.   voi
2ebe0 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  d sqlite3VtabLoc
2ebf0 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
2ec00 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2ec10 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  Unlock(VTable *)
2ec20 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2ec30 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
2ec40 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e  sqlite3*);.   in
2ec50 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  t sqlite3VtabSav
2ec60 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a  epoint(sqlite3 *
2ec70 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20  , int, int);.   
2ec80 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2ec90 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62  ImportErrmsg(Vdb
2eca0 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62  e*, sqlite3_vtab
2ecb0 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73  *);.   VTable *s
2ecc0 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
2ecd0 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
2ece0 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20 2a 73 71  );.   Module *sq
2ecf0 6c 69 74 65 33 56 74 61 62 43 72 65 61 74 65 4d  lite3VtabCreateM
2ed00 6f 64 75 6c 65 28 0a 20 20 20 20 20 73 71 6c 69  odule(.     sqli
2ed10 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74  te3*,.     const
2ed20 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 63 6f 6e   char*,.     con
2ed30 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
2ed40 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64 2a 2c 0a  e*,.     void*,.
2ed50 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69       void(*)(voi
2ed60 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20 64 65 66  d*).   );.#  def
2ed70 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49  ine sqlite3VtabI
2ed80 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d  nSync(db) ((db)-
2ed90 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64  >nVTrans>0 && (d
2eda0 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a  b)->aVTrans==0).
2edb0 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2edc0 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
2edd0 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65 2a 2c  ableInit(Parse*,
2ede0 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  Module*);.void s
2edf0 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d  qlite3VtabEponym
2ee00 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28 73 71  ousTableClear(sq
2ee10 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b  lite3*,Module*);
2ee20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2ee30 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61  bMakeWritable(Pa
2ee40 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f  rse*,Table*);.vo
2ee50 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  id sqlite3VtabBe
2ee60 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ginParse(Parse*,
2ee70 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
2ee80 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76   Token*, int);.v
2ee90 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46  oid sqlite3VtabF
2eea0 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65  inishParse(Parse
2eeb0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
2eec0 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49   sqlite3VtabArgI
2eed0 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  nit(Parse*);.voi
2eee0 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
2eef0 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54  Extend(Parse*, T
2ef00 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2ef10 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
2ef20 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  e(sqlite3*, int,
2ef30 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
2ef40 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  har **);.int sql
2ef50 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e  ite3VtabCallConn
2ef60 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ect(Parse*, Tabl
2ef70 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
2ef80 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28  VtabCallDestroy(
2ef90 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
2efa0 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
2efb0 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  t sqlite3VtabBeg
2efc0 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54  in(sqlite3 *, VT
2efd0 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66  able *);.FuncDef
2efe0 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65   *sqlite3VtabOve
2eff0 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71  rloadFunction(sq
2f000 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a  lite3 *,FuncDef*
2f010 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72  , int nArg, Expr
2f020 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36  *);.sqlite3_int6
2f030 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72  4 sqlite3StmtCur
2f040 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33  rentTime(sqlite3
2f050 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20  _context*);.int 
2f060 73 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d  sqlite3VdbeParam
2f070 65 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c  eterIndex(Vdbe*,
2f080 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e   const char*, in
2f090 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  t);.int sqlite3T
2f0a0 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28  ransferBindings(
2f0b0 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20  sqlite3_stmt *, 
2f0c0 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b  sqlite3_stmt *);
2f0d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72  .void sqlite3Par
2f0e0 73 65 72 52 65 73 65 74 28 50 61 72 73 65 2a 29  serReset(Parse*)
2f0f0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2f100 45 4e 41 42 4c 45 5f 4e 4f 52 4d 41 4c 49 5a 45  ENABLE_NORMALIZE
2f110 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 6f  .char *sqlite3No
2f120 72 6d 61 6c 69 7a 65 28 56 64 62 65 2a 2c 20 63  rmalize(Vdbe*, c
2f130 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
2f140 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
2f150 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64  ite3Reprepare(Vd
2f160 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  be*);.void sqlit
2f170 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c  e3ExprListCheckL
2f180 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78  ength(Parse*, Ex
2f190 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
2f1a0 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  har*);.CollSeq *
2f1b0 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d  sqlite3BinaryCom
2f1c0 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  pareCollSeq(Pars
2f1d0 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70  e *, Expr *, Exp
2f1e0 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
2f1f0 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f  3TempInMemory(co
2f200 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63  nst sqlite3*);.c
2f210 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
2f220 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
2f230 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  e(int);.#ifndef 
2f240 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
2f250 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65    int sqlite3Che
2f260 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a  ckpoint(sqlite3*
2f270 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
2f280 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73  , int*);.  int s
2f290 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74  qlite3WalDefault
2f2a0 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74  Hook(void*,sqlit
2f2b0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
2f2c0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  int);.#endif.#if
2f2d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2f2e0 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c  _CTE.  With *sql
2f2f0 69 74 65 33 57 69 74 68 41 64 64 28 50 61 72 73  ite3WithAdd(Pars
2f300 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c  e*,With*,Token*,
2f310 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74  ExprList*,Select
2f320 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2f330 65 33 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c  e3WithDelete(sql
2f340 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20  ite3*,With*);.  
2f350 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68  void sqlite3With
2f360 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74  Push(Parse*, Wit
2f370 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23  h*, u8);.#else.#
2f380 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
2f390 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64  thPush(x,y,z).#d
2f3a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74  efine sqlite3Wit
2f3b0 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e  hDelete(x,y).#en
2f3c0 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
2f3d0 54 45 5f 4f 4d 49 54 5f 55 50 53 45 52 54 0a 20  TE_OMIT_UPSERT. 
2f3e0 20 55 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33   Upsert *sqlite3
2f3f0 55 70 73 65 72 74 4e 65 77 28 73 71 6c 69 74 65  UpsertNew(sqlite
2f400 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  3*,ExprList*,Exp
2f410 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
2f420 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
2f430 74 65 33 55 70 73 65 72 74 44 65 6c 65 74 65 28  te3UpsertDelete(
2f440 73 71 6c 69 74 65 33 2a 2c 55 70 73 65 72 74 2a  sqlite3*,Upsert*
2f450 29 3b 0a 20 20 55 70 73 65 72 74 20 2a 73 71 6c  );.  Upsert *sql
2f460 69 74 65 33 55 70 73 65 72 74 44 75 70 28 73 71  ite3UpsertDup(sq
2f470 6c 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b  lite3*,Upsert*);
2f480 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 70  .  int sqlite3Up
2f490 73 65 72 74 41 6e 61 6c 79 7a 65 54 61 72 67 65  sertAnalyzeTarge
2f4a0 74 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  t(Parse*,SrcList
2f4b0 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 76 6f  *,Upsert*);.  vo
2f4c0 69 64 20 73 71 6c 69 74 65 33 55 70 73 65 72 74  id sqlite3Upsert
2f4d0 44 6f 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  DoUpdate(Parse*,
2f4e0 55 70 73 65 72 74 2a 2c 54 61 62 6c 65 2a 2c 49  Upsert*,Table*,I
2f4f0 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 23 65 6c 73  ndex*,int);.#els
2f500 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  e.#define sqlite
2f510 33 55 70 73 65 72 74 4e 65 77 28 76 2c 77 2c 78  3UpsertNew(v,w,x
2f520 2c 79 2c 7a 29 20 28 28 55 70 73 65 72 74 2a 29  ,y,z) ((Upsert*)
2f530 30 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  0).#define sqlit
2f540 65 33 55 70 73 65 72 74 44 65 6c 65 74 65 28 78  e3UpsertDelete(x
2f550 2c 79 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  ,y).#define sqli
2f560 74 65 33 55 70 73 65 72 74 44 75 70 28 78 2c 79  te3UpsertDup(x,y
2f570 29 20 20 20 20 20 20 20 28 28 55 70 73 65 72 74  )       ((Upsert
2f580 2a 29 30 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  *)0).#endif.../*
2f590 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f   Declarations fo
2f5a0 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66  r functions in f
2f5b0 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68  key.c. All of th
2f5c0 65 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64  ese are replaced
2f5d0 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63   by.** no-op mac
2f5e0 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45  ros if OMIT_FORE
2f5f0 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e  IGN_KEY is defin
2f600 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
2f610 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b   no foreign.** k
2f620 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  ey functionality
2f630 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49   is available. I
2f640 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69  f OMIT_TRIGGER i
2f650 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a  s defined but.**
2f660 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45   OMIT_FOREIGN_KE
2f670 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73  Y is not, only s
2f680 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ome of the funct
2f690 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64  ions are no-oped
2f6a0 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73  . In.** this cas
2f6b0 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61  e foreign keys a
2f6c0 72 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e  re parsed, but n
2f6d0 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e  o other function
2f6e0 61 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76  ality is.** prov
2f6f0 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e  ided (enforcemen
2f700 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69  t of FK constrai
2f710 6e 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65  nts requires the
2f720 20 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79   triggers sub-sy
2f730 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64  stem)..*/.#if !d
2f740 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2f750 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20  IT_FOREIGN_KEY) 
2f760 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
2f770 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
2f780 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
2f790 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54  kCheck(Parse*, T
2f7a0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
2f7b0 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76   int*, int);.  v
2f7c0 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  oid sqlite3FkDro
2f7d0 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  pTable(Parse*, S
2f7e0 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a  rcList *, Table*
2f7f0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2f800 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65  3FkActions(Parse
2f810 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c  *, Table*, ExprL
2f820 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c  ist*, int, int*,
2f830 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c   int);.  int sql
2f840 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50  ite3FkRequired(P
2f850 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
2f860 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32  nt*, int);.  u32
2f870 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
2f880 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  k(Parse*, Table*
2f890 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74  );.  FKey *sqlit
2f8a0 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54  e3FkReferences(T
2f8b0 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  able *);.#else. 
2f8c0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2f8d0 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c  FkActions(a,b,c,
2f8e0 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65  d,e,f).  #define
2f8f0 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28   sqlite3FkCheck(
2f900 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
2f910 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2f920 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29  DropTable(a,b,c)
2f930 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2f940 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29  e3FkOldmask(a,b)
2f950 20 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65           0.  #de
2f960 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65  fine sqlite3FkRe
2f970 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20  quired(a,b,c,d) 
2f980 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73     0.  #define s
2f990 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63  qlite3FkReferenc
2f9a0 65 73 28 61 29 20 20 20 20 20 20 20 20 30 0a 23  es(a)        0.#
2f9b0 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
2f9c0 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
2f9d0 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c  N_KEY.  void sql
2f9e0 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c  ite3FkDelete(sql
2f9f0 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  ite3 *, Table*);
2fa00 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b  .  int sqlite3Fk
2fa10 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73  LocateIndex(Pars
2fa20 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c  e*,Table*,FKey*,
2fa30 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a  Index**,int**);.
2fa40 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2fa50 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28  sqlite3FkDelete(
2fa60 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73  a,b).  #define s
2fa70 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
2fa80 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23  dex(a,b,c,d,e).#
2fa90 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76  endif.../*.** Av
2faa0 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e  ailable fault in
2fab0 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64  jectors.  Should
2fac0 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67   be numbered beg
2fad0 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a  inning with 0..*
2fae0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
2faf0 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d  _FAULTINJECTOR_M
2fb00 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66  ALLOC     0.#def
2fb10 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54  ine SQLITE_FAULT
2fb20 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20  INJECTOR_COUNT  
2fb30 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65      1../*.** The
2fb40 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
2fb50 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e  e code in fault.
2fb60 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74  c used for ident
2fb70 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a  ifying "benign".
2fb80 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72  ** malloc failur
2fb90 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  es. This is only
2fba0 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49   present if SQLI
2fbb0 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a  TE_UNTESTABLE.**
2fbc0 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e   is not defined.
2fbd0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
2fbe0 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20  TE_UNTESTABLE.  
2fbf0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
2fc00 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f  nBenignMalloc(vo
2fc10 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  id);.  void sqli
2fc20 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
2fc30 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a  oc(void);.#else.
2fc40 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2fc50 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
2fc60 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73  oc().  #define s
2fc70 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
2fc80 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a  alloc().#endif..
2fc90 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65  /*.** Allowed re
2fca0 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d  turn values from
2fcb0 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e   sqlite3FindInIn
2fcc0 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  dex().*/.#define
2fcd0 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20   IN_INDEX_ROWID 
2fce0 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65         1   /* Se
2fcf0 61 72 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f  arch the rowid o
2fd00 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23  f the table */.#
2fd10 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2fd20 45 50 48 20 20 20 20 20 20 20 20 20 20 32 20 20  EPH          2  
2fd30 20 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70   /* Search an ep
2fd40 68 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a  hemeral b-tree *
2fd50 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2fd60 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20  EX_INDEX_ASC    
2fd70 33 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20  3   /* Existing 
2fd80 69 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20  index ASCENDING 
2fd90 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2fda0 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20  DEX_INDEX_DESC  
2fdb0 20 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67   4   /* Existing
2fdc0 20 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e   index DESCENDIN
2fdd0 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  G */.#define IN_
2fde0 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20  INDEX_NOOP      
2fdf0 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62     5   /* No tab
2fe00 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73  le available. Us
2fe10 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f  e comparisons */
2fe20 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66  ./*.** Allowed f
2fe30 6c 61 67 73 20 66 6f 72 20 74 68 65 20 33 72 64  lags for the 3rd
2fe40 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71   parameter to sq
2fe50 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
2fe60 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ()..*/.#define I
2fe70 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20  N_INDEX_NOOP_OK 
2fe80 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f      0x0001  /* O
2fe90 4b 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49  K to return IN_I
2fea0 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65  NDEX_NOOP */.#de
2feb0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45  fine IN_INDEX_ME
2fec0 4d 42 45 52 53 48 49 50 20 20 30 78 30 30 30 32  MBERSHIP  0x0002
2fed0 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72    /* IN operator
2fee0 20 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72   used for member
2fef0 73 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65  ship test */.#de
2ff00 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f  fine IN_INDEX_LO
2ff10 4f 50 20 20 20 20 20 20 20 20 30 78 30 30 30 34  OP        0x0004
2ff20 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72    /* IN operator
2ff30 20 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20   used as a loop 
2ff40 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  */.int sqlite3Fi
2ff50 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20  ndInIndex(Parse 
2ff60 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20  *, Expr *, u32, 
2ff70 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e  int*, int*);..in
2ff80 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
2ff90 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73  Open(sqlite3_vfs
2ffa0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2ffb0 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  , sqlite3_file *
2ffc0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  , int, int);.int
2ffd0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53   sqlite3JournalS
2ffe0 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20  ize(sqlite3_vfs 
2fff0 2a 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  *);.#if defined(
30000 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54  SQLITE_ENABLE_AT
30010 4f 4d 49 43 5f 57 52 49 54 45 29 20 5c 0a 20 7c  OMIC_WRITE) \. |
30020 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
30030 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54  _ENABLE_BATCH_AT
30040 4f 4d 49 43 5f 57 52 49 54 45 29 0a 20 20 69 6e  OMIC_WRITE).  in
30050 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
30060 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66  Create(sqlite3_f
30070 69 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  ile *);.#endif..
30080 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
30090 61 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c  alIsInMemory(sql
300a0 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76  ite3_file *p);.v
300b0 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  oid sqlite3MemJo
300c0 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
300d0 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64  3_file *);..void
300e0 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48   sqlite3ExprSetH
300f0 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61  eightAndFlags(Pa
30100 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
30110 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54  r *p);.#if SQLIT
30120 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
30130 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  >0.  int sqlite3
30140 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
30150 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e  (Select *);.  in
30160 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
30170 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c  ckHeight(Parse*,
30180 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23   int);.#else.  #
30190 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
301a0 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78  lectExprHeight(x
301b0 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ) 0.  #define sq
301c0 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
301d0 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66  ight(x,y).#endif
301e0 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74  ..u32 sqlite3Get
301f0 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29  4byte(const u8*)
30200 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75  ;.void sqlite3Pu
30210 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29  t4byte(u8*, u32)
30220 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
30230 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e  _ENABLE_UNLOCK_N
30240 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c  OTIFY.  void sql
30250 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
30260 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c  ocked(sqlite3 *,
30270 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76   sqlite3 *);.  v
30280 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
30290 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71  ctionUnlocked(sq
302a0 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f  lite3 *db);.  vo
302b0 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
302c0 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74  tionClosed(sqlit
302d0 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20  e3 *db);.#else. 
302e0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
302f0 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
30300 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65  d(x,y).  #define
30310 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
30320 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20  onUnlocked(x).  
30330 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
30340 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28  onnectionClosed(
30350 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  x).#endif..#ifde
30360 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
30370 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72   void sqlite3Par
30380 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20  serTrace(FILE*, 
30390 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a  char *);.#endif.
303a0 23 69 66 20 64 65 66 69 6e 65 64 28 59 59 43 4f  #if defined(YYCO
303b0 56 45 52 41 47 45 29 0a 20 20 69 6e 74 20 73 71  VERAGE).  int sq
303c0 6c 69 74 65 33 50 61 72 73 65 72 43 6f 76 65 72  lite3ParserCover
303d0 61 67 65 28 46 49 4c 45 2a 29 3b 0a 23 65 6e 64  age(FILE*);.#end
303e0 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65  if../*.** If the
303f0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49   SQLITE_ENABLE I
30400 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68  OTRACE exists th
30410 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  en the global va
30420 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65  riable.** sqlite
30430 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f  3IoTrace is a po
30440 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74  inter to a print
30450 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75  f-like routine u
30460 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20  sed to.** print 
30470 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73  I/O tracing mess
30480 61 67 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ages..*/.#ifdef 
30490 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f  SQLITE_ENABLE_IO
304a0 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49  TRACE.# define I
304b0 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73  OTRACE(A)  if( s
304c0 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b  qlite3IoTrace ){
304d0 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
304e0 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69  A; }.  void sqli
304f0 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
30500 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45  l(Vdbe*);.SQLITE
30510 5f 41 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45  _API SQLITE_EXTE
30520 52 4e 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f  RN void (SQLITE_
30530 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f  CDECL *sqlite3Io
30540 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61  Trace)(const cha
30550 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23  r*,...);.#else.#
30560 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28   define IOTRACE(
30570 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  A).# define sqli
30580 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
30590 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  l(X).#endif../*.
305a0 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65  ** These routine
305b0 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
305c0 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64  for the mem2.c d
305d0 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20  ebugging memory 
305e0 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c  allocator.** onl
305f0 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65  y.  They are use
30600 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  d to verify that
30610 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65   different "type
30620 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  s" of memory.** 
30630 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
30640 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64  properly tracked
30650 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a   by the system..
30660 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
30670 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73  debugSetType() s
30680 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f  ets the "type" o
30690 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  f an allocation 
306a0 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65  to one of.** the
306b0 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f   MEMTYPE_* macro
306c0 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e  s defined below.
306d0 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20    The type must 
306e0 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74  be a bitmask wit
306f0 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69  h.** a single bi
30700 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  t set..**.** sql
30710 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
30720 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
30730 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65  ue if any of the
30740 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
30750 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
30760 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
30770 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
30780 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
30790 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20  ugSetType()..** 
307a0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
307b0 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65  asType() is inte
307c0 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73  nded for use ins
307d0 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61  ide assert() sta
307e0 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73  tements..**.** s
307f0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
30800 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
30810 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74  rue if none of t
30820 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73  he bits in its s
30830 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e  econd.** argumen
30840 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65  t match the type
30850 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76   set by the prev
30860 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64  ious sqlite3Memd
30870 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a  ebugSetType()..*
30880 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65  *.** Perhaps the
30890 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20   most important 
308a0 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66  point is the dif
308b0 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
308c0 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20  MEMTYPE_HEAP.** 
308d0 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  and MEMTYPE_LOOK
308e0 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c  ASIDE.  If an al
308f0 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54  location is MEMT
30900 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74  YPE_LOOKASIDE, t
30910 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20  hat means.** it 
30920 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
30930 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f  allocated by loo
30940 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74  kaside, except t
30950 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61  he allocation wa
30960 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f  s.** too large o
30970 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20  r lookaside was 
30980 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49  already full.  I
30990 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  t is important t
309a0 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74  o verify.** that
309b0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61   allocations tha
309c0 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
309d0 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c  n satisfied by l
309e0 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74  ookaside are not
309f0 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20  .** passed back 
30a00 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65  to non-lookaside
30a10 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73   free() routines
30a20 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20  .  Asserts such 
30a30 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c  as the.** exampl
30a40 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63  e above are plac
30a50 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f  ed on the non-lo
30a60 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72  okaside free() r
30a70 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66  outines to verif
30a80 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72  y.** this constr
30a90 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  aint..**.** All 
30aa0 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70  of this is no-op
30ab0 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f   for a productio
30ac0 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c  n build.  It onl
30ad0 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20  y comes into.** 
30ae0 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53 51  play when the SQ
30af0 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f  LITE_MEMDEBUG co
30b00 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
30b10 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69  n is used..*/.#i
30b20 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44  fdef SQLITE_MEMD
30b30 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
30b40 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
30b50 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20  pe(void*,u8);.  
30b60 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  int sqlite3Memde
30b70 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a  bugHasType(void*
30b80 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  ,u8);.  int sqli
30b90 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
30ba0 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c  e(void*,u8);.#el
30bb0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
30bc0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
30bd0 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f  pe(X,Y)  /* no-o
30be0 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71  p */.# define sq
30bf0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
30c00 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64  Type(X,Y)  1.# d
30c10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
30c20 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29  debugNoType(X,Y)
30c30 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66     1.#endif.#def
30c40 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  ine MEMTYPE_HEAP
30c50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20         0x01  /* 
30c60 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c  General heap all
30c70 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  ocations */.#def
30c80 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  ine MEMTYPE_LOOK
30c90 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20  ASIDE  0x02  /* 
30ca0 48 65 61 70 20 74 68 61 74 20 6d 69 67 68 74 20  Heap that might 
30cb0 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73  have been lookas
30cc0 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ide */.#define M
30cd0 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20  EMTYPE_PCACHE   
30ce0 20 20 30 78 30 34 20 20 2f 2a 20 50 61 67 65 20    0x04  /* Page 
30cf0 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  cache allocation
30d00 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65  s */../*.** Thre
30d10 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a  ading interface.
30d20 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
30d30 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
30d40 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  >0.int sqlite3Th
30d50 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69 74  readCreate(SQLit
30d60 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28  eThread**,void*(
30d70 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29  *)(void*),void*)
30d80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72  ;.int sqlite3Thr
30d90 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68  eadJoin(SQLiteTh
30da0 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a  read*, void**);.
30db0 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
30dc0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
30dd0 45 5f 44 42 50 41 47 45 5f 56 54 41 42 29 20 7c  E_DBPAGE_VTAB) |
30de0 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
30df0 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74  _TEST).int sqlit
30e00 65 33 44 62 70 61 67 65 52 65 67 69 73 74 65 72  e3DbpageRegister
30e10 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64  (sqlite3*);.#end
30e20 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
30e30 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53  QLITE_ENABLE_DBS
30e40 54 41 54 5f 56 54 41 42 29 20 7c 7c 20 64 65 66  TAT_VTAB) || def
30e50 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
30e60 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 73  ).int sqlite3Dbs
30e70 74 61 74 52 65 67 69 73 74 65 72 28 73 71 6c 69  tatRegister(sqli
30e80 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69  te3*);.#endif..i
30e90 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 56 65  nt sqlite3ExprVe
30ea0 63 74 6f 72 53 69 7a 65 28 45 78 70 72 20 2a 70  ctorSize(Expr *p
30eb0 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
30ec0 65 33 45 78 70 72 49 73 56 65 63 74 6f 72 28 45  e3ExprIsVector(E
30ed0 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70  xpr *pExpr);.Exp
30ee0 72 20 2a 73 71 6c 69 74 65 33 56 65 63 74 6f 72  r *sqlite3Vector
30ef0 46 69 65 6c 64 53 75 62 65 78 70 72 28 45 78 70  FieldSubexpr(Exp
30f00 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a  r*, int);.Expr *
30f10 73 71 6c 69 74 65 33 45 78 70 72 46 6f 72 56 65  sqlite3ExprForVe
30f20 63 74 6f 72 46 69 65 6c 64 28 50 61 72 73 65 2a  ctorField(Parse*
30f30 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69  ,Expr*,int);.voi
30f40 64 20 73 71 6c 69 74 65 33 56 65 63 74 6f 72 45  d sqlite3VectorE
30f50 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20  rrorMsg(Parse*, 
30f60 45 78 70 72 2a 29 3b 0a 0a 23 69 66 6e 64 65 66  Expr*);..#ifndef
30f70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d   SQLITE_OMIT_COM
30f80 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53  PILEOPTION_DIAGS
30f90 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 73 71  .const char **sq
30fa0 6c 69 74 65 33 43 6f 6d 70 69 6c 65 4f 70 74 69  lite3CompileOpti
30fb0 6f 6e 73 28 69 6e 74 20 2a 70 6e 4f 70 74 29 3b  ons(int *pnOpt);
30fc0 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20  .#endif..#endif 
30fd0 2f 2a 20 53 51 4c 49 54 45 49 4e 54 5f 48 20 2a  /* SQLITEINT_H *
30fe0 2f 0a                                            /.