/ Hex Artifact Content
Login

Artifact d8e878fa1cb949ee8943f51965cbb917acdb4cc1238af8481eb839d11bf34d0a:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48  ed(HAVE_STDINT_H
1f20: 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  )   /* Use this 
1f30: 63 61 73 65 20 69 66 20 77 65 20 68 61 76 65 20  case if we have 
1f40: 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f 0a  ANSI headers */.
1f50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1f60: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
1f70: 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f 74  (void*)(intptr_t
1f80: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
1f90: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
1fa0: 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74 70  (X)  ((int)(intp
1fb0: 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 69 66 20  tr_t)(X)).#elif 
1fc0: 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49 46  defined(__PTRDIF
1fd0: 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68  F_TYPE__)  /* Th
1fe0: 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20 77  is case should w
1ff0: 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23  ork for GCC */.#
2000: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
2010: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
2020: 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46 46  void*)(__PTRDIFF
2030: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20 64  _TYPE__)(X)).# d
2040: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
2050: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
2060: 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  t)(__PTRDIFF_TYP
2070: 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20 21  E__)(X)).#elif !
2080: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
2090: 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73  )       /* Works
20a0: 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f   for compilers o
20b0: 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a  ther than LLVM *
20c0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
20d0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
20e0: 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72   ((void*)&((char
20f0: 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e  *)0)[X]).# defin
2100: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
2110: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 28  INT(X)  ((int)((
2120: 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72 2a  (char*)X)-(char*
2130: 29 30 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  )0)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
6950: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 28 64 65  |    \.      (de
6960: 66 69 6e 65 64 28 5f 5f 54 4f 53 5f 41 49 58 5f  fined(__TOS_AIX_
6970: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
6980: 5f 36 34 42 49 54 5f 5f 29 29 0a 23 20 20 20 64  _64BIT__)).#   d
6990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
69a0: 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20  SIZE 4.# else.# 
69b0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
69c0: 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69  PTRSIZE 8.# endi
69d0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  f.#endif../* The
69e0: 20 75 70 74 72 20 74 79 70 65 20 69 73 20 61 6e   uptr type is an
69f0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6a00: 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
6a10: 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72  o hold a pointer
6a20: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6a30: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20  HAVE_STDINT_H). 
6a40: 20 74 79 70 65 64 65 66 20 75 69 6e 74 70 74 72   typedef uintptr
6a50: 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53  _t uptr;.#elif S
6a60: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34  QLITE_PTRSIZE==4
6a70: 0a 20 20 74 79 70 65 64 65 66 20 75 33 32 20 75  .  typedef u32 u
6a80: 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ptr;.#else.  typ
6a90: 65 64 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23  edef u64 uptr;.#
6aa0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6ab0: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6ac0: 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63  ,S,E) macro chec
6ad0: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69  ks to see if poi
6ae0: 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f  nter P points to
6af0: 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65  .** something be
6b00: 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69  tween S (inclusi
6b10: 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75  ve) and E (exclu
6b20: 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  sive)..**.** In 
6b30: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69  other words, S i
6b40: 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 45  s a buffer and E
6b50: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6b60: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
6b70: 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64  after.** the end
6b80: 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20 54   of buffer S.  T
6b90: 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e  his macro return
6ba0: 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e  s true if P poin
6bb0: 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a  ts to something.
6bc0: 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  ** contained wit
6bd0: 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 53  hin the buffer S
6be0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
6bf0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
6c00: 29 20 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28  ) (((uptr)(P)>=(
6c10: 75 70 74 72 29 28 53 29 29 26 26 28 28 75 70 74  uptr)(S))&&((upt
6c20: 72 29 28 50 29 3c 28 75 70 74 72 29 28 45 29 29  r)(P)<(uptr)(E))
6c30: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  ).../*.** Macros
6c40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
6c50: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
6c60: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
6c70: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
6c80: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
6c90: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
6ca0: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
6cb0: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
6cc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
6cd0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
6ce0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
6cf0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
6d00: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
6d10: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
6d20: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
6d30: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
6d40: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
6d50: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6d60: 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  =0 is set, then 
6d70: 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65  byte-order is de
6d80: 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72  termined.** at r
6d90: 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e  un-time..*/.#ifn
6da0: 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  def SQLITE_BYTEO
6db0: 52 44 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65  RDER.# if define
6dc0: 64 28 69 33 38 36 29 20 20 20 20 20 20 7c 7c 20  d(i386)      || 
6dd0: 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f  defined(__i386__
6de0: 29 20 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  )      || define
6df0: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
6e00: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6e10: 5f 5f 78 38 36 5f 36 34 29 20 20 7c 7c 20 64 65  __x86_64)  || de
6e20: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
6e30: 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  )    || defined(
6e40: 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c  _M_X64)  ||    \
6e50: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d  .     defined(_M
6e60: 5f 41 4d 44 36 34 29 20 20 7c 7c 20 64 65 66 69  _AMD64)  || defi
6e70: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20  ned(_M_ARM)     
6e80: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
6e90: 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20  x86)   ||    \. 
6ea0: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6eb0: 4d 45 4c 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEL__) || define
6ec0: 64 28 5f 5f 41 41 52 43 48 36 34 45 4c 5f 5f 29  d(__AARCH64EL__)
6ed0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41   || defined(_M_A
6ee0: 52 4d 36 34 29 0a 23 20 20 20 64 65 66 69 6e 65  RM64).#   define
6ef0: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
6f00: 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69 66  R    1234.# elif
6f10: 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20   defined(sparc) 
6f20: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6f30: 5f 70 70 63 5f 5f 29 20 7c 7c 20 5c 0a 20 20 20  _ppc__) || \.   
6f40: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6f50: 4d 45 42 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEB__) || define
6f60: 64 28 5f 5f 41 41 52 43 48 36 34 45 42 5f 5f 29  d(__AARCH64EB__)
6f70: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
6f80: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
6f90: 34 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20  4321.# else.#   
6fa0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
6fb0: 54 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69  TEORDER 0.# endi
6fc0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  f.#endif.#if SQL
6fd0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34  ITE_BYTEORDER==4
6fe0: 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  321.# define SQL
6ff0: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
7000: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
7010: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
7020: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
7030: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
7040: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65  QLITE_UTF16BE.#e
7050: 6c 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  lif SQLITE_BYTEO
7060: 52 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66  RDER==1234.# def
7070: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
7080: 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69  DIAN    0.# defi
7090: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
70a0: 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e  ENDIAN 1.# defin
70b0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
70c0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
70d0: 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64  16LE.#else.# ifd
70e0: 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
70f0: 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69  MATION.  const i
7100: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
7110: 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65  1;.# else.  exte
7120: 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  rn const int sql
7130: 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66  ite3one;.# endif
7140: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7150: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a  _BIGENDIAN    (*
7160: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
7170: 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69  3one)==0).# defi
7180: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
7190: 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a  ENDIAN (*(char *
71a0: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
71b0: 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1).# define SQLI
71c0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
71d0: 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41  (SQLITE_BIGENDIA
71e0: 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  N?SQLITE_UTF16BE
71f0: 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29  :SQLITE_UTF16LE)
7200: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
7210: 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65  onstants for the
7220: 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61   largest and sma
7230: 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36  llest possible 6
7240: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
7250: 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20  egers..** These 
7260: 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67  macros are desig
7270: 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72  ned to work corr
7280: 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32  ectly on both 32
7290: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a  -bit and 64-bit.
72a0: 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f  ** compilers..*/
72b0: 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54  .#define LARGEST
72c0: 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66  _INT64  (0xfffff
72d0: 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66  fff|(((i64)0x7ff
72e0: 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65  fffff)<<32)).#de
72f0: 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e  fine SMALLEST_IN
7300: 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d  T64 (((i64)-1) -
7310: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a   LARGEST_INT64).
7320: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20  ./*.** Round up 
7330: 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20  a number to the 
7340: 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74  next larger mult
7350: 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73  iple of 8.  This
7360: 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66   is used.** to f
7370: 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67  orce 8-byte alig
7380: 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20  nment on 64-bit 
7390: 61 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a  architectures..*
73a0: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38  /.#define ROUND8
73b0: 28 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29  (x)     (((x)+7)
73c0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e  &~7)../*.** Roun
73d0: 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65  d down to the ne
73e0: 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f  arest multiple o
73f0: 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  f 8.*/.#define R
7400: 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78  OUNDDOWN8(x) ((x
7410: 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  )&~7)../*.** Ass
7420: 65 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69  ert that the poi
7430: 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65  nter X is aligne
7440: 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62  d to an 8-byte b
7450: 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a  oundary.  This.*
7460: 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  * macro is used 
7470: 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65  only within asse
7480: 72 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74  rt() to verify t
7490: 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74  hat the code get
74a0: 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65  s.** all alignme
74b0: 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  nt restrictions 
74c0: 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45  correct..**.** E
74d0: 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45  xcept, if SQLITE
74e0: 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f  _4_BYTE_ALIGNED_
74f0: 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65  MALLOC is define
7500: 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75  d, then the.** u
7510: 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63  nderlying malloc
7520: 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  () implementatio
7530: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
7540: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
7550: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
7560: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
7570: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
7580: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
7590: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
75a0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
75b0: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
75c0: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
75d0: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
75e0: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
75f0: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
7600: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
7610: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
7620: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
7630: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
7640: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69  #endif../*.** Di
7650: 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c  sable MMAP on pl
7660: 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74  atforms where it
7670: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74   is known to not
7680: 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66   work.*/.#if def
7690: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
76a0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51  ) || defined(__Q
76b0: 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66  NXNTO__).# undef
76c0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
76d0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
76e0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
76f0: 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IZE 0.#endif../*
7700: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69  .** Default maxi
7710: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f  mum size of memo
7720: 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72  ry used by memor
7730: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20  y-mapped I/O in 
7740: 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65  the VFS.*/.#ifde
7750: 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e  f __APPLE__.# in
7760: 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e  clude <TargetCon
7770: 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e  ditionals.h>.#en
7780: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
7790: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
77a0: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
77b0: 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20  linux__) \.  || 
77c0: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
77d0: 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28  \.  || (defined(
77e0: 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65  __APPLE__) && de
77f0: 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29  fined(__MACH__))
7800: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
7810: 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65  __sun) \.  || de
7820: 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f  fined(__FreeBSD_
7830: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
7840: 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29  d(__DragonFly__)
7850: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
7860: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7870: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
7880: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
7890: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
78a0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
78b0: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
78c0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
78d0: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
78e0: 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c  ZE is zero on al
78f0: 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72  l platforms.  Or
7900: 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67  , even if a larg
7910: 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d  er.** default MM
7920: 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69  AP_SIZE is speci
7930: 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  fied at compile-
7940: 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
7950: 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20  that it does.** 
7960: 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d  not exceed the m
7970: 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65  aximum mmap size
7980: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
7990: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
79a0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
79b0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
79c0: 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66  AP_SIZE 0.#endif
79d0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
79e0: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51  ULT_MMAP_SIZE>SQ
79f0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7a00: 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  ZE.# undef SQLIT
7a10: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
7a20: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
7a30: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
7a40: 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58  _SIZE SQLITE_MAX
7a50: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69  _MMAP_SIZE.#endi
7a60: 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54  f../*.** SELECTT
7a70: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c  RACE_ENABLED wil
7a80: 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72  l be either 1 or
7a90: 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20   0 depending on 
7aa0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a  whether or not.*
7ab0: 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65  * the Select que
7ac0: 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61  ry generator tra
7ad0: 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75  cing logic is tu
7ae0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
7af0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
7b00: 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
7b10: 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45  E).# define SELE
7b20: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
7b30: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
7b40: 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
7b50: 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  BLED 0.#endif../
7b60: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
7b70: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
7b80: 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  g structure is u
7b90: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
7ba0: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
7bb0: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20   callback for a 
7bc0: 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e  given sqlite han
7bd0: 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  dle..**.** The s
7be0: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
7bf0: 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  r member of the 
7c00: 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f  sqlite struct co
7c10: 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a  ntains the busy.
7c20: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  ** callback for 
7c30: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
7c40: 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20  dle. Each pager 
7c50: 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73  opened via the s
7c60: 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20  qlite.** handle 
7c70: 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e  is passed a poin
7c80: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75  ter to sqlite.bu
7c90: 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62  syHandler. The b
7ca0: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
7cb0: 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65  allback is curre
7cc0: 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c  ntly invoked onl
7cd0: 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61  y from within pa
7ce0: 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65  ger.c..*/.typede
7cf0: 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  f struct BusyHan
7d00: 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72  dler BusyHandler
7d10: 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  ;.struct BusyHan
7d20: 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78  dler {.  int (*x
7d30: 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f 69  BusyHandler)(voi
7d40: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
7d50: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
7d60: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73 79  */.  void *pBusy
7d70: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
7d80: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
7d90: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
7da0: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
7db0: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
7dc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
7dd0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
7de0: 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a  each busy call *
7df0: 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69 6c  /.  u8 bExtraFil
7e00: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
7e10: 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64 65        /* Include
7e20: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61 73   sqlite3_file as
7e30: 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a 2f   callback arg */
7e40: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20  .};../*.** Name 
7e50: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
7e60: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54  tabase table.  T
7e70: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
7e80: 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61  se table.** is a
7e90: 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74   special table t
7ea0: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
7eb0: 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74  mes and attribut
7ec0: 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65  es of all.** use
7ed0: 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  r tables and ind
7ee0: 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ices..*/.#define
7ef0: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20   MASTER_NAME    
7f00: 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65     "sqlite_maste
7f10: 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f  r".#define TEMP_
7f20: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71  MASTER_NAME  "sq
7f30: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
7f40: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  "../*.** The roo
7f50: 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61  t-page of the ma
7f60: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
7f70: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
7f80: 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20  MASTER_ROOT     
7f90: 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e    1../*.** The n
7fa0: 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ame of the schem
7fb0: 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  a table..*/.#def
7fc0: 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  ine SCHEMA_TABLE
7fd0: 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d  (x)  ((!OMIT_TEM
7fe0: 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d  PDB)&&(x==1)?TEM
7ff0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41  P_MASTER_NAME:MA
8000: 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a  STER_NAME)../*.*
8010: 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20  * A convenience 
8020: 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72  macro that retur
8030: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
8040: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20   elements in.** 
8050: 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65  an array..*/.#de
8060: 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58  fine ArraySize(X
8070: 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65  )    ((int)(size
8080: 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30  of(X)/sizeof(X[0
8090: 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ])))../*.** Dete
80a0: 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67  rmine if the arg
80b0: 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72  ument is a power
80c0: 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69   of two.*/.#defi
80d0: 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28  ne IsPowerOfTwo(
80e0: 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29  X) (((X)&((X)-1)
80f0: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )==0)../*.** The
8100: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65   following value
8110: 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72   as a destructor
8120: 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71   means to use sq
8130: 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a  lite3DbFree()..*
8140: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46  * The sqlite3DbF
8150: 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ree() routine re
8160: 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d  quires two param
8170: 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66  eters instead of
8180: 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61   the.** one para
8190: 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74 72  meter that destr
81a0: 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20  uctors normally 
81b0: 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76  want.  So we hav
81c0: 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a  e to introduce.*
81d0: 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c  * this magic val
81e0: 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  ue that the code
81f0: 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65   knows to handle
8200: 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41   differently.  A
8210: 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69  ny.** pointer wi
8220: 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20  ll work here as 
8230: 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69  long as it is di
8240: 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49  stinct from SQLI
8250: 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64  TE_STATIC.** and
8260: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
8270: 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  T..*/.#define SQ
8280: 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28  LITE_DYNAMIC   (
8290: 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63  (sqlite3_destruc
82a0: 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33  tor_type)sqlite3
82b0: 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a  MallocSize)../*.
82c0: 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f  ** When SQLITE_O
82d0: 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e  MIT_WSD is defin
82e0: 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  ed, it means tha
82f0: 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61  t the target pla
8300: 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f  tform does.** no
8310: 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62  t support Writab
8320: 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28  le Static Data (
8330: 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f  WSD) such as glo
8340: 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76  bal and static v
8350: 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c  ariables..** All
8360: 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20   variables must 
8370: 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65  either be on the
8380: 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69   stack or dynami
8390: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
83a0: 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70  from.** the heap
83b0: 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75  .  When WSD is u
83c0: 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20  nsupported, the 
83d0: 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61  variable declara
83e0: 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a  tions scattered.
83f0: 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68  ** throughout th
8400: 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75  e SQLite code mu
8410: 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61  st become consta
8420: 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68  nts instead.  Th
8430: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20  e SQLITE_WSD.** 
8440: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
8450: 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20  r this purpose. 
8460: 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20   And instead of 
8470: 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20  referencing the 
8480: 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65  variable.** dire
8490: 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73  ctly, we use its
84a0: 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b   constant as a k
84b0: 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65  ey to lookup the
84c0: 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61   run-time alloca
84d0: 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68  ted.** buffer th
84e0: 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61  at holds real va
84f0: 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e  riable.  The con
8500: 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68  stant is also th
8510: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a  e initializer.**
8520: 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d   for the run-tim
8530: 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  e allocated buff
8540: 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  er..**.** In the
8550: 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72   usual case wher
8560: 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74  e WSD is support
8570: 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57  ed, the SQLITE_W
8580: 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a  SD and GLOBAL.**
8590: 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e   macros become n
85a0: 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a  o-ops and have z
85b0: 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ero performance 
85c0: 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65  impact..*/.#ifde
85d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
85e0: 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  D.  #define SQLI
85f0: 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23  TE_WSD const.  #
8600: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
8610: 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33  v) (*(t*)sqlite3
8620: 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a  _wsd_find((void*
8630: 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29  )&(v), sizeof(v)
8640: 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  )).  #define sql
8650: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
8660: 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53   GLOBAL(struct S
8670: 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71  qlite3Config, sq
8680: 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69  lite3Config).  i
8690: 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69  nt sqlite3_wsd_i
86a0: 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a  nit(int N, int J
86b0: 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  );.  void *sqlit
86c0: 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64  e3_wsd_find(void
86d0: 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c   *K, int L);.#el
86e0: 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  se.  #define SQL
86f0: 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  ITE_WSD.  #defin
8700: 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a  e GLOBAL(t,v) v.
8710: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
8720: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71  3GlobalConfig sq
8730: 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64  lite3Config.#end
8740: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
8750: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
8760: 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  re used to suppr
8770: 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  ess compiler war
8780: 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20  nings and to.** 
8790: 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f  make it clear to
87a0: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77   human readers w
87b0: 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  hen a function p
87c0: 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69  arameter is deli
87d0: 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74  berately.** left
87e0: 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74   unused within t
87f0: 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e  he body of a fun
8800: 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61  ction. This usua
8810: 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e  lly happens when
8820: 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69  .** a function i
8830: 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66  s called via a f
8840: 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e  unction pointer.
8850: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65   For example the
8860: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
8870: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
8880: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
8890: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
88a0: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
88b0: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
88c0: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
88d0: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
88e0: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
88f0: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
8900: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
8910: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
8920: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
8930: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
8940: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
8950: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
8960: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
8970: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
8980: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
8990: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
89a0: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
89b0: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
89c0: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
89d0: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
89e0: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
89f0: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
8a00: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
8a10: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
8a20: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
8a30: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
8a40: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
8a50: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
8a60: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
8a70: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
8a80: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
8a90: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
8aa0: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
8ab0: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
8ac0: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
8ad0: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
8ae0: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
8af0: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
8b00: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
8b10: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8b20: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
8b30: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
8b40: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
8b50: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
8b60: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
8b70: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
8b80: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
8b90: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
8ba0: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
8bb0: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
8bc0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8bd0: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
8be0: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
8bf0: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
8c00: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
8c10: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
8c20: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
8c30: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
8c40: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
8c50: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
8c60: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
8c70: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
8c80: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
8c90: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
8ca0: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
8cb0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
8cc0: 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a  ruct FKey FKey;.
8cd0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
8ce0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46 75  uncDestructor Fu
8cf0: 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79  ncDestructor;.ty
8d00: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
8d10: 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79  cDef FuncDef;.ty
8d20: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
8d30: 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65 66  cDefHash FuncDef
8d40: 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74  Hash;.typedef st
8d50: 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69  ruct IdList IdLi
8d60: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
8d70: 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a  ct Index Index;.
8d80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
8d90: 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78  ndexSample Index
8da0: 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20  Sample;.typedef 
8db0: 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20  struct KeyClass 
8dc0: 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65  KeyClass;.typede
8dd0: 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  f struct KeyInfo
8de0: 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65   KeyInfo;.typede
8df0: 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  f struct Lookasi
8e00: 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79  de Lookaside;.ty
8e10: 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f  pedef struct Loo
8e20: 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61  kasideSlot Looka
8e30: 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65  sideSlot;.typede
8e40: 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20  f struct Module 
8e50: 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20  Module;.typedef 
8e60: 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65  struct NameConte
8e70: 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a  xt NameContext;.
8e80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
8e90: 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65  arse Parse;.type
8ea0: 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55 70  def struct PreUp
8eb0: 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b 0a  date PreUpdate;.
8ec0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
8ed0: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50  rintfArguments P
8ee0: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a  rintfArguments;.
8ef0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52  typedef struct R
8f00: 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e 61 6d  enameToken Renam
8f10: 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20  eToken;.typedef 
8f20: 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f  struct RowSet Ro
8f30: 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74  wSet;.typedef st
8f40: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53  ruct Savepoint S
8f50: 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65  avepoint;.typede
8f60: 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  f struct Select 
8f70: 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20  Select;.typedef 
8f80: 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72  struct SQLiteThr
8f90: 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64  ead SQLiteThread
8fa0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8fb0: 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65   SelectDest Sele
8fc0: 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20  ctDest;.typedef 
8fd0: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53  struct SrcList S
8fe0: 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  rcList;.typedef 
8ff0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 73  struct sqlite3_s
9000: 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f 2a 20  tr StrAccum; /* 
9010: 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73 20 66  Internal alias f
9020: 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72 20 2a  or sqlite3_str *
9030: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
9040: 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79   Table Table;.ty
9050: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62  pedef struct Tab
9060: 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b  leLock TableLock
9070: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
9080: 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79   Token Token;.ty
9090: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 65  pedef struct Tre
90a0: 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a  eView TreeView;.
90b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
90c0: 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a  rigger Trigger;.
90d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
90e0: 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65  riggerPrg Trigge
90f0: 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74  rPrg;.typedef st
9100: 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
9110: 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79   TriggerStep;.ty
9120: 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70  pedef struct Unp
9130: 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61  ackedRecord Unpa
9140: 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65  ckedRecord;.type
9150: 64 65 66 20 73 74 72 75 63 74 20 55 70 73 65 72  def struct Upser
9160: 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65 64 65  t Upsert;.typede
9170: 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  f struct VTable 
9180: 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20  VTable;.typedef 
9190: 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56  struct VtabCtx V
91a0: 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20  tabCtx;.typedef 
91b0: 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61  struct Walker Wa
91c0: 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  lker;.typedef st
91d0: 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57  ruct WhereInfo W
91e0: 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65  hereInfo;.typede
91f0: 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77 20  f struct Window 
9200: 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65 66 20  Window;.typedef 
9210: 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74 68  struct With With
9220: 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69  ;.../*.** The bi
9230: 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64  tmask datatype d
9240: 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20  efined below is 
9250: 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  used for various
9260: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
9270: 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74  **.** Changing t
9280: 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69  his from a 64-bi
9290: 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79  t to a 32-bit ty
92a0: 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75  pe limits the nu
92b0: 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65  mber of.** table
92c0: 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33  s in a join to 3
92d0: 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e  2 instead of 64.
92e0: 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65    But it also re
92f0: 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a  duces the size.*
9300: 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  * of the library
9310: 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e   by 738 bytes on
9320: 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65 66   ix86..*/.#ifdef
9330: 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f   SQLITE_BITMASK_
9340: 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20 53  TYPE.  typedef S
9350: 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59  QLITE_BITMASK_TY
9360: 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c 73  PE Bitmask;.#els
9370: 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34 20  e.  typedef u64 
9380: 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a  Bitmask;.#endif.
9390: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
93a0: 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42  r of bits in a B
93b0: 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d  itmask.  "BMS" m
93c0: 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69  eans "BitMask Si
93d0: 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ze"..*/.#define 
93e0: 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65  BMS  ((int)(size
93f0: 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a  of(Bitmask)*8)).
9400: 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20  ./*.** A bit in 
9410: 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65  a Bitmask.*/.#de
9420: 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20  fine MASKBIT(n) 
9430: 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c    (((Bitmask)1)<
9440: 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41  <(n)).#define MA
9450: 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e  SKBIT32(n) (((un
9460: 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28  signed int)1)<<(
9470: 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c 42  n)).#define ALLB
9480: 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d 61  ITS      ((Bitma
9490: 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56 4c 69  sk)-1)../* A VLi
94a0: 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f 72 64  st object record
94b0: 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65 74 77  s a mapping betw
94c0: 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73 2f 76  een parameters/v
94d0: 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63 61 72  ariables/wildcar
94e0: 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53 51 4c  ds.** in the SQL
94f0: 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75 63 68   statement (such
9500: 20 61 73 20 24 61 62 63 2c 20 40 70 71 72 2c 20   as $abc, @pqr, 
9510: 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74 68 65  or :xyz) and the
9520: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 72 69   integer.** vari
9530: 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73 73 6f  able number asso
9540: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74  ciated with that
9550: 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53 65 65   parameter.  See
9560: 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65 73 63   the format desc
9570: 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74 68  ription.** on th
9580: 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74 41 64  e sqlite3VListAd
9590: 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72 20  d() routine for 
95a0: 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  more information
95b0: 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20 72 65  .  A VList is re
95c0: 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61 6e 20  ally.** just an 
95d0: 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72  array of integer
95e0: 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 69 6e  s..*/.typedef in
95f0: 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20  t VList;../*.** 
9600: 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76  Defer sourcing v
9610: 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e  dbe.h and btree.
9620: 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68  h until after th
9630: 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22 42  e "u8" and.** "B
9640: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
9650: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
9660: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
9670: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
9680: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
9690: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
96a0: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
96b0: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
96c0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
96d0: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
96e0: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
96f0: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69 6e  e "pcache.h".#in
9700: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
9710: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
9720: 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 45  ./* The SQLITE_E
9730: 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f 6d  XTRA_DURABLE com
9740: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
9750: 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68 65   used to set the
9760: 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e 63   default.** sync
9770: 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 20  hronous setting 
9780: 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69 73  to EXTRA.  It is
9790: 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f   no longer suppo
97a0: 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rted..*/.#ifdef 
97b0: 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52  SQLITE_EXTRA_DUR
97c0: 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20 55  ABLE.# warning U
97d0: 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  se SQLITE_DEFAUL
97e0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33 20  T_SYNCHRONOUS=3 
97f0: 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49 54  instead of SQLIT
9800: 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a  E_EXTRA_DURABLE.
9810: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
9820: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9830: 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OUS 3.#endif../*
9840: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e 63  .** Default sync
9850: 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e 0a  hronous levels..
9860: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
9870: 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20 72  (for historcal r
9880: 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47 45  easons) the PAGE
9890: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a 20  R_SYNCHRONOUS_* 
98a0: 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a 2a  macros differ.**
98b0: 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
98c0: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
98d0: 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31 2e  NOUS value by 1.
98e0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  .**.**          
98f0: 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f   PAGER_SYNCHRONO
9900: 55 53 20 20 20 20 20 20 20 44 45 46 41 55 4c 54  US       DEFAULT
9910: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a 20  _SYNCHRONOUS.** 
9920: 20 20 4f 46 46 20 20 20 20 20 20 20 20 20 20 20    OFF           
9930: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1               
9940: 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20 20            0.**  
9950: 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 32   NORMAL        2
9960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9970: 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20 20           1.**   
9980: 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33 20  FULL          3 
9990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99a0: 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20 45          2.**   E
99b0: 58 54 52 41 20 20 20 20 20 20 20 20 20 34 20 20  XTRA         4  
99c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99d0: 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20 54         3.**.** T
99e0: 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  he "PRAGMA synch
99f0: 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65 6e  ronous" statemen
9a00: 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65 20  t also uses the 
9a10: 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65  zero-based numbe
9a20: 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  rs..** In other 
9a30: 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f 2d  words, the zero-
9a40: 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61 72  based numbers ar
9a50: 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 65  e used for all e
9a60: 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61 63  xternal interfac
9a70: 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f 6e  es.** and the on
9a80: 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20 61  e-based values a
9a90: 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c  re used internal
9aa0: 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ly..*/.#ifndef S
9ab0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9ac0: 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69  NCHRONOUS.# defi
9ad0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
9ae0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 32 0a  T_SYNCHRONOUS 2.
9af0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
9b00: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41  QLITE_DEFAULT_WA
9b10: 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20  L_SYNCHRONOUS.# 
9b20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
9b30: 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52  FAULT_WAL_SYNCHR
9b40: 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45 46  ONOUS SQLITE_DEF
9b50: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
9b60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
9b70: 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c  ach database fil
9b80: 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64  e to be accessed
9b90: 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69   by the system i
9ba0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
9bb0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
9bc0: 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  g structure.  Th
9bd0: 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79  ere are normally
9be0: 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74   two of these st
9bf0: 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74  ructures.** in t
9c00: 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20  he sqlite.aDb[] 
9c10: 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69  array.  aDb[0] i
9c20: 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
9c30: 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20  ase file and.** 
9c40: 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61  aDb[1] is the da
9c50: 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
9c60: 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61   to hold tempora
9c70: 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69  ry tables.  Addi
9c80: 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61  tional.** databa
9c90: 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63  ses may be attac
9ca0: 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44  hed..*/.struct D
9cb0: 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62 53  b {.  char *zDbS
9cc0: 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
9cd0: 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62  me of this datab
9ce0: 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e 61 6d  ase. (schema nam
9cf0: 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65 29  e, not filename)
9d00: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
9d10: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
9d20: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
9d30: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
9d40: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
9d50: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
9d60: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
9d70: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
9d80: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
9d90: 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b 20  .  u8 bSyncSet; 
9da0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
9db0: 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  if "PRAGMA synch
9dc0: 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62 65  ronous=N" has be
9dd0: 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68 65  en run */.  Sche
9de0: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
9df0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64   /* Pointer to d
9e00: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28  atabase schema (
9e10: 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29  possibly shared)
9e20: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
9e30: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
9e40: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
9e50: 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61  ture stores a da
9e60: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
9e70: 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61  *.** Most Schema
9e80: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73   objects are ass
9e90: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42  ociated with a B
9ea0: 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70  tree.  The excep
9eb0: 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53  tion is.** the S
9ec0: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45  chema for the TE
9ed0: 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c  MP databaes (sql
9ee0: 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69  ite3.aDb[1]) whi
9ef0: 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64  ch is free-stand
9f00: 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65  ing..** In share
9f10: 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20  d cache mode, a 
9f20: 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62  single Schema ob
9f30: 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72  ject can be shar
9f40: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a  ed by multiple.*
9f50: 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65  * Btrees that re
9f60: 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20  fer to the same 
9f70: 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61  underlying BtSha
9f80: 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a  red object..**.*
9f90: 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  * Schema objects
9fa0: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
9fb0: 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77  ly deallocated w
9fc0: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72  hen the last Btr
9fd0: 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72  ee that.** refer
9fe0: 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64 65  ences them is de
9ff0: 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54  stroyed.   The T
a000: 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61  EMP Schema is ma
a010: 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a  nually freed by.
a020: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  ** sqlite3_close
a030: 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61  ()..*.** A threa
a040: 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e  d must be holdin
a050: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
a060: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42   corresponding B
a070: 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  tree in order.**
a080: 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d   to access Schem
a090: 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73  a content.  This
a0a0: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
a0b0: 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c  e thread must al
a0c0: 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67  so be.** holding
a0d0: 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20   a mutex on the 
a0e0: 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69  sqlite3 connecti
a0f0: 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20  on pointer that 
a100: 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a  owns the Btree..
a110: 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63  ** For a TEMP Sc
a120: 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63  hema, only the c
a130: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
a140: 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a  is required..*/.
a150: 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a  struct Schema {.
a160: 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f    int schema_coo
a170: 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61  kie;   /* Databa
a180: 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  se schema versio
a190: 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69  n number for thi
a1a0: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  s file */.  int 
a1b0: 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20  iGeneration;    
a1c0: 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63   /* Generation c
a1d0: 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65  ounter.  Increme
a1e0: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63  nted with each c
a1f0: 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20  hange */.  Hash 
a200: 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20  tblHash;        
a210: 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e  /* All tables in
a220: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
a230: 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68 3b  .  Hash idxHash;
a240: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28          /* All (
a250: 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69  named) indices i
a260: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
a270: 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61 73  /.  Hash trigHas
a280: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
a290: 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65 64  triggers indexed
a2a0: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
a2b0: 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20  sh fkeyHash;    
a2c0: 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67     /* All foreig
a2d0: 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72 65  n keys by refere
a2e0: 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20  nced table name 
a2f0: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71  */.  Table *pSeq
a300: 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Tab;      /* The
a310: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
a320: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 41   table used by A
a330: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
a340: 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74    u8 file_format
a350: 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  ;      /* Schema
a360: 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20   format version 
a370: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
a380: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
a390: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
a3a0: 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79  encoding used by
a3b0: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
a3c0: 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c  /.  u16 schemaFl
a3d0: 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67  ags;     /* Flag
a3e0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
a3f0: 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  h this schema */
a400: 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a  .  int cache_siz
a410: 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  e;      /* Numbe
a420: 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73  r of pages to us
a430: 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a  e in the cache *
a440: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  /.};../*.** Thes
a450: 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
a460: 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
a470: 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
a480: 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70 53   in the.** Db.pS
a490: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
a4a0: 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ld..*/.#define D
a4b0: 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c 49  bHasProperty(D,I
a4c0: 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e 61  ,P)     (((D)->a
a4d0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a4e0: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 3d  chemaFlags&(P))=
a4f0: 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62  =(P)).#define Db
a500: 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44  HasAnyProperty(D
a510: 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44  ,I,P)  (((D)->aD
a520: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
a530: 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21 3d  hemaFlags&(P))!=
a540: 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74  0).#define DbSet
a550: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
a560: 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e      (D)->aDb[I].
a570: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a580: 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
a590: 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74  e DbClearPropert
a5a0: 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e  y(D,I,P)   (D)->
a5b0: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a5c0: 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50  schemaFlags&=~(P
a5d0: 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  )../*.** Allowed
a5e0: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
a5f0: 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  DB.pSchema->flag
a600: 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54  s field..**.** T
a610: 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  he DB_SchemaLoad
a620: 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 61  ed flag is set a
a630: 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73  fter the databas
a640: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
a650: 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69  n.** read into i
a660: 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62  nternal hash tab
a670: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e  les..**.** DB_Un
a680: 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73  resetViews means
a690: 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72   that one or mor
a6a0: 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c  e views have col
a6b0: 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a  umn names that.*
a6c0: 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c  * have been fill
a6d0: 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20  ed out.  If the 
a6e0: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20  schema changes, 
a6f0: 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  these column nam
a700: 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e  es might.** chan
a710: 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76  ges and so the v
a720: 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f  iew will need to
a730: 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64   be reset..*/.#d
a740: 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c  efine DB_SchemaL
a750: 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31 20  oaded    0x0001 
a760: 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68   /* The schema h
a770: 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a  as been loaded *
a780: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72  /.#define DB_Unr
a790: 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78 30  esetViews    0x0
a7a0: 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65  002  /* Some vie
a7b0: 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64 20  ws have defined 
a7c0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a  column names */.
a7d0: 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79  #define DB_Empty
a7e0: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
a7f0: 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69  4  /* The file i
a800: 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20  s empty (length 
a810: 30 20 62 79 74 65 73 29 20 2a 2f 0a 23 64 65 66  0 bytes) */.#def
a820: 69 6e 65 20 44 42 5f 52 65 73 65 74 57 61 6e 74  ine DB_ResetWant
a830: 65 64 20 20 20 20 20 30 78 30 30 30 38 20 20 2f  ed     0x0008  /
a840: 2a 20 52 65 73 65 74 20 74 68 65 20 73 63 68 65  * Reset the sche
a850: 6d 61 20 77 68 65 6e 20 6e 53 63 68 65 6d 61 4c  ma when nSchemaL
a860: 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ock==0 */../*.**
a870: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   The number of d
a880: 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f  ifferent kinds o
a890: 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61  f things that ca
a8a0: 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20  n be limited.** 
a8b0: 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  using the sqlite
a8c0: 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66  3_limit() interf
a8d0: 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ace..*/.#define 
a8e0: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28  SQLITE_N_LIMIT (
a8f0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52  SQLITE_LIMIT_WOR
a900: 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a  KER_THREADS+1)..
a910: 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  /*.** Lookaside 
a920: 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20  malloc is a set 
a930: 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75  of fixed-size bu
a940: 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62  ffers that can b
a950: 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74  e used.** to sat
a960: 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73  isfy small trans
a970: 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ient memory allo
a980: 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20  cation requests 
a990: 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61  for objects.** a
a9a0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
a9b0: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
a9c0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
a9d0: 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20    The use of.** 
a9e0: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
a9f0: 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e   provides a sign
aa00: 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61  ificant performa
aa10: 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a  nce enhancement.
aa20: 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20  ** (approx 10%) 
aa30: 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65  by avoiding nume
aa40: 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65  rous malloc/free
aa50: 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20   requests while 
aa60: 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73  parsing.** SQL s
aa70: 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
aa80: 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73   The Lookaside s
aa90: 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63  tructure holds c
aaa0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66  onfiguration inf
aab0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
aac0: 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  he.** lookaside 
aad0: 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d  malloc subsystem
aae0: 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c  .  Each availabl
aaf0: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
ab00: 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f  ion in.** the lo
ab10: 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65  okaside subsyste
ab20: 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61  m is stored on a
ab30: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
ab40: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a  LookasideSlot.**
ab50: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20   objects..**.** 
ab60: 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  Lookaside alloca
ab70: 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61  tions are only a
ab80: 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63  llowed for objec
ab90: 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f  ts that are asso
aba0: 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61  ciated.** with a
abb0: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
abc0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
abd0: 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20    Hence, schema 
abe0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e  information cann
abf0: 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20  ot.** be stored 
ac00: 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63  in lookaside bec
ac10: 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63  ause in shared c
ac20: 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63  ache mode the sc
ac30: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
ac40: 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79  .** is shared by
ac50: 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
ac60: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20  se connections. 
ac70: 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c   Therefore, whil
ac80: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68  e parsing.** sch
ac90: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  ema information,
aca0: 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62   the Lookaside.b
acb0: 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20  Enabled flag is 
acc0: 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a  cleared so that.
acd0: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** lookaside all
ace0: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74  ocations are not
acf0: 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75   used to constru
ad00: 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62  ct the schema ob
ad10: 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  jects..*/.struct
ad20: 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75   Lookaside {.  u
ad30: 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20 20  32 bDisable;    
ad40: 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f         /* Only o
ad50: 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b 61  perate the looka
ad60: 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20 2a  side when zero *
ad70: 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20  /.  u16 sz;     
ad80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
ad90: 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66  ize of each buff
ada0: 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  er in bytes */. 
adb0: 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20   u8 bMalloced;  
adc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
add0: 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61 69   if pStart obtai
ade0: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
adf0: 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 75  _malloc() */.  u
ae00: 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20 20 20 20  32 nSlot;       
ae10: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
ae20: 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65 20 73 6c   of lookaside sl
ae30: 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  ots allocated */
ae40: 0a 20 20 75 33 32 20 61 6e 53 74 61 74 5b 33 5d  .  u32 anStat[3]
ae50: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a  ;          /* 0:
ae60: 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20   hits.  1: size 
ae70: 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c  misses.  2: full
ae80: 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f   misses */.  Loo
ae90: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 49 6e 69  kasideSlot *pIni
aea0: 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  t;   /* List of 
aeb0: 62 75 66 66 65 72 73 20 6e 6f 74 20 70 72 65 76  buffers not prev
aec0: 69 6f 75 73 6c 79 20 75 73 65 64 20 2a 2f 0a 20  iously used */. 
aed0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
aee0: 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74  pFree;   /* List
aef0: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75   of available bu
af00: 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ffers */.  void 
af10: 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20  *pStart;        
af20: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
af30: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65   of available me
af40: 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20  mory space */.  
af50: 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20  void *pEnd;     
af60: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
af70: 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f   byte past end o
af80: 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63  f available spac
af90: 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c  e */.};.struct L
afa0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20  ookasideSlot {. 
afb0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
afc0: 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78  pNext;    /* Nex
afd0: 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65 20  t buffer in the 
afe0: 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75 66  list of free buf
aff0: 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  fers */.};../*.*
b000: 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20 66  * A hash table f
b010: 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  or built-in func
b020: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73  tion definitions
b030: 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e 2d  .  (Application-
b040: 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63 74  defined.** funct
b050: 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75 6c  ions use a regul
b060: 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20 66  ar table table f
b070: 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a 0a  rom hash.h.).**.
b080: 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75 6e  ** Hash each Fun
b090: 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20 69  cDef structure i
b0a0: 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46  nto one of the F
b0b0: 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73  uncDefHash.a[] s
b0c0: 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69  lots..** Collisi
b0d0: 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46  ons are on the F
b0e0: 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20 63  uncDef.u.pHash c
b0f0: 68 61 69 6e 2e 20 20 55 73 65 20 74 68 65 20 53  hain.  Use the S
b100: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28  QLITE_FUNC_HASH(
b110: 29 0a 2a 2a 20 6d 61 63 72 6f 20 74 6f 20 63 6f  ).** macro to co
b120: 6d 70 75 74 65 20 61 20 68 61 73 68 20 6f 6e 20  mpute a hash on 
b130: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d  the function nam
b140: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
b150: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53  LITE_FUNC_HASH_S
b160: 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e 63  Z 23.struct Func
b170: 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63  DefHash {.  Func
b180: 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46 55  Def *a[SQLITE_FU
b190: 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20 20  NC_HASH_SZ];    
b1a0: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
b1b0: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a   for functions *
b1c0: 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  /.};.#define SQL
b1d0: 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28 43 2c  ITE_FUNC_HASH(C,
b1e0: 4c 29 20 28 28 28 43 29 2b 28 4c 29 29 25 53 51  L) (((C)+(L))%SQ
b1f0: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53  LITE_FUNC_HASH_S
b200: 5a 29 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  Z)..#ifdef SQLIT
b210: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b220: 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f  ATION./*.** Info
b230: 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20  rmation held in 
b240: 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64 61  the "sqlite3" da
b250: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
b260: 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65  n object and use
b270: 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75  d.** to manage u
b280: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
b290: 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  on..*/.typedef s
b2a0: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
b2b0: 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75  erauth sqlite3_u
b2c0: 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20  serauth;.struct 
b2d0: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
b2e0: 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65   {.  u8 authLeve
b2f0: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
b300: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75     /* Current au
b310: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76  thentication lev
b320: 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74  el */.  int nAut
b330: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
b340: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
b350: 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20   the zAuthPW in 
b360: 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20  bytes */.  char 
b370: 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20 20  *zAuthPW;       
b380: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73           /* Pass
b390: 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75 74  word used to aut
b3a0: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63  henticate */.  c
b3b0: 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20  har *zAuthUser; 
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b3d0: 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74  User name used t
b3e0: 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a  o authenticate *
b3f0: 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
b400: 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69   values for sqli
b410: 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74  te3_userauth.aut
b420: 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e  hLevel */.#defin
b430: 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20  e UAUTH_Unknown 
b440: 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74      0     /* Aut
b450: 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20  hentication not 
b460: 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23  yet checked */.#
b470: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69  define UAUTH_Fai
b480: 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20 2f  l        1     /
b490: 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63  * User authentic
b4a0: 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a  ation failed */.
b4b0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73  #define UAUTH_Us
b4c0: 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20 20  er        2     
b4d0: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
b4e0: 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65   as a normal use
b4f0: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  r */.#define UAU
b500: 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33  TH_Admin       3
b510: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
b520: 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69  cated as an admi
b530: 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a  nistrator */../*
b540: 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20   Functions used 
b550: 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75 74  only by user aut
b560: 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63  horization logic
b570: 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55   */.int sqlite3U
b580: 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e  serAuthTable(con
b590: 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
b5a0: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43 68  qlite3UserAuthCh
b5b0: 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33  eckLogin(sqlite3
b5c0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38  *,const char*,u8
b5d0: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
b5e0: 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c  UserAuthInit(sql
b5f0: 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
b600: 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73 71  ite3CryptFunc(sq
b610: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
b620: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
b630: 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  **);..#endif /* 
b640: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
b650: 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f  ENTICATION */../
b660: 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72  *.** typedef for
b670: 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69   the authorizati
b680: 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  on callback func
b690: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  tion..*/.#ifdef 
b6a0: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
b6b0: 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70  ENTICATION.  typ
b6c0: 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74  edef int (*sqlit
b6d0: 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c  e3_xauth)(void*,
b6e0: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
b6f0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
b700: 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20  t char*,.       
b710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b720: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
b730: 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
b740: 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  );.#else.  typed
b750: 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33  ef int (*sqlite3
b760: 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e  _xauth)(void*,in
b770: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  t,const char*,co
b780: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
b790: 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20  char*,.         
b7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7b0: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
b7c0: 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  *);.#endif..#ifn
b7d0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
b7e0: 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 20 54 68  DEPRECATED./* Th
b7f0: 69 73 20 69 73 20 61 6e 20 65 78 74 72 61 20 53  is is an extra S
b800: 51 4c 49 54 45 5f 54 52 41 43 45 20 6d 61 63 72  QLITE_TRACE macr
b810: 6f 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73  o that indicates
b820: 20 22 6c 65 67 61 63 79 22 20 74 72 61 63 69 6e   "legacy" tracin
b830: 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74 79 6c  g.** in the styl
b840: 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 74 72 61  e of sqlite3_tra
b850: 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ce().*/.#define 
b860: 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47  SQLITE_TRACE_LEG
b870: 41 43 59 20 20 20 20 20 20 20 20 20 20 30 78 34  ACY          0x4
b880: 30 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65  0     /* Use the
b890: 20 6c 65 67 61 63 79 20 78 54 72 61 63 65 20 2a   legacy xTrace *
b8a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b8b0: 5f 54 52 41 43 45 5f 58 50 52 4f 46 49 4c 45 20  _TRACE_XPROFILE 
b8c0: 20 20 20 20 20 20 20 30 78 38 30 20 20 20 20 20         0x80     
b8d0: 2f 2a 20 55 73 65 20 74 68 65 20 6c 65 67 61 63  /* Use the legac
b8e0: 79 20 78 50 72 6f 66 69 6c 65 20 2a 2f 0a 23 65  y xProfile */.#e
b8f0: 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  lse.#define SQLI
b900: 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20  TE_TRACE_LEGACY 
b910: 20 20 20 20 20 20 20 20 20 30 0a 23 64 65 66 69           0.#defi
b920: 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ne SQLITE_TRACE_
b930: 58 50 52 4f 46 49 4c 45 20 20 20 20 20 20 20 20  XPROFILE        
b940: 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  0.#endif /* SQLI
b950: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
b960: 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ED */.#define SQ
b970: 4c 49 54 45 5f 54 52 41 43 45 5f 4e 4f 4e 4c 45  LITE_TRACE_NONLE
b980: 47 41 43 59 5f 4d 41 53 4b 20 20 30 78 30 66 20  GACY_MASK  0x0f 
b990: 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 20 66 6c      /* Normal fl
b9a0: 61 67 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45  ags */.../*.** E
b9b0: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
b9c0: 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e  nection is an in
b9d0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
b9e0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
b9f0: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c  e..*/.struct sql
ba00: 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33  ite3 {.  sqlite3
ba10: 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20  _vfs *pVfs;     
ba20: 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74         /* OS Int
ba30: 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75  erface */.  stru
ba40: 63 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  ct Vdbe *pVdbe; 
ba50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
ba60: 74 20 6f 66 20 61 63 74 69 76 65 20 76 69 72 74  t of active virt
ba70: 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a  ual machines */.
ba80: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74    CollSeq *pDflt
ba90: 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20  Coll;           
baa0: 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 63  /* The default c
bab0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
bac0: 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20  e (BINARY) */.  
bad0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d  sqlite3_mutex *m
bae0: 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a  utex;         /*
baf0: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65   Connection mute
bb00: 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20  x */.  Db *aDb; 
bb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb20: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b       /* All back
bb30: 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44  ends */.  int nD
bb40: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
bb50: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
bb60: 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75  r of backends cu
bb70: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
bb80: 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c 61 67 73  /.  u32 mDbFlags
bb90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bba0: 20 20 2f 2a 20 66 6c 61 67 73 20 72 65 63 6f 72    /* flags recor
bbb0: 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c 20 73 74  ding internal st
bbc0: 61 74 65 20 2a 2f 0a 20 20 75 36 34 20 66 6c 61  ate */.  u64 fla
bbd0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
bbe0: 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67 73 20         /* flags 
bbf0: 73 65 74 74 61 62 6c 65 20 62 79 20 70 72 61 67  settable by prag
bc00: 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a  mas. See below *
bc10: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
bc20: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
bc30: 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f    /* ROWID of mo
bc40: 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74  st recent insert
bc50: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
bc60: 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20    i64 szMmap;   
bc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc80: 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f  /* Default mmap_
bc90: 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a  size setting */.
bca0: 20 20 75 33 32 20 6e 53 63 68 65 6d 61 4c 6f 63    u32 nSchemaLoc
bcb0: 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  k;              
bcc0: 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73 65 74 20  /* Do not reset 
bcd0: 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20  the schema when 
bce0: 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 75 6e  non-zero */.  un
bcf0: 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46  signed int openF
bd00: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46  lags;       /* F
bd10: 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73  lags passed to s
bd20: 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e  qlite3_vfs.xOpen
bd30: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43  () */.  int errC
bd40: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
bd50: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
bd60: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
bd70: 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20  (SQLITE_*) */.  
bd80: 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20  int errMask;    
bd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bda0: 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20   & result codes 
bdb0: 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65  with this before
bdc0: 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20   returning */.  
bdd0: 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b 20 20  int iSysErrno;  
bde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bdf0: 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66 72 6f   Errno value fro
be00: 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20 65 72  m last system er
be10: 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f  ror */.  u16 dbO
be20: 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  ptFlags;        
be30: 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20         /* Flags 
be40: 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c  to enable/disabl
be50: 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  e optimizations 
be60: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
be70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be80: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
be90: 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f  ing */.  u8 auto
bea0: 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20  Commit;         
beb0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75         /* The au
bec0: 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20  to-commit flag. 
bed0: 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f  */.  u8 temp_sto
bee0: 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  re;             
bef0: 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a     /* 1: file 2:
bf00: 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75   memory 0: defau
bf10: 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f  lt */.  u8 mallo
bf20: 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20  cFailed;        
bf30: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
bf40: 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20   we have seen a 
bf50: 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a  malloc failure *
bf60: 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d 61  /.  u8 bBenignMa
bf70: 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20  lloc;           
bf80: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71 75    /* Do not requ
bf90: 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75 65  ire OOMs if true
bfa0: 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63   */.  u8 dfltLoc
bfb0: 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  kMode;          
bfc0: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
bfd0: 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20  ocking-mode for 
bfe0: 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a  attached dbs */.
bff0: 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65    signed char ne
c000: 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20  xtAutovac;      
c010: 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69  /* Autovac setti
c020: 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ng after VACUUM 
c030: 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73  if >=0 */.  u8 s
c040: 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20  uppressErr;     
c050: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
c060: 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20  not issue error 
c070: 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65  messages if true
c080: 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43   */.  u8 vtabOnC
c090: 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20  onflict;        
c0a0: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
c0b0: 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74  return for s3_vt
c0c0: 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29  ab_on_conflict()
c0d0: 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73   */.  u8 isTrans
c0e0: 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
c0f0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
c100: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
c110: 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a  epoint is a TS *
c120: 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b 20 20  /.  u8 mTrace;  
c130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c140: 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f 72    /* zero or mor
c150: 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20 66  e SQLITE_TRACE f
c160: 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 6e 6f 53  lags */.  u8 noS
c170: 68 61 72 65 64 43 61 63 68 65 3b 20 20 20 20 20  haredCache;     
c180: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
c190: 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63 61 63  if no shared-cac
c1a0: 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  he backends */. 
c1b0: 20 75 38 20 6e 53 71 6c 45 78 65 63 3b 20 20 20   u8 nSqlExec;   
c1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c1d0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 65 6e 64  * Number of pend
c1e0: 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63 20 6f  ing OP_SqlExec o
c1f0: 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e 74 20  pcodes */.  int 
c200: 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20  nextPagesize;   
c210: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
c220: 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43 55  esize after VACU
c230: 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33  UM if >0 */.  u3
c240: 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20  2 magic;        
c250: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
c260: 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20  agic number for 
c270: 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d  detect library m
c280: 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  isuse */.  int n
c290: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
c2a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
c2b0: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
c2c0: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20  lite3_changes() 
c2d0: 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43  */.  int nTotalC
c2e0: 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20  hange;          
c2f0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
c300: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
c310: 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20  total_changes() 
c320: 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b  */.  int aLimit[
c330: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b  SQLITE_N_LIMIT];
c340: 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a     /* Limits */.
c350: 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72    int nMaxSorter
c360: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
c370: 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20  /* Maximum size 
c380: 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65  of regions mappe
c390: 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20  d by sorter */. 
c3a0: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49   struct sqlite3I
c3b0: 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f  nitInfo {      /
c3c0: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  * Information us
c3d0: 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ed during initia
c3e0: 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  lization */.    
c3f0: 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20  int newTnum;    
c400: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
c410: 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65  ootpage of table
c420: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
c430: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62  ed */.    u8 iDb
c440: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c450: 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64        /* Which d
c460: 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20  b file is being 
c470: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
c480: 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20     u8 busy;     
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c4a0: 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e  * TRUE if curren
c4b0: 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67  tly initializing
c4c0: 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
c4d0: 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 20 3a   orphanTrigger :
c4e0: 20 31 3b 20 2f 2a 20 4c 61 73 74 20 73 74 61 74   1; /* Last stat
c4f0: 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65  ement is orphane
c500: 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a  d TEMP trigger *
c510: 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69  /.    unsigned i
c520: 6d 70 6f 73 74 65 72 54 61 62 6c 65 20 3a 20 31  mposterTable : 1
c530: 3b 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e  ; /* Building an
c540: 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20   imposter table 
c550: 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
c560: 72 65 6f 70 65 6e 4d 65 6d 64 62 20 3a 20 31 3b  reopenMemdb : 1;
c570: 20 20 20 2f 2a 20 41 54 54 41 43 48 20 69 73 20     /* ATTACH is 
c580: 72 65 61 6c 6c 79 20 61 20 72 65 6f 70 65 6e 20  really a reopen 
c590: 75 73 69 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a 20  using MemDB */. 
c5a0: 20 20 20 63 68 61 72 20 2a 2a 61 7a 49 6e 69 74     char **azInit
c5b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
c5c0: 2a 20 22 74 79 70 65 22 2c 20 22 6e 61 6d 65 22  * "type", "name"
c5d0: 2c 20 61 6e 64 20 22 74 62 6c 5f 6e 61 6d 65 22  , and "tbl_name"
c5e0: 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 7d 20   columns */.  } 
c5f0: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62  init;.  int nVdb
c600: 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20  eActive;        
c610: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c620: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
c630: 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20  ly running */.  
c640: 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20  int nVdbeRead;  
c650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c660: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c670: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
c680: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
c690: 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20  int nVdbeWrite; 
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c6b0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c6c0: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
c6d0: 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20  d and write */. 
c6e0: 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20   int nVdbeExec; 
c6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c700: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
c710: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
c720: 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Exec() */.  int 
c730: 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20 20 20  nVDestroy;      
c740: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c750: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 4f 50  ber of active OP
c760: 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74  _VDestroy operat
c770: 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  ions */.  int nE
c780: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
c790: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c7a0: 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65  r of loaded exte
c7b0: 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64  nsions */.  void
c7c0: 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20   **aExtension;  
c7d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
c7e0: 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62  ay of shared lib
c7f0: 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a  rary handles */.
c800: 20 20 69 6e 74 20 28 2a 78 54 72 61 63 65 29 28    int (*xTrace)(
c810: 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c  u32,void*,void*,
c820: 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54  void*);     /* T
c830: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
c840: 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41  .  void *pTraceA
c850: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c870: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
c880: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  trace function *
c890: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
c8a0: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
c8b0: 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69  .  void (*xProfi
c8c0: 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20  le)(void*,const 
c8d0: 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20  char*,u64);  /* 
c8e0: 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69  Profiling functi
c8f0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  on */.  void *pP
c900: 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20  rofileArg;      
c910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c920: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
c930: 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f   profile functio
c940: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 76 6f  n */.#endif.  vo
c950: 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20  id *pCommitArg; 
c960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c970: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
c980: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29  CommitCallback()
c990: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d   */.  int (*xCom
c9a0: 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  mitCallback)(voi
c9b0: 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b  d*);    /* Invok
c9c0: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
c9d0: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
c9e0: 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20  RollbackArg;    
c9f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
ca00: 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62  gument to xRollb
ca10: 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  ackCallback() */
ca20: 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62  .  void (*xRollb
ca30: 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ackCallback)(voi
ca40: 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  d*); /* Invoked 
ca50: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
ca60: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64   */.  void *pUpd
ca70: 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28  ateArg;.  void (
ca80: 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  *xUpdateCallback
ca90: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
caa0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
cab0: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36  har*,sqlite_int6
cac0: 34 29 3b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  4);.  Parse *pPa
cad0: 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
cae0: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 70      /* Current p
caf0: 61 72 73 65 20 2a 2f 0a 23 69 66 64 65 66 20 53  arse */.#ifdef S
cb00: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
cb10: 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f  UPDATE_HOOK.  vo
cb20: 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41 72  id *pPreUpdateAr
cb30: 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  g;          /* F
cb40: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
cb50: 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62   xPreUpdateCallb
cb60: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ack */.  void (*
cb70: 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
cb80: 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73 74  ck)(   /* Regist
cb90: 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74  ered using sqlit
cba0: 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f 6f  e3_preupdate_hoo
cbb0: 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a  k() */.    void*
cbc0: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68  ,sqlite3*,int,ch
cbd0: 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63  ar const*,char c
cbe0: 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e  onst*,sqlite3_in
cbf0: 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36  t64,sqlite3_int6
cc00: 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64 61  4.  );.  PreUpda
cc10: 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b 20  te *pPreUpdate; 
cc20: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78         /* Contex
cc30: 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72 65  t for active pre
cc40: 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63 6b  -update callback
cc50: 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51   */.#endif /* SQ
cc60: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
cc70: 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69  PDATE_HOOK */.#i
cc80: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
cc90: 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57  T_WAL.  int (*xW
cca0: 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  alCallback)(void
ccb0: 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63   *, sqlite3 *, c
ccc0: 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
ccd0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41  );.  void *pWalA
cce0: 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69  rg;.#endif.  voi
ccf0: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28  d(*xCollNeeded)(
cd00: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
cd10: 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73  nt eTextRep,cons
cd20: 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
cd30: 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29  (*xCollNeeded16)
cd40: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
cd50: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
cd60: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
cd70: 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72  d *pCollNeededAr
cd80: 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  g;.  sqlite3_val
cd90: 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20  ue *pErr;       
cda0: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
cdb0: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
cdc0: 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
cdd0: 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73   volatile int is
cde0: 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20  Interrupted; /* 
cdf0: 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f  True if sqlite3_
ce00: 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62 65  interrupt has be
ce10: 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20  en called */.   
ce20: 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31   double notUsed1
ce30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
ce40: 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31  Spacer */.  } u1
ce50: 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f  ;.  Lookaside lo
ce60: 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
ce70: 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d    /* Lookaside m
ce80: 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74  alloc configurat
ce90: 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ion */.#ifndef S
cea0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
ceb0: 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  RIZATION.  sqlit
cec0: 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b 20  e3_xauth xAuth; 
ced0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65           /* Acce
cee0: 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  ss authorization
cef0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
cf00: 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20  oid *pAuthArg;  
cf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cf20: 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  1st argument to 
cf30: 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20  the access auth 
cf40: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  function */.#end
cf50: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
cf60: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
cf70: 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28  CALLBACK.  int (
cf80: 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64  *xProgress)(void
cf90: 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20   *);     /* The 
cfa0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
cfb0: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  k */.  void *pPr
cfc0: 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20  ogressArg;      
cfd0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
cfe0: 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73   to the progress
cff0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75   callback */.  u
d000: 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73  nsigned nProgres
d010: 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20  sOps;        /* 
d020: 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65  Number of opcode
d030: 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63  s for progress c
d040: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69  allback */.#endi
d050: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
d060: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
d070: 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73  LE.  int nVTrans
d080: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d090: 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
d0a0: 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20  size of aVTrans 
d0b0: 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c  */.  Hash aModul
d0c0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
d0d0: 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20     /* populated 
d0e0: 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  by sqlite3_creat
d0f0: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
d100: 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74  VtabCtx *pVtabCt
d110: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x;            /*
d120: 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74   Context for act
d130: 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74  ive vtab connect
d140: 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61  /create */.  VTa
d150: 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20  ble **aVTrans;  
d160: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69             /* Vi
d170: 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74  rtual tables wit
d180: 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  h open transacti
d190: 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ons */.  VTable 
d1a0: 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20  *pDisconnect;   
d1b0: 20 20 20 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e         /* Discon
d1c0: 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65  nect these in ne
d1d0: 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  xt sqlite3_prepa
d1e0: 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  re() */.#endif. 
d1f0: 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20   Hash aFunc;    
d200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d210: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20  * Hash table of 
d220: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74  connection funct
d230: 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  ions */.  Hash a
d240: 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20  CollSeq;        
d250: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63          /* All c
d260: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
d270: 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64  es */.  BusyHand
d280: 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b  ler busyHandler;
d290: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61        /* Busy ca
d2a0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61  llback */.  Db a
d2b0: 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20  DbStatic[2];    
d2c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61            /* Sta
d2d0: 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74 68  tic space for th
d2e0: 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b  e 2 default back
d2f0: 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ends */.  Savepo
d300: 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
d310: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
d320: 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70 6f  of active savepo
d330: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75  ints */.  int bu
d340: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
d350: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
d360: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
d370: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e   in msec */.  in
d380: 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t nSavepoint;   
d390: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d3a0: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
d3b0: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
d3c0: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  nts */.  int nSt
d3d0: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
d3e0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
d3f0: 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65   of nested state
d400: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
d410: 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  s  */.  i64 nDef
d420: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
d430: 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66        /* Net def
d440: 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
d450: 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  s this transacti
d460: 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  on. */.  i64 nDe
d470: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
d480: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
d490: 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65  ferred immediate
d4a0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
d4b0: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
d4c0: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
d4d0: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
d4e0: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
d4f0: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69  n DbFree() */.#i
d500: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
d510: 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
d520: 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
d530: 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61 72  ing variables ar
d540: 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20  e all protected 
d550: 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41  by the STATIC_MA
d560: 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c  STER.  ** mutex,
d570: 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e   not by sqlite3.
d580: 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20  mutex. They are 
d590: 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20  used by code in 
d5a0: 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20  notify.c..  **. 
d5b0: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f   ** When X.pUnlo
d5c0: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ckConnection==Y,
d5d0: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
d5e0: 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f   X is waiting fo
d5f0: 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f  r Y to.  ** unlo
d600: 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ck so that it ca
d610: 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a  n proceed..  **.
d620: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f    ** When X.pBlo
d630: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d  ckingConnection=
d640: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
d650: 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  hat something th
d660: 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20  at X tried.  ** 
d670: 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65  tried to do rece
d680: 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68  ntly failed with
d690: 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   an SQLITE_LOCKE
d6a0: 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c  D error due to l
d6b0: 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62  ocks.  ** held b
d6c0: 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  y Y..  */.  sqli
d6d0: 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f  te3 *pBlockingCo
d6e0: 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e  nnection; /* Con
d6f0: 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75  nection that cau
d700: 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  sed SQLITE_LOCKE
d710: 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  D */.  sqlite3 *
d720: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
d730: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
d740: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61  Connection to wa
d750: 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a  tch for unlock *
d760: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63  /.  void *pUnloc
d770: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
d780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
d790: 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b  ument to xUnlock
d7a0: 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64  Notify */.  void
d7b0: 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79   (*xUnlockNotify
d7c0: 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b  )(void **, int);
d7d0: 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69    /* Unlock noti
d7e0: 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  fy callback */. 
d7f0: 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42   sqlite3 *pNextB
d800: 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f  locked;        /
d810: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f  * Next in list o
d820: 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f  f all blocked co
d830: 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  nnections */.#en
d840: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
d850: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
d860: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
d870: 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20 20  userauth auth;  
d880: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75        /* User au
d890: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66  thentication inf
d8a0: 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  ormation */.#end
d8b0: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
d8c0: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
d8d0: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
d8e0: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
d8f0: 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45  #define SCHEMA_E
d900: 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44  NC(db) ((db)->aD
d910: 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e  b[0].pSchema->en
d920: 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64  c).#define ENC(d
d930: 62 29 20 20 20 20 20 20 20 20 28 28 64 62 29 2d  b)        ((db)-
d940: 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  >enc)../*.** Pos
d950: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
d960: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61   the sqlite3.fla
d970: 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  gs..**.** Value 
d980: 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66  constraints (enf
d990: 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74  orced via assert
d9a0: 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51 4c  ()):.**      SQL
d9b0: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20  ITE_FullFSync   
d9c0: 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c 46    == PAGER_FULLF
d9d0: 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c  SYNC.**      SQL
d9e0: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
d9f0: 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54 5f  c == PAGER_CKPT_
da00: 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20  FULLFSYNC.**    
da10: 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70    SQLITE_CacheSp
da20: 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45 52 5f  ill    == PAGER_
da30: 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23  CACHE_SPILL.*/.#
da40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72  define SQLITE_Wr
da50: 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30  iteSchema    0x0
da60: 30 30 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74  0000001  /* OK t
da70: 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f  o update SQLITE_
da80: 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e  MASTER */.#defin
da90: 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46  e SQLITE_LegacyF
daa0: 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 30 30  ileFmt  0x000000
dab0: 30 32 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65  02  /* Create ne
dac0: 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66  w databases in f
dad0: 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69  ormat 1 */.#defi
dae0: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f  ne SQLITE_FullCo
daf0: 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30  lNames   0x00000
db00: 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c  004  /* Show ful
db10: 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f  l column names o
db20: 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66  n SELECT */.#def
db30: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46  ine SQLITE_FullF
db40: 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30 30  Sync      0x0000
db50: 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c  0008  /* Use ful
db60: 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62  l fsync on the b
db70: 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e  ackend */.#defin
db80: 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c  e SQLITE_CkptFul
db90: 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30 30  lFSync  0x000000
dba0: 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  10  /* Use full 
dbb0: 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70  fsync for checkp
dbc0: 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oint */.#define 
dbd0: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
dbe0: 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 32 30  l     0x00000020
dbf0: 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c    /* OK to spill
dc00: 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a   pager cache */.
dc10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
dc20: 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78  hortColNames  0x
dc30: 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f  00000040  /* Sho
dc40: 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20  w short columns 
dc50: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
dc60: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
dc70: 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38  s      0x0000008
dc80: 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73  0  /* Count rows
dc90: 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45   changed by INSE
dca0: 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  RT, */.         
dcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcd0: 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72   /*   DELETE, or
dce0: 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75   UPDATE and retu
dcf0: 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  rn */.          
dd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd20: 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75  /*   the count u
dd30: 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e  sing a callback.
dd40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dd50: 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20  TE_NullCallback 
dd60: 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a    0x00000100  /*
dd70: 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c   Invoke the call
dd80: 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65  back once if the
dd90: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
dda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ddc0: 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73     result set is
ddd0: 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
dde0: 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43  e SQLITE_IgnoreC
ddf0: 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 30 32  hecks   0x000002
de00: 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e  00  /* Do not en
de10: 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73  force check cons
de20: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
de30: 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e  ne SQLITE_ReadUn
de40: 63 6f 6d 6d 69 74 20 20 20 30 78 30 30 30 30 30  commit   0x00000
de50: 34 30 30 20 20 2f 2a 20 52 45 41 44 20 55 4e 43  400  /* READ UNC
de60: 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73 68 61 72  OMMITTED in shar
de70: 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  ed-cache */.#def
de80: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b 70  ine SQLITE_NoCkp
de90: 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30 30 30 30  tOnClose  0x0000
dea0: 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65 63  0800  /* No chec
deb0: 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65 28  kpoint on close(
dec0: 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23 64 65 66  )/DETACH */.#def
ded0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72  ine SQLITE_Rever
dee0: 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 30  seOrder   0x0000
def0: 31 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65  1000  /* Reverse
df00: 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43   unordered SELEC
df10: 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  Ts */.#define SQ
df20: 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73  LITE_RecTriggers
df30: 20 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20      0x00002000  
df40: 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73  /* Enable recurs
df50: 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ive triggers */.
df60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
df70: 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78  oreignKeys    0x
df80: 30 30 30 30 34 30 30 30 20 20 2f 2a 20 45 6e 66  00004000  /* Enf
df90: 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  orce foreign key
dfa0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f   constraints  */
dfb0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dfc0: 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30  AutoIndex      0
dfd0: 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 45 6e  x00008000  /* En
dfe0: 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69  able automatic i
dff0: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
e000: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
e010: 65 6e 73 69 6f 6e 20 20 30 78 30 30 30 31 30 30  ension  0x000100
e020: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
e030: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a  ad_extension */.
e040: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
e050: 6f 61 64 45 78 74 46 75 6e 63 20 20 20 20 30 78  oadExtFunc    0x
e060: 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45 6e 61  00020000  /* Ena
e070: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
e080: 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63 20 2a 2f  on() SQL func */
e090: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e0a0: 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30  EnableTrigger  0
e0b0: 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 54 72  x00040000  /* Tr
e0c0: 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69  ue to enable tri
e0d0: 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ggers */.#define
e0e0: 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
e0f0: 20 20 20 20 20 20 20 30 78 30 30 30 38 30 30 30         0x0008000
e100: 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20  0  /* Defer all 
e110: 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  FK constraints *
e120: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e130: 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20  _QueryOnly      
e140: 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 44  0x00100000  /* D
e150: 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65 20  isable database 
e160: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
e170: 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69  ne SQLITE_CellSi
e180: 7a 65 43 6b 20 20 20 20 20 30 78 30 30 32 30 30  zeCk     0x00200
e190: 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20 62 74  000  /* Check bt
e1a0: 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f  ree cell sizes o
e1b0: 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e  n load */.#defin
e1c0: 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b  e SQLITE_Fts3Tok
e1d0: 65 6e 69 7a 65 72 20 20 30 78 30 30 34 30 30 30  enizer  0x004000
e1e0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74  00  /* Enable ft
e1f0: 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20  s3_tokenizer(2) 
e200: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e210: 45 5f 45 6e 61 62 6c 65 51 50 53 47 20 20 20 20  E_EnableQPSG    
e220: 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20   0x00800000  /* 
e230: 51 75 65 72 79 20 50 6c 61 6e 6e 65 72 20 53 74  Query Planner St
e240: 61 62 69 6c 69 74 79 20 47 75 61 72 61 6e 74 65  ability Guarante
e250: 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  e*/.#define SQLI
e260: 54 45 5f 54 72 69 67 67 65 72 45 51 50 20 20 20  TE_TriggerEQP   
e270: 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a    0x01000000  /*
e280: 20 53 68 6f 77 20 74 72 69 67 67 65 72 20 45 58   Show trigger EX
e290: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
e2a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e2b0: 54 45 5f 52 65 73 65 74 44 61 74 61 62 61 73 65  TE_ResetDatabase
e2c0: 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f 2a    0x02000000  /*
e2d0: 20 52 65 73 65 74 20 74 68 65 20 64 61 74 61 62   Reset the datab
e2e0: 61 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ase */.#define S
e2f0: 51 4c 49 54 45 5f 4c 65 67 61 63 79 41 6c 74 65  QLITE_LegacyAlte
e300: 72 20 20 20 20 30 78 30 34 30 30 30 30 30 30 20  r    0x04000000 
e310: 20 2f 2a 20 4c 65 67 61 63 79 20 41 4c 54 45 52   /* Legacy ALTER
e320: 20 54 41 42 4c 45 20 62 65 68 61 76 69 6f 75 72   TABLE behaviour
e330: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e340: 54 45 5f 4e 6f 53 63 68 65 6d 61 45 72 72 6f 72  TE_NoSchemaError
e350: 20 20 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a    0x08000000  /*
e360: 20 44 6f 20 6e 6f 74 20 72 65 70 6f 72 74 20 73   Do not report s
e370: 63 68 65 6d 61 20 70 61 72 73 65 20 65 72 72 6f  chema parse erro
e380: 72 73 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  rs*/.#define SQL
e390: 49 54 45 5f 44 65 66 65 6e 73 69 76 65 20 20 20  ITE_Defensive   
e3a0: 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20 2f     0x10000000  /
e3b0: 2a 20 49 6e 70 75 74 20 53 51 4c 20 69 73 20 6c  * Input SQL is l
e3c0: 69 6b 65 6c 79 20 68 6f 73 74 69 6c 65 20 2a 2f  ikely hostile */
e3d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e3e0: 44 71 73 44 44 4c 20 20 20 20 20 20 20 20 20 30  DqsDDL         0
e3f0: 78 32 30 30 30 30 30 30 30 20 20 2f 2a 20 64 62  x20000000  /* db
e400: 6c 2d 71 75 6f 74 65 64 20 73 74 72 69 6e 67 73  l-quoted strings
e410: 20 61 6c 6c 6f 77 65 64 20 69 6e 20 44 44 4c 2a   allowed in DDL*
e420: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e430: 5f 44 71 73 44 4d 4c 20 20 20 20 20 20 20 20 20  _DqsDML         
e440: 30 78 34 30 30 30 30 30 30 30 20 20 2f 2a 20 64  0x40000000  /* d
e450: 62 6c 2d 71 75 6f 74 65 64 20 73 74 72 69 6e 67  bl-quoted string
e460: 73 20 61 6c 6c 6f 77 65 64 20 69 6e 20 44 4d 4c  s allowed in DML
e470: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e480: 45 5f 45 6e 61 62 6c 65 56 69 65 77 20 20 20 20  E_EnableView    
e490: 20 30 78 38 30 30 30 30 30 30 30 20 20 2f 2a 20   0x80000000  /* 
e4a0: 45 6e 61 62 6c 65 20 74 68 65 20 75 73 65 20 6f  Enable the use o
e4b0: 66 20 76 69 65 77 73 20 2a 2f 0a 0a 2f 2a 20 46  f views */../* F
e4c0: 6c 61 67 73 20 75 73 65 64 20 6f 6e 6c 79 20 69  lags used only i
e4d0: 66 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23  f debugging */.#
e4e0: 64 65 66 69 6e 65 20 48 49 28 58 29 20 20 28 28  define HI(X)  ((
e4f0: 75 36 34 29 28 58 29 3c 3c 33 32 29 0a 23 69 66  u64)(X)<<32).#if
e500: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
e510: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e520: 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 48  SqlTrace       H
e530: 49 28 30 78 30 31 30 30 30 30 30 29 20 2f 2a 20  I(0x0100000) /* 
e540: 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20  Debug print SQL 
e550: 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a  as it executes *
e560: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e570: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20  _VdbeListing    
e580: 48 49 28 30 78 30 32 30 30 30 30 30 29 20 2f 2a  HI(0x0200000) /*
e590: 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20   Debug listings 
e5a0: 6f 66 20 56 44 42 45 20 70 72 6f 67 73 20 2a 2f  of VDBE progs */
e5b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e5c0: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20 48  VdbeTrace      H
e5d0: 49 28 30 78 30 34 30 30 30 30 30 29 20 2f 2a 20  I(0x0400000) /* 
e5e0: 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44  True to trace VD
e5f0: 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  BE execution */.
e600: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
e610: 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 48 49  dbeAddopTrace HI
e620: 28 30 78 30 38 30 30 30 30 30 29 20 2f 2a 20 54  (0x0800000) /* T
e630: 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65  race sqlite3Vdbe
e640: 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f  AddOp() calls */
e650: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e660: 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20 48  VdbeEQP        H
e670: 49 28 30 78 31 30 30 30 30 30 30 29 20 2f 2a 20  I(0x1000000) /* 
e680: 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55  Debug EXPLAIN QU
e690: 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66  ERY PLAN */.#def
e6a0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 61 72 73 65  ine SQLITE_Parse
e6b0: 72 54 72 61 63 65 20 20 20 20 48 49 28 30 78 32  rTrace    HI(0x2
e6c0: 30 30 30 30 30 30 29 20 2f 2a 20 50 52 41 47 4d  000000) /* PRAGM
e6d0: 41 20 70 61 72 73 65 72 5f 74 72 61 63 65 3d 4f  A parser_trace=O
e6e0: 4e 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  N */.#endif../*.
e6f0: 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
e700: 73 20 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d 44  s for sqlite3.mD
e710: 62 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e  bFlags.*/.#defin
e720: 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43  e DBFLAG_SchemaC
e730: 68 61 6e 67 65 20 20 20 30 78 30 30 30 31 20 20  hange   0x0001  
e740: 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48  /* Uncommitted H
e750: 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65  ash table change
e760: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46  s */.#define DBF
e770: 4c 41 47 5f 50 72 65 66 65 72 42 75 69 6c 74 69  LAG_PreferBuilti
e780: 6e 20 20 30 78 30 30 30 32 20 20 2f 2a 20 50 72  n  0x0002  /* Pr
e790: 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c  eference to buil
e7a0: 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64  t-in funcs */.#d
e7b0: 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61 63  efine DBFLAG_Vac
e7c0: 75 75 6d 20 20 20 20 20 20 20 20 20 30 78 30 30  uum         0x00
e7d0: 30 34 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79  04  /* Currently
e7e0: 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a   in a VACUUM */.
e7f0: 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56  #define DBFLAG_V
e800: 61 63 75 75 6d 49 6e 74 6f 20 20 20 20 20 30 78  acuumInto     0x
e810: 30 30 30 38 20 20 2f 2a 20 43 75 72 72 65 6e 74  0008  /* Current
e820: 6c 79 20 72 75 6e 6e 69 6e 67 20 56 41 43 55 55  ly running VACUU
e830: 4d 20 49 4e 54 4f 20 2a 2f 0a 23 64 65 66 69 6e  M INTO */.#defin
e840: 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 4b  e DBFLAG_SchemaK
e850: 6e 6f 77 6e 4f 6b 20 20 30 78 30 30 31 30 20 20  nownOk  0x0010  
e860: 2f 2a 20 53 63 68 65 6d 61 20 69 73 20 6b 6e 6f  /* Schema is kno
e870: 77 6e 20 74 6f 20 62 65 20 76 61 6c 69 64 20 2a  wn to be valid *
e880: 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66  /../*.** Bits of
e890: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f   the sqlite3.dbO
e8a0: 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68  ptFlags field th
e8b0: 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74  at are used by t
e8c0: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65  he.** sqlite3_te
e8d0: 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54  st_control(SQLIT
e8e0: 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d  E_TESTCTRL_OPTIM
e8f0: 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e  IZATIONS,...) in
e900: 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65  terface to.** se
e910: 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c  lectively disabl
e920: 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  e various optimi
e930: 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  zations..*/.#def
e940: 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79  ine SQLITE_Query
e950: 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31  Flattener 0x0001
e960: 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74     /* Query flat
e970: 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  tening */.#defin
e980: 65 20 53 51 4c 49 54 45 5f 57 69 6e 64 6f 77 46  e SQLITE_WindowF
e990: 75 6e 63 20 20 20 20 20 30 78 30 30 30 32 20 20  unc     0x0002  
e9a0: 20 2f 2a 20 55 73 65 20 78 49 6e 76 65 72 73 65   /* Use xInverse
e9b0: 20 66 6f 72 20 77 69 6e 64 6f 77 20 66 75 6e 63   for window func
e9c0: 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
e9d0: 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f   SQLITE_GroupByO
e9e0: 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20  rder   0x0004   
e9f0: 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72  /* GROUPBY cover
ea00: 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23   of ORDERBY */.#
ea10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61  define SQLITE_Fa
ea20: 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30  ctorOutConst 0x0
ea30: 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  008   /* Constan
ea40: 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 23  t factoring */.#
ea50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69  define SQLITE_Di
ea60: 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30  stinctOpt    0x0
ea70: 30 31 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43  010   /* DISTINC
ea80: 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20  T using indexes 
ea90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
eaa0: 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20  E_CoverIdxScan  
eab0: 20 30 78 30 30 32 30 20 20 20 2f 2a 20 43 6f 76   0x0020   /* Cov
eac0: 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e  ering index scan
ead0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
eae0: 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f  ITE_OrderByIdxJo
eaf0: 69 6e 20 30 78 30 30 34 30 20 20 20 2f 2a 20 4f  in 0x0040   /* O
eb00: 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73  RDER BY of joins
eb10: 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64   via index */.#d
eb20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61  efine SQLITE_Tra
eb30: 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30 30  nsitive     0x00
eb40: 38 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69  80   /* Transiti
eb50: 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ve constraints *
eb60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
eb70: 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20  _OmitNoopJoin   
eb80: 30 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d 69 74  0x0100   /* Omit
eb90: 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69   unused tables i
eba0: 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69  n joins */.#defi
ebb0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 4f  ne SQLITE_CountO
ebc0: 66 56 69 65 77 20 20 20 20 30 78 30 32 30 30 20  fView    0x0200 
ebd0: 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d 6f    /* The count-o
ebe0: 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a 61 74  f-view optimizat
ebf0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
ec00: 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e 74  QLITE_CursorHint
ec10: 73 20 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a  s    0x0400   /*
ec20: 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48 69   Add OP_CursorHi
ec30: 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64  nt opcodes */.#d
ec40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61  efine SQLITE_Sta
ec50: 74 34 20 20 20 20 20 20 20 20 20 20 30 78 30 38  t4          0x08
ec60: 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54  00   /* Use STAT
ec70: 34 20 64 61 74 61 20 2a 2f 0a 20 20 20 2f 2a 20  4 data */.   /* 
ec80: 54 48 33 20 65 78 70 65 63 74 73 20 74 68 65 20  TH3 expects the 
ec90: 53 74 61 74 34 20 20 20 5e 5e 5e 5e 5e 5e 20 76  Stat4   ^^^^^^ v
eca0: 61 6c 75 65 20 74 6f 20 62 65 20 30 78 30 38 30  alue to be 0x080
ecb0: 30 2e 20 20 44 6f 6e 27 74 20 63 68 61 6e 67 65  0.  Don't change
ecc0: 20 69 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53   it */.#define S
ecd0: 51 4c 49 54 45 5f 50 75 73 68 44 6f 77 6e 20 20  QLITE_PushDown  
ece0: 20 20 20 20 20 30 78 31 30 30 30 20 20 20 2f 2a       0x1000   /*
ecf0: 20 54 68 65 20 70 75 73 68 2d 64 6f 77 6e 20 6f   The push-down o
ed00: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  ptimization */.#
ed10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 69  define SQLITE_Si
ed20: 6d 70 6c 69 66 79 4a 6f 69 6e 20 20 20 30 78 32  mplifyJoin   0x2
ed30: 30 30 30 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74  000   /* Convert
ed40: 20 4c 45 46 54 20 4a 4f 49 4e 20 74 6f 20 4a 4f   LEFT JOIN to JO
ed50: 49 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  IN */.#define SQ
ed60: 4c 49 54 45 5f 53 6b 69 70 53 63 61 6e 20 20 20  LITE_SkipScan   
ed70: 20 20 20 20 30 78 34 30 30 30 20 20 20 2f 2a 20      0x4000   /* 
ed80: 53 6b 69 70 2d 73 63 61 6e 73 20 2a 2f 0a 23 64  Skip-scans */.#d
ed90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 6f  efine SQLITE_Pro
eda0: 70 61 67 61 74 65 43 6f 6e 73 74 20 30 78 38 30  pagateConst 0x80
edb0: 30 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 6e 73  00   /* The cons
edc0: 74 61 6e 74 20 70 72 6f 70 61 67 61 74 69 6f 6e  tant propagation
edd0: 20 6f 70 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20   opt */.#define 
ede0: 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20  SQLITE_AllOpts  
edf0: 20 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f        0xffff   /
ee00: 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69  * All optimizati
ee10: 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61  ons */../*.** Ma
ee20: 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67  cros for testing
ee30: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
ee40: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72  optimizations ar
ee50: 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73  e enabled or dis
ee60: 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  abled..*/.#defin
ee70: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
ee80: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
ee90: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
eea0: 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29  lags&(mask))!=0)
eeb0: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
eec0: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
eed0: 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d   mask)   (((db)-
eee0: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
eef0: 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52  k))==0)../*.** R
ef00: 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74  eturn true if it
ef10: 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f   OK to factor co
ef20: 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
ef30: 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74  ns into the init
ef40: 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f  ialization.** co
ef50: 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74  de. The argument
ef60: 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65   is a Parse obje
ef70: 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20  ct for the code 
ef80: 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64  generator..*/.#d
ef90: 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f  efine ConstFacto
efa0: 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43  rOk(P) ((P)->okC
efb0: 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a  onstFactor)../*.
efc0: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
efd0: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
efe0: 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a  e.magic field..*
eff0: 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72  * The numbers ar
f000: 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61  e obtained at ra
f010: 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f  ndom and have no
f020: 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
f030: 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20  , other.** than 
f040: 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66  being distinct f
f050: 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e  rom one another.
f060: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
f070: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20  TE_MAGIC_OPEN   
f080: 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a    0xa029a697  /*
f090: 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   Database is ope
f0a0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
f0b0: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
f0c0: 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f     0x9f3c2d33  /
f0d0: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c  * Database is cl
f0e0: 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  osed */.#define 
f0f0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43  SQLITE_MAGIC_SIC
f100: 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30  K     0x4b771290
f110: 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61    /* Error and a
f120: 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f  waiting close */
f130: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f140: 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30  MAGIC_BUSY     0
f150: 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61  xf03b7906  /* Da
f160: 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79  tabase currently
f170: 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69   in use */.#defi
f180: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
f190: 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37  ERROR    0xb5357
f1a0: 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54  930  /* An SQLIT
f1b0: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f  E_MISUSE error o
f1c0: 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69  ccurred */.#defi
f1d0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
f1e0: 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66  ZOMBIE   0x64cff
f1f0: 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69  c7f  /* Close wi
f200: 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e  th last statemen
f210: 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a  t close */../*.*
f220: 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74  * Each SQL funct
f230: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62  ion is defined b
f240: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
f250: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
f260: 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  * structure.  Fo
f270: 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69  r global built-i
f280: 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a  n functions (ex:
f290: 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28 29   substr(), max()
f2a0: 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20  , count()).** a 
f2b0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
f2c0: 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c  structure is hel
f2d0: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
f2e0: 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
f2f0: 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20   object..** For 
f300: 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  per-connection a
f310: 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e  pplication-defin
f320: 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20  ed functions, a 
f330: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 0a  pointer to this.
f340: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ** structure is 
f350: 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d 3e  held in the db->
f360: 61 48 61 73 68 20 68 61 73 68 20 74 61 62 6c 65  aHash hash table
f370: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48  ..**.** The u.pH
f380: 61 73 68 20 66 69 65 6c 64 20 69 73 20 75 73 65  ash field is use
f390: 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c 20  d by the global 
f3a0: 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20  built-ins.  The 
f3b0: 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a  u.pDestructor.**
f3c0: 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62   field is used b
f3d0: 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e  y per-connection
f3e0: 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69 6f   app-def functio
f3f0: 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  ns..*/.struct Fu
f400: 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41 72  ncDef {.  i8 nAr
f410: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
f420: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
f430: 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73  ments.  -1 means
f440: 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20   unlimited */.  
f450: 75 33 32 20 66 75 6e 63 46 6c 61 67 73 3b 20 20  u32 funcFlags;  
f460: 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d       /* Some com
f470: 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49  bination of SQLI
f480: 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76  TE_FUNC_* */.  v
f490: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20  oid *pUserData; 
f4a0: 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61      /* User data
f4b0: 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20   parameter */.  
f4c0: 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20  FuncDef *pNext; 
f4d0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e       /* Next fun
f4e0: 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20  ction with same 
f4f0: 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  name */.  void (
f500: 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33  *xSFunc)(sqlite3
f510: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
f520: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20  lite3_value**); 
f530: 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d 73  /* func or agg-s
f540: 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tep */.  void (*
f550: 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74  xFinalize)(sqlit
f560: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
f570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f580: 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72 20  * Agg finalizer 
f590: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 61 6c  */.  void (*xVal
f5a0: 75 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ue)(sqlite3_cont
f5b0: 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20  ext*);          
f5c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
f5d0: 72 72 65 6e 74 20 61 67 67 20 76 61 6c 75 65 20  rrent agg value 
f5e0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 49 6e 76  */.  void (*xInv
f5f0: 65 72 73 65 29 28 73 71 6c 69 74 65 33 5f 63 6f  erse)(sqlite3_co
f600: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
f610: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
f620: 69 6e 76 65 72 73 65 20 61 67 67 2d 73 74 65 70  inverse agg-step
f630: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
f640: 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51   *zName;   /* SQ
f650: 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  L name of the fu
f660: 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69  nction. */.  uni
f670: 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65 66  on {.    FuncDef
f680: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
f690: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
f6a0: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
f6b0: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
f6c0: 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72 75 63  .    FuncDestruc
f6d0: 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
f6e0: 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65  ;   /* Reference
f6f0: 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63   counted destruc
f700: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
f710: 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a    } u;.};../*.**
f720: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
f730: 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75  encapsulates a u
f740: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73  ser-function des
f750: 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b  tructor callback
f760: 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72   (as.** configur
f770: 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f  ed using create_
f780: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61  function_v2()) a
f790: 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63  nd a reference c
f7a0: 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20  ounter. When.** 
f7b0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
f7c0: 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74  v2() is called t
f7d0: 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74  o create a funct
f7e0: 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72  ion with a destr
f7f0: 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67  uctor,.** a sing
f800: 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  le object of thi
f810: 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61  s type is alloca
f820: 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63  ted. FuncDestruc
f830: 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20  tor.nRef is set 
f840: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
f850: 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65   of FuncDef obje
f860: 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74  cts created (eit
f870: 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65  her 1 or 3, depe
f880: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
f890: 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73  .** or not the s
f8a0: 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e  pecified encodin
f8b0: 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29  g is SQLITE_ANY)
f8c0: 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44  . The FuncDef.pD
f8d0: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d  estructor.** mem
f8e0: 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74  ber of each of t
f8f0: 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f  he new FuncDef o
f900: 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f  bjects is set to
f910: 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c   point to the al
f920: 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44  located.** FuncD
f930: 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a  estructor..**.**
f940: 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65   Thereafter, whe
f950: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  n one of the Fun
f960: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
f970: 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66  deleted, the ref
f980: 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20  erence.** count 
f990: 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  on this object i
f9a0: 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57  s decremented. W
f9b0: 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30  hen it reaches 0
f9c0: 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  , the destructor
f9d0: 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  .** is invoked a
f9e0: 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72  nd the FuncDestr
f9f0: 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20  uctor structure 
fa00: 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  freed..*/.struct
fa10: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
fa20: 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20  {.  int nRef;.  
fa30: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
fa40: 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64  (void *);.  void
fa50: 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a   *pUserData;.};.
fa60: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
fa70: 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44  values for FuncD
fa80: 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20  ef.flags.  Note 
fa90: 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48  that the _LENGTH
faa0: 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20   and _TYPEOF.** 
fab0: 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72  values must corr
fac0: 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47  espond to OPFLAG
fad0: 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f  _LENGTHARG and O
fae0: 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e  PFLAG_TYPEOFARG.
faf0: 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f    And.** SQLITE_
fb00: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75  FUNC_CONSTANT mu
fb10: 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
fb20: 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49  s SQLITE_DETERMI
fb30: 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a  NISTIC.  There.*
fb40: 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73  * are assert() s
fb50: 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65  tatements in the
fb60: 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20   code to verify 
fb70: 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  this..**.** Valu
fb80: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65  e constraints (e
fb90: 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65  nforced via asse
fba0: 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53 51  rt()):.**     SQ
fbb0: 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
fbc0: 20 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61      ==  NC_MinMa
fbd0: 78 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46 5f  xAgg      == SF_
fbe0: 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20 20  MinMaxAgg.**    
fbf0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
fc00: 47 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41  GTH    ==  OPFLA
fc10: 47 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20 20  G_LENGTHARG.**  
fc20: 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54     SQLITE_FUNC_T
fc30: 59 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50 46  YPEOF    ==  OPF
fc40: 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a 2a  LAG_TYPEOFARG.**
fc50: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
fc60: 5f 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20 53  _CONSTANT  ==  S
fc70: 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53  QLITE_DETERMINIS
fc80: 54 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50 49  TIC from the API
fc90: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
fca0: 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64 65  UNC_ENCMASK   de
fcb0: 70 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45 5f  pends on SQLITE_
fcc0: 55 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20 74  UTF* macros in t
fcd0: 68 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69 6e  he API.*/.#defin
fce0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e  e SQLITE_FUNC_EN
fcf0: 43 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a  CMASK  0x0003 /*
fd00: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
fd10: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20  LITE_UTF16BE or 
fd20: 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69  UTF16LE */.#defi
fd30: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
fd40: 49 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f  IKE     0x0004 /
fd50: 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20  * Candidate for 
fd60: 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a  the LIKE optimiz
fd70: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
fd80: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53   SQLITE_FUNC_CAS
fd90: 45 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20  E     0x0008 /* 
fda0: 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c  Case-sensitive L
fdb0: 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f  IKE-type functio
fdc0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fdd0: 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20  ITE_FUNC_EPHEM  
fde0: 20 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65    0x0010 /* Ephe
fdf0: 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77  meral.  Delete w
fe00: 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66  ith VDBE */.#def
fe10: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
fe20: 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20  NEEDCOLL 0x0020 
fe30: 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  /* sqlite3GetFun
fe40: 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74  cCollSeq() might
fe50: 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65   be called*/.#de
fe60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
fe70: 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30  _LENGTH   0x0040
fe80: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e   /* Built-in len
fe90: 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  gth() function *
fea0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
feb0: 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30  _FUNC_TYPEOF   0
fec0: 78 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0080 /* Built-i
fed0: 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  n typeof() funct
fee0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
fef0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54  QLITE_FUNC_COUNT
ff00: 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75      0x0100 /* Bu
ff10: 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20  ilt-in count(*) 
ff20: 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65  aggregate */.#de
ff30: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
ff40: 5f 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30  _COALESCE 0x0200
ff50: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61   /* Built-in coa
ff60: 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c  lesce() or ifnul
ff70: 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  l() */.#define S
ff80: 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b  QLITE_FUNC_UNLIK
ff90: 45 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75  ELY 0x0400 /* Bu
ffa0: 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28  ilt-in unlikely(
ffb0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
ffc0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
ffd0: 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30  C_CONSTANT 0x080
ffe0: 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e  0 /* Constant in
fff0: 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73  puts give a cons
10000 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23  tant output */.#
10010 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
10020 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30  NC_MINMAX   0x10
10030 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d  00 /* True for m
10040 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61  in() and max() a
10050 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65  ggregates */.#de
10060 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
10070 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30  _SLOCHNG  0x2000
10080 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65   /* "Slow Change
10090 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e  ". Value constan
100a0 74 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20  t during a.     
100b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
100d0 2a 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d  * single query -
100e0 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76   might change ov
100f0 65 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65 66 69  er time */.#defi
10100 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 41  ne SQLITE_FUNC_A
10110 46 46 49 4e 49 54 59 20 30 78 34 30 30 30 20 2f  FFINITY 0x4000 /
10120 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66 66 69 6e  * Built-in affin
10130 69 74 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ity() function *
10140 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10150 5f 46 55 4e 43 5f 4f 46 46 53 45 54 20 20 20 30  _FUNC_OFFSET   0
10160 78 38 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x8000 /* Built-i
10170 6e 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28  n sqlite_offset(
10180 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
10190 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
101a0 43 5f 57 49 4e 44 4f 57 20 20 20 30 78 30 30 30  C_WINDOW   0x000
101b0 31 30 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  10000 /* Built-i
101c0 6e 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79 20 66 75  n window-only fu
101d0 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
101e0 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 49 4e  e SQLITE_FUNC_IN
101f0 54 45 52 4e 41 4c 20 30 78 30 30 30 34 30 30 30  TERNAL 0x0004000
10200 30 20 2f 2a 20 46 6f 72 20 75 73 65 20 62 79 20  0 /* For use by 
10210 4e 65 73 74 65 64 50 61 72 73 65 28 29 20 6f 6e  NestedParse() on
10220 6c 79 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ly */../*.** The
10230 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65   following three
10240 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f   macros, FUNCTIO
10250 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20  N(), LIKEFUNC() 
10260 61 6e 64 20 41 47 47 52 45 47 41 54 45 28 29 20  and AGGREGATE() 
10270 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63  are.** used to c
10280 72 65 61 74 65 20 74 68 65 20 69 6e 69 74 69 61  reate the initia
10290 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46  lizers for the F
102a0 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
102b0 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54  s..**.**   FUNCT
102c0 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
102d0 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
102e0 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  c).**     Used t
102f0 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
10300 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
10310 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
10320 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20  ion zName.**    
10330 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
10340 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63  C function xFunc
10350 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
10360 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68  rg arguments. Th
10370 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70  e.**     value p
10380 61 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73  assed as iArg is
10390 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
103a0 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69  *) and made avai
103b0 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20  lable.**     as 
103c0 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73  the user-data (s
103d0 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
103e0 28 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63  ()) for the func
103f0 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20  tion. If.**     
10400 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20  argument bNC is 
10410 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53  true, then the S
10420 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
10430 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e  OLL flag is set.
10440 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49  .**.**   VFUNCTI
10450 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
10460 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
10470 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55  ).**     Like FU
10480 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74  NCTION except it
10490 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54   omits the SQLIT
104a0 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
104b0 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46  flag..**.**   DF
104c0 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
104d0 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
104e0 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
104f0 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
10500 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
10510 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
10520 54 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a  TANT flag and.**
10530 20 20 20 20 20 61 64 64 73 20 74 68 65 20 53 51       adds the SQ
10540 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
10550 47 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f  G flag.  Used fo
10560 72 20 64 61 74 65 20 26 20 74 69 6d 65 20 66 75  r date & time fu
10570 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61  nctions.**     a
10580 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b  nd functions lik
10590 65 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e  e sqlite_version
105a0 28 29 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e  () that can chan
105b0 67 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69  ge, but not duri
105c0 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67  ng.**     a sing
105d0 6c 65 20 71 75 65 72 79 2e 20 20 54 68 65 20 69  le query.  The i
105e0 41 72 67 20 69 73 20 69 67 6e 6f 72 65 64 2e 20  Arg is ignored. 
105f0 20 54 68 65 20 75 73 65 72 2d 64 61 74 61 20 69   The user-data i
10600 73 20 61 6c 77 61 79 73 20 73 65 74 0a 2a 2a 20  s always set.** 
10610 20 20 20 20 74 6f 20 61 20 4e 55 4c 4c 20 70 6f      to a NULL po
10620 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20  inter.  The bNC 
10630 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
10640 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50   used..**.**   P
10650 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20  URE_DATE(zName, 
10660 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
10670 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55   xFunc).**     U
10680 73 65 64 20 66 6f 72 20 22 70 75 72 65 22 20 64  sed for "pure" d
10690 61 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f  ate/time functio
106a0 6e 73 2c 20 74 68 69 73 20 6d 61 63 72 6f 20 69  ns, this macro i
106b0 73 20 6c 69 6b 65 20 44 46 55 4e 43 54 49 4f 4e  s like DFUNCTION
106c0 0a 2a 2a 20 20 20 20 20 65 78 63 65 70 74 20 74  .**     except t
106d0 68 61 74 20 69 74 20 64 6f 65 73 20 73 65 74 20  hat it does set 
106e0 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
106f0 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 73 2e 20  CONSTANT flags. 
10700 20 69 41 72 67 20 69 73 0a 2a 2a 20 20 20 20 20   iArg is.**     
10710 69 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20  ignored and the 
10720 75 73 65 72 2d 64 61 74 61 20 66 6f 72 20 74 68  user-data for th
10730 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 69 73  ese functions is
10740 20 73 65 74 20 74 6f 20 61 6e 20 0a 2a 2a 20 20   set to an .**  
10750 20 20 20 61 72 62 69 74 72 61 72 79 20 6e 6f 6e     arbitrary non
10760 2d 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20  -NULL pointer.  
10770 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65  The bNC paramete
10780 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  r is not used..*
10790 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45  *.**   AGGREGATE
107a0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
107b0 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20  rg, bNC, xStep, 
107c0 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55  xFinal).**     U
107d0 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e  sed to create an
107e0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
107f0 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ion definition i
10800 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a  mplemented by.**
10810 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74       the C funct
10820 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78  ions xStep and x
10830 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74  Final. The first
10840 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73   four parameters
10850 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65  .**     are inte
10860 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73  rpreted in the s
10870 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66  ame way as the f
10880 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72  irst 4 parameter
10890 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43  s to.**     FUNC
108a0 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20  TION()..**.**   
108b0 57 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  WFUNCTION(zName,
108c0 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 78 53 74   nArg, iArg, xSt
108d0 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c  ep, xFinal, xVal
108e0 75 65 2c 20 78 49 6e 76 65 72 73 65 29 0a 2a 2a  ue, xInverse).**
108f0 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
10900 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65  ate an aggregate
10910 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
10920 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
10930 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43   by.**     the C
10940 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70   functions xStep
10950 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65   and xFinal. The
10960 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61   first four para
10970 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72  meters.**     ar
10980 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e  e interpreted in
10990 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73   the same way as
109a0 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72   the first 4 par
109b0 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20  ameters to.**   
109c0 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a    FUNCTION()..**
109d0 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a  .**   LIKEFUNC(z
109e0 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67  Name, nArg, pArg
109f0 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20  , flags).**     
10a00 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
10a10 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e   scalar function
10a20 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61   definition of a
10a30 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a   function zName.
10a40 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65  **     that acce
10a50 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
10a60 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d  ts and is implem
10a70 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20  ented by a call 
10a80 74 6f 20 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63  to C.**     func
10a90 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41  tion likeFunc. A
10aa0 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20  rgument pArg is 
10ab0 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20  cast to a (void 
10ac0 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20  *) and made.**  
10ad0 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20     available as 
10ae0 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65  the function use
10af0 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f  r-data (sqlite3_
10b00 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68  user_data()). Th
10b10 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66  e.**     FuncDef
10b20 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20  .flags variable 
10b30 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61  is set to the va
10b40 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 74 68  lue passed as th
10b50 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70  e flags.**     p
10b60 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65  arameter..*/.#de
10b70 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e  fine FUNCTION(zN
10b80 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
10b90 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
10ba0 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
10bb0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
10bc0 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
10bd0 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
10be0 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
10bf0 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
10c00 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
10c10 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  0, 0, #zName, {0
10c20 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e  } }.#define VFUN
10c30 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
10c40 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10c50 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
10c60 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
10c70 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
10c80 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
10c90 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
10ca0 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
10cb0 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
10cc0 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44   {0} }.#define D
10cd0 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
10ce0 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
10cf0 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
10d00 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  g, SQLITE_FUNC_S
10d10 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54  LOCHNG|SQLITE_UT
10d20 46 38 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78  F8, \.   0, 0, x
10d30 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23  Func, 0, 0, 0, #
10d40 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
10d50 66 69 6e 65 20 50 55 52 45 5f 44 41 54 45 28 7a  fine PURE_DATE(z
10d60 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
10d70 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
10d80 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10d90 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c  FUNC_SLOCHNG|SQL
10da0 49 54 45 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f  ITE_UTF8|SQLITE_
10db0 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c  FUNC_CONSTANT, \
10dc0 0a 20 20 20 28 76 6f 69 64 2a 29 26 73 71 6c 69  .   (void*)&sqli
10dd0 74 65 33 43 6f 6e 66 69 67 2c 20 30 2c 20 78 46  te3Config, 0, xF
10de0 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
10df0 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
10e00 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e  ine FUNCTION2(zN
10e10 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
10e20 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74   bNC, xFunc, ext
10e30 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  raFlags) \.  {nA
10e40 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  rg,SQLITE_FUNC_C
10e50 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
10e60 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
10e70 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65  FUNC_NEEDCOLL)|e
10e80 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53  xtraFlags,\.   S
10e90 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
10ea0 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63  (iArg), 0, xFunc
10eb0 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  , 0, 0, 0, #zNam
10ec0 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
10ed0 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e   STR_FUNCTION(zN
10ee0 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
10ef0 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
10f00 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
10f10 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49  UNC_SLOCHNG|SQLI
10f20 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
10f30 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
10f40 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30  L), \.   pArg, 0
10f50 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
10f60 2c 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66  , #zName, }.#def
10f70 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61  ine LIKEFUNC(zNa
10f80 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66  me, nArg, arg, f
10f90 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
10fa0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
10fb0 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
10fc0 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76  8|flags, \.   (v
10fd0 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69  oid *)arg, 0, li
10fe0 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c  keFunc, 0, 0, 0,
10ff0 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
11000 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
11010 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
11020 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
11030 69 6e 61 6c 2c 20 78 56 61 6c 75 65 29 20 5c 0a  inal, xValue) \.
11040 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
11050 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
11060 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
11070 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
11080 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
11090 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61  xStep,xFinal,xVa
110a0 6c 75 65 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30  lue,0,#zName, {0
110b0 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45  }}.#define AGGRE
110c0 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  GATE2(zName, nAr
110d0 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65  g, arg, nc, xSte
110e0 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61  p, xFinal, extra
110f0 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
11100 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
11110 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
11120 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
11130 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  gs, \.   SQLITE_
11140 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c  INT_TO_PTR(arg),
11150 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
11160 2c 78 46 69 6e 61 6c 2c 30 2c 23 7a 4e 61 6d 65  ,xFinal,0,#zName
11170 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 57  , {0}}.#define W
11180 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
11190 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
111a0 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78  xStep, xFinal, x
111b0 56 61 6c 75 65 2c 20 78 49 6e 76 65 72 73 65 2c  Value, xInverse,
111c0 20 66 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53   f) \.  {nArg, S
111d0 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53  QLITE_UTF8|(nc*S
111e0 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
111f0 4f 4c 4c 29 7c 66 2c 20 5c 0a 20 20 20 53 51 4c  OLL)|f, \.   SQL
11200 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
11210 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  rg), 0, xStep,xF
11220 69 6e 61 6c 2c 78 56 61 6c 75 65 2c 78 49 6e 76  inal,xValue,xInv
11230 65 72 73 65 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d  erse,#zName, {0}
11240 7d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4e  }.#define INTERN
11250 41 4c 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  AL_FUNCTION(zNam
11260 65 2c 20 6e 41 72 67 2c 20 78 46 75 6e 63 29 20  e, nArg, xFunc) 
11270 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
11280 45 5f 46 55 4e 43 5f 49 4e 54 45 52 4e 41 4c 7c  E_FUNC_INTERNAL|
11290 53 51 4c 49 54 45 5f 55 54 46 38 7c 53 51 4c 49  SQLITE_UTF8|SQLI
112a0 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
112b0 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75  , \.   0, 0, xFu
112c0 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
112d0 61 6d 65 2c 20 7b 30 7d 20 7d 0a 0a 0a 2f 2a 0a  ame, {0} }.../*.
112e0 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73  ** All current s
112f0 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74  avepoints are st
11300 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
11310 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61   list starting a
11320 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61  t.** sqlite3.pSa
11330 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72  vepoint. The fir
11340 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68  st element in th
11350 65 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f  e list is the mo
11360 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f  st recently.** o
11370 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  pened savepoint.
11380 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   Savepoints are 
11390 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73  added to the lis
113a0 74 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a  t by the vdbe.**
113b0 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
113c0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  struction..*/.st
113d0 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b  ruct Savepoint {
113e0 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
113f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11400 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f         /* Savepo
11410 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65  int name (nul-te
11420 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69  rminated) */.  i
11430 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  64 nDeferredCons
11440 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11450 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11460 64 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c  deferred fk viol
11470 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20  ations */.  i64 
11480 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
11490 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
114a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
114b0 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f  erred imm fk. */
114c0 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e  .  Savepoint *pN
114d0 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
114e0 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74         /* Parent
114f0 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61   savepoint (if a
11500 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ny) */.};../*.**
11510 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
11520 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73  re used as the s
11530 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20  econd parameter 
11540 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  to sqlite3Savepo
11550 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73  int(),.** and as
11560 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
11570 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70   to the OP_Savep
11580 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
11590 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56  ..*/.#define SAV
115a0 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20  EPOINT_BEGIN    
115b0 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45    0.#define SAVE
115c0 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20  POINT_RELEASE   
115d0 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   1.#define SAVEP
115e0 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20  OINT_ROLLBACK   
115f0 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  2.../*.** Each S
11600 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69  QLite module (vi
11610 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69  rtual table defi
11620 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e  nition) is defin
11630 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74  ed by an.** inst
11640 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
11650 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c  owing structure,
11660 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
11670 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a  qlite3.aModule.*
11680 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f  * hash table..*/
11690 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b  .struct Module {
116a0 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
116b0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
116c0 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62  ;       /* Callb
116d0 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a  ack pointers */.
116e0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
116f0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
11700 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70         /* Name p
11710 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f  assed to create_
11720 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f  module() */.  vo
11730 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20  id *pAux;       
11740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11750 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65     /* pAux passe
11760 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75  d to create_modu
11770 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  le() */.  void (
11780 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20  *xDestroy)(void 
11790 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  *);            /
117a0 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63  * Module destruc
117b0 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
117c0 20 20 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62    Table *pEpoTab
117d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
117e0 20 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d         /* Eponym
117f0 6f 75 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68  ous table for th
11800 69 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a  is module */.};.
11810 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ./*.** informati
11820 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f  on about each co
11830 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74  lumn of an SQL t
11840 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20  able is held in 
11850 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
11860 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
11870 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75  ..*/.struct Colu
11880 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  mn {.  char *zNa
11890 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  me;     /* Name 
118a0 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20  of this column, 
118b0 5c 30 30 30 2c 20 74 68 65 6e 20 74 68 65 20 74  \000, then the t
118c0 79 70 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ype */.  Expr *p
118d0 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66  Dflt;     /* Def
118e0 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
118f0 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
11900 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20  har *zColl;     
11910 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
11920 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c  uence.  If NULL,
11930 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   use the default
11940 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c   */.  u8 notNull
11950 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f  ;      /* An OE_
11960 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69   code for handli
11970 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  ng a NOT NULL co
11980 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68  nstraint */.  ch
11990 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f  ar affinity;   /
119a0 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  * One of the SQL
119b0 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75  ITE_AFF_... valu
119c0 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74  es */.  u8 szEst
119d0 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69  ;        /* Esti
119e0 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 76 61  mated size of va
119f0 6c 75 65 20 69 6e 20 74 68 69 73 20 63 6f 6c 75  lue in this colu
11a00 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d  mn. sizeof(INT)=
11a10 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c  =1 */.  u8 colFl
11a20 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c  ags;     /* Bool
11a30 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20  ean properties. 
11a40 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65   See COLFLAG_ de
11a50 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d  fines below */.}
11a60 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61  ;../* Allowed va
11a70 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e  lues for Column.
11a80 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65  colFlags:.*/.#de
11a90 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49  fine COLFLAG_PRI
11aa0 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20  MKEY  0x0001    
11ab0 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72  /* Column is par
11ac0 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79  t of the primary
11ad0 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
11ae0 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20  COLFLAG_HIDDEN  
11af0 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20   0x0002    /* A 
11b00 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e  hidden column in
11b10 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
11b20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46   */.#define COLF
11b30 4c 41 47 5f 48 41 53 54 59 50 45 20 20 30 78 30  LAG_HASTYPE  0x0
11b40 30 30 34 20 20 20 20 2f 2a 20 54 79 70 65 20 6e  004    /* Type n
11b50 61 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75  ame follows colu
11b60 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 23 64 65 66 69  mn name */.#defi
11b70 6e 65 20 43 4f 4c 46 4c 41 47 5f 55 4e 49 51 55  ne COLFLAG_UNIQU
11b80 45 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a  E   0x0008    /*
11b90 20 43 6f 6c 75 6d 6e 20 64 65 66 20 63 6f 6e 74   Column def cont
11ba0 61 69 6e 73 20 22 55 4e 49 51 55 45 22 20 6f 72  ains "UNIQUE" or
11bb0 20 22 50 4b 22 20 2a 2f 0a 23 64 65 66 69 6e 65   "PK" */.#define
11bc0 20 43 4f 4c 46 4c 41 47 5f 53 4f 52 54 45 52 52   COLFLAG_SORTERR
11bd0 45 46 20 30 78 30 30 31 30 20 20 20 2f 2a 20 55  EF 0x0010   /* U
11be0 73 65 20 73 6f 72 74 65 72 2d 72 65 66 73 20 77  se sorter-refs w
11bf0 69 74 68 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20  ith this column 
11c00 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c  */../*.** A "Col
11c10 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22  lating Sequence"
11c20 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
11c30 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
11c40 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
11c50 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70  tructure. Concep
11c60 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74  tually, a collat
11c70 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e  ing sequence con
11c80 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20  sists of a name 
11c90 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69  and.** a compari
11ca0 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74  son routine that
11cb0 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64   defines the ord
11cc0 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65  er of that seque
11cd0 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f  nce..**.** If Co
11ce0 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55  llSeq.xCmp is NU
11cf0 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  LL, it means tha
11d00 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69  t the.** collati
11d10 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
11d20 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63  ndefined.  Indic
11d30 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75  es built on an u
11d40 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c  ndefined.** coll
11d50 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d  ating sequence m
11d60 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f  ay not be read o
11d70 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74  r written..*/.st
11d80 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20  ruct CollSeq {. 
11d90 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
11da0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
11db0 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  f the collating 
11dc0 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20  sequence, UTF-8 
11dd0 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  encoded */.  u8 
11de0 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
11df0 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
11e00 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78  ing handled by x
11e10 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  Cmp() */.  void 
11e20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  *pUser;         
11e30 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
11e40 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a  nt to xCmp() */.
11e50 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f    int (*xCmp)(vo
11e60 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76  id*,int, const v
11e70 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  oid*, int, const
11e80 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
11e90 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20  (*xDel)(void*); 
11ea0 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
11eb0 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a  or pUser */.};..
11ec0 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64  /*.** A sort ord
11ed0 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  er can be either
11ee0 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f   ASC or DESC..*/
11ef0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
11f00 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20  SO_ASC       0  
11f10 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
11f20 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
11f30 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
11f40 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20  DESC      1  /* 
11f50 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
11f60 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69  g order */.#defi
11f70 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44  ne SQLITE_SO_UND
11f80 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20  EFINED -1 /* No 
11f90 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69  sort order speci
11fa0 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  fied */../*.** C
11fb0 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
11fc0 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73  ypes..**.** Thes
11fd0 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d  e used to have m
11fe0 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b  nemonic name lik
11ff0 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45  e 'i' for SQLITE
12000 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64  _AFF_INTEGER and
12010 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49  .** 't' for SQLI
12020 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75  TE_AFF_TEXT.  Bu
12030 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20  t we can save a 
12040 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64  little space and
12050 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20   improve.** the 
12060 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62  speed a little b
12070 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20  y numbering the 
12080 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69  values consecuti
12090 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20  vely..**.** But 
120a0 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72  rather than star
120b0 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77  t with 0 or 1, w
120c0 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27  e begin with 'A'
120d0 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20  .  That way,.** 
120e0 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66  when multiple af
120f0 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65  finity types are
12100 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e   concatenated in
12110 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a  to a string and.
12120 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50  ** used as the P
12130 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20  4 operand, they 
12140 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61  will be more rea
12150 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  dable..**.** Not
12160 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20  e also that the 
12170 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72  numeric types ar
12180 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68  e grouped togeth
12190 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69  er so that testi
121a0 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65  ng.** for a nume
121b0 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69  ric type is a si
121c0 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ngle comparison.
121d0 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74    And the BLOB t
121e0 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f  ype is first..*/
121f0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
12200 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20 30 78 34  AFF_NONE     0x4
12210 30 20 20 2f 2a 20 27 40 27 20 2a 2f 0a 23 64 65  0  /* '@' */.#de
12220 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
12230 42 4c 4f 42 20 20 20 20 20 30 78 34 31 20 20 2f  BLOB     0x41  /
12240 2a 20 27 41 27 20 2a 2f 0a 23 64 65 66 69 6e 65  * 'A' */.#define
12250 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
12260 20 20 20 20 20 30 78 34 32 20 20 2f 2a 20 27 42       0x42  /* 'B
12270 27 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ' */.#define SQL
12280 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
12290 20 30 78 34 33 20 20 2f 2a 20 27 43 27 20 2a 2f   0x43  /* 'C' */
122a0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
122b0 41 46 46 5f 49 4e 54 45 47 45 52 20 20 30 78 34  AFF_INTEGER  0x4
122c0 34 20 20 2f 2a 20 27 44 27 20 2a 2f 0a 23 64 65  4  /* 'D' */.#de
122d0 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
122e0 52 45 41 4c 20 20 20 20 20 30 78 34 35 20 20 2f  REAL     0x45  /
122f0 2a 20 27 45 27 20 2a 2f 0a 0a 23 64 65 66 69 6e  * 'E' */..#defin
12300 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72  e sqlite3IsNumer
12310 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20 28  icAffinity(X)  (
12320 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  (X)>=SQLITE_AFF_
12330 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20  NUMERIC)../*.** 
12340 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  The SQLITE_AFF_M
12350 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73  ASK values masks
12360 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66 69   off the signifi
12370 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a  cant bits of an.
12380 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75  ** affinity valu
12390 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
123a0 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20  LITE_AFF_MASK   
123b0 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64    0x47../*.** Ad
123c0 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c  ditional bit val
123d0 75 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ues that can be 
123e0 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61 66 66  ORed with an aff
123f0 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a  inity without.**
12400 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66   changing the af
12410 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  finity..**.** Th
12420 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
12430 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69   flag is a combi
12440 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51  nation of NULLEQ
12450 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e   and JUMPIFNULL.
12460 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e  .** It causes an
12470 20 61 73 73 65 72 74 28 29 20 74 6f 20 66 69 72   assert() to fir
12480 65 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  e if either oper
12490 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69  and to a compari
124a0 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20  son.** operator 
124b0 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20  is NULL.  It is 
124c0 61 64 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e  added to certain
124d0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72   comparison oper
124e0 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76  ators to.** prov
124f0 65 20 74 68 61 74 20 74 68 65 20 6f 70 65 72 61  e that the opera
12500 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e  nds are always N
12510 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66  OT NULL..*/.#def
12520 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e  ine SQLITE_KEEPN
12530 55 4c 4c 20 20 20 20 20 30 78 30 38 20 20 2f 2a  ULL     0x08  /*
12540 20 55 73 65 64 20 62 79 20 76 65 63 74 6f 72 20   Used by vector 
12550 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65 66  == or <> */.#def
12560 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  ine SQLITE_JUMPI
12570 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a  FNULL   0x10  /*
12580 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65 72   jumps if either
12590 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
125a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
125b0 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20  TE_STOREP2      
125c0 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72  0x20  /* Store r
125d0 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d  esult in reg[P2]
125e0 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d   rather than jum
125f0 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  p */.#define SQL
12600 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20  ITE_NULLEQ      
12610 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e   0x80  /* NULL=N
12620 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
12630 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20  QLITE_NOTNULL   
12640 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65     0x90  /* Asse
12650 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73  rt that operands
12660 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20   are never NULL 
12670 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  */../*.** An obj
12680 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65  ect of this type
12690 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
126a0 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61 62  each virtual tab
126b0 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a  le present in.**
126c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
126d0 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  hema..**.** If t
126e0 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
126f0 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68  ma is shared, th
12700 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20  en there is one 
12710 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
12720 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f  .** structure fo
12730 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  r each database 
12740 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69  connection (sqli
12750 74 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20  te3*) that uses 
12760 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63  the shared.** sc
12770 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65  hema. This is be
12780 63 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62  cause each datab
12790 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72  ase connection r
127a0 65 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20  equires its own 
127b0 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e  unique.** instan
127c0 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ce of the sqlite
127d0 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75  3_vtab* handle u
127e0 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  sed to access th
127f0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0a  e virtual table.
12800 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
12810 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  n. sqlite3_vtab*
12820 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74   handles can not
12830 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65   be shared betwe
12840 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  en.** database c
12850 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e  onnections, even
12860 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f   when the rest o
12870 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  f the in-memory 
12880 64 61 74 61 62 61 73 65 0a 2a 2a 20 73 63 68 65  database.** sche
12890 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73  ma is shared, as
128a0 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
128b0 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73  ion often stores
128c0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
128d0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
128e0 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20  le passed to it 
128f0 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74  via the xConnect
12900 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20  () or xCreate() 
12910 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67  method.** during
12920 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
12930 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73  internally. This
12940 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
12950 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a  tion handle may.
12960 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20  ** then be used 
12970 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  by the virtual t
12980 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
12990 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65  ion to access re
129a0 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69 74  al tables.** wit
129b0 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hin the database
129c0 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61  . So that they a
129d0 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66  ppear as part of
129e0 20 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a 20   the callers.** 
129f0 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
12a00 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64  se accesses need
12a10 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20   to be made via 
12a20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
12a30 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
12a40 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20  as that used to 
12a50 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72  execute SQL oper
12a60 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69  ations on the vi
12a70 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a  rtual table..**.
12a80 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62  ** All VTable ob
12a90 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65  jects that corre
12aa0 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c  spond to a singl
12ab0 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61  e table in a sha
12ac0 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  red.** database 
12ad0 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69  schema are initi
12ae0 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ally stored in a
12af0 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69   linked-list poi
12b00 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68  nted to by.** th
12b10 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
12b20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20  member variable 
12b30 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
12b40 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63  ding Table objec
12b50 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71  t..** When an sq
12b60 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
12b70 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71  operation is req
12b80 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20  uired to access 
12b90 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
12ba0 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65  able, it searche
12bb0 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74  s the list for t
12bc0 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63  he VTable that c
12bd0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
12be0 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  e.** database co
12bf0 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74  nnection doing t
12c00 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20  he preparing so 
12c10 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f  as to use the co
12c20 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33  rrect.** sqlite3
12c30 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e  _vtab* handle in
12c40 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75   the compiled qu
12c50 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ery..**.** When 
12c60 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62  an in-memory Tab
12c70 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c  le object is del
12c80 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c  eted (for exampl
12c90 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63  e when the.** sc
12ca0 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65  hema is being re
12cb0 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20  loaded for some 
12cc0 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61  reason), the VTa
12cd0 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ble objects are 
12ce0 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61  not.** deleted a
12cf0 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  nd the sqlite3_v
12d00 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65  tab* handles are
12d10 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74   not xDisconnect
12d20 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61 74  ()ed.** immediat
12d30 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68  ely. Instead, th
12d40 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f  ey are moved fro
12d50 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61  m the Table.pVTa
12d60 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61  ble list to.** a
12d70 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69  nother linked li
12d80 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68 65  st headed by the
12d90 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e   sqlite3.pDiscon
12da0 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74  nect member of t
12db0 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
12dc0 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72 75  ing sqlite3 stru
12dd0 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65 20  cture. They are 
12de0 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69  then deleted/xDi
12df0 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e 65  sconnected.** ne
12e00 78 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d  xt time a statem
12e10 65 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20  ent is prepared 
12e20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74  using said sqlit
12e30 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e  e3*. This is don
12e40 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65  e.** to avoid de
12e50 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e  adlock issues in
12e60 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65  volving multiple
12e70 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d   sqlite3.mutex m
12e80 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72  utexes..** Refer
12e90 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f   to comments abo
12ea0 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69  ve function sqli
12eb0 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
12ec0 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78  t() for an.** ex
12ed0 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20  planation as to 
12ee0 77 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74  why it is safe t
12ef0 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74  o add an entry t
12f00 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69  o an sqlite3.pDi
12f10 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74  sconnect.** list
12f20 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67   without holding
12f30 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
12f40 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  ng sqlite3.mutex
12f50 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68   mutex..**.** Th
12f60 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a  e memory for obj
12f70 65 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70  ects of this typ
12f80 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f  e is always allo
12f90 63 61 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  cated by.** sqli
12fa0 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75  te3DbMalloc(), u
12fb0 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  sing the connect
12fc0 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65  ion handle store
12fd0 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61  d in VTable.db a
12fe0 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61  s.** the first a
12ff0 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  rgument..*/.stru
13000 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71  ct VTable {.  sq
13010 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
13020 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
13030 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  ase connection a
13040 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
13050 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d  his table */.  M
13060 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20  odule *pMod;    
13070 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
13080 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d  ter to module im
13090 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a  plementation */.
130a0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
130b0 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50  pVtab;      /* P
130c0 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69  ointer to vtab i
130d0 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74  nstance */.  int
130e0 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
130f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13100 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
13110 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a  this structure *
13120 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69  /.  u8 bConstrai
13130 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
13140 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61   True if constra
13150 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74  ints are support
13160 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76  ed */.  int iSav
13170 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20  epoint;         
13180 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68    /* Depth of th
13190 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63  e SAVEPOINT stac
131a0 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  k */.  VTable *p
131b0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
131c0 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b   /* Next in link
131d0 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f  ed list (see abo
131e0 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ve) */.};../*.**
131f0 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20   The schema for 
13200 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 61  each SQL table a
13210 6e 64 20 76 69 65 77 20 69 73 20 72 65 70 72 65  nd view is repre
13220 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
13230 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  .** by an instan
13240 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
13250 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
13260 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b  /.struct Table {
13270 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
13280 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
13290 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  of the table or 
132a0 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e  view */.  Column
132b0 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f   *aCol;        /
132c0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
132d0 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  out each column 
132e0 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  */.  Index *pInd
132f0 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  ex;       /* Lis
13300 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73  t of SQL indexes
13310 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20   on this table. 
13320 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65  */.  Select *pSe
13330 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c  lect;     /* NUL
13340 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50  L for tables.  P
13350 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74  oints to definit
13360 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a  ion if a view. *
13370 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b  /.  FKey *pFKey;
13380 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b           /* Link
13390 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66  ed list of all f
133a0 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74  oreign keys in t
133b0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63  his table */.  c
133c0 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
133d0 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
133e0 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
133f0 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
13400 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  mn */.  ExprList
13410 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20   *pCheck;    /* 
13420 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  All CHECK constr
13430 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 20  aints */.       
13440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13450 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73  /*   ... also us
13460 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d  ed as column nam
13470 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49 45 57  e list in a VIEW
13480 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
13490 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
134a0 6f 74 20 42 54 72 65 65 20 70 61 67 65 20 66 6f  ot BTree page fo
134b0 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  r this table */.
134c0 20 20 75 33 32 20 6e 54 61 62 52 65 66 3b 20 20    u32 nTabRef;  
134d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
134e0 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
134f0 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20  this Table */.  
13500 75 33 32 20 74 61 62 46 6c 61 67 73 3b 20 20 20  u32 tabFlags;   
13510 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
13520 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  TF_* values */. 
13530 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20   i16 iPKey;     
13540 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
13550 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61 43  negative, use aC
13560 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65  ol[iPKey] as the
13570 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20   rowid */.  i16 
13580 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  nCol;           
13590 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
135a0 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61  lumns in this ta
135b0 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  ble */.  LogEst 
135c0 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a  nRowLogEst;   /*
135d0 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20   Estimated rows 
135e0 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20  in table - from 
135f0 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
13600 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  le */.  LogEst s
13610 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20  zTabRow;     /* 
13620 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f  Estimated size o
13630 66 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77  f each table row
13640 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66   in bytes */.#if
13650 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
13660 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67  E_COSTMULT.  Log
13670 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20  Est costMult;   
13680 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70    /* Cost multip
13690 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74  lier for using t
136a0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e  his table */.#en
136b0 64 69 66 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66  dif.  u8 keyConf
136c0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ;          /* Wh
136d0 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65  at to do in case
136e0 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63   of uniqueness c
136f0 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79  onflict on iPKey
13700 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
13710 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
13720 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f  LE.  int addColO
13730 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66  ffset;    /* Off
13740 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41  set in CREATE TA
13750 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20  BLE stmt to add 
13760 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  a new column */.
13770 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
13780 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
13790 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d  ALTABLE.  int nM
137a0 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f  oduleArg;      /
137b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
137c0 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64  ments to the mod
137d0 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  ule */.  char **
137e0 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a  azModuleArg;  /*
137f0 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63   0: module 1: sc
13800 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e 61 6d  hema 2: vtab nam
13810 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a  e 3...: args */.
13820 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c    VTable *pVTabl
13830 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f  e;     /* List o
13840 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  f VTable objects
13850 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72  . */.#endif.  Tr
13860 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
13870 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72     /* List of tr
13880 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e  iggers stored in
13890 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63   pSchema */.  Sc
138a0 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
138b0 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61     /* Schema tha
138c0 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20  t contains this 
138d0 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65  table */.  Table
138e0 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20   *pNextZombie;  
138f0 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50  /* Next on the P
13900 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20  arse.pZombieTab 
13910 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
13920 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
13930 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c   for Table.tabFl
13940 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f  ags..**.** TF_OO
13950 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20  OHidden applies 
13960 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76 69 65  to tables or vie
13970 77 20 74 68 61 74 20 68 61 76 65 20 68 69 64 64  w that have hidd
13980 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  en columns that 
13990 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20  are.** followed 
139a0 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f  by non-hidden co
139b0 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a  lumns.  Example:
139c0 20 20 22 43 52 45 41 54 45 20 56 49 52 54 55 41    "CREATE VIRTUA
139d0 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a  L TABLE x USING.
139e0 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44 44 45  ** vtab1(a HIDDE
139f0 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20  N, b);".  Since 
13a00 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64  "b" is a non-hid
13a10 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22  den column but "
13a20 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a  a" is hidden,.**
13a30 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65   the TF_OOOHidde
13a40 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c  n attribute woul
13a50 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20  d apply in this 
13a60 63 61 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c  case.  Such tabl
13a70 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70  es require.** sp
13a80 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64  ecial handling d
13a90 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f  uring INSERT pro
13aa0 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66  cessing..*/.#def
13ab0 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20  ine TF_Readonly 
13ac0 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20 20         0x0001   
13ad0 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79   /* Read-only sy
13ae0 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64  stem table */.#d
13af0 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72  efine TF_Ephemer
13b00 61 6c 20 20 20 20 20 20 20 30 78 30 30 30 32 20  al       0x0002 
13b10 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72     /* An ephemer
13b20 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
13b30 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72  ine TF_HasPrimar
13b40 79 4b 65 79 20 20 20 30 78 30 30 30 34 20 20 20  yKey   0x0004   
13b50 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20   /* Table has a 
13b60 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23  primary key */.#
13b70 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e  define TF_Autoin
13b80 63 72 65 6d 65 6e 74 20 20 20 30 78 30 30 30 38  crement   0x0008
13b90 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
13ba0 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
13bb0 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
13bc0 64 65 66 69 6e 65 20 54 46 5f 48 61 73 53 74 61  define TF_HasSta
13bd0 74 31 20 20 20 20 20 20 20 20 30 78 30 30 31 30  t1        0x0010
13be0 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67 45 73      /* nRowLogEs
13bf0 74 20 73 65 74 20 66 72 6f 6d 20 73 71 6c 69 74  t set from sqlit
13c00 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65 66 69  e_stat1 */.#defi
13c10 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77  ne TF_WithoutRow
13c20 69 64 20 20 20 20 30 78 30 30 32 30 20 20 20 20  id    0x0020    
13c30 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52  /* No rowid.  PR
13c40 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68 65  IMARY KEY is the
13c50 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
13c60 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69  TF_NoVisibleRowi
13c70 64 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20  d  0x0040    /* 
13c80 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20  No user-visible 
13c90 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a  "rowid" column *
13ca0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f  /.#define TF_OOO
13cb0 48 69 64 64 65 6e 20 20 20 20 20 20 20 30 78 30  Hidden       0x0
13cc0 30 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66  080    /* Out-of
13cd0 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f  -Order hidden co
13ce0 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  lumns */.#define
13cf0 20 54 46 5f 53 74 61 74 73 55 73 65 64 20 20 20   TF_StatsUsed   
13d00 20 20 20 20 30 78 30 31 30 30 20 20 20 20 2f 2a      0x0100    /*
13d10 20 51 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 64   Query planner d
13d20 65 63 69 73 69 6f 6e 73 20 61 66 66 65 63 74 65  ecisions affecte
13d30 64 20 62 79 0a 20 20 20 20 20 20 20 20 20 20 20  d by.           
13d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d50 20 20 20 20 20 20 20 20 20 20 2a 2a 20 49 6e 64            ** Ind
13d60 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74 5b 5d  ex.aiRowLogEst[]
13d70 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65 66 69   values */.#defi
13d80 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75 6c 6c  ne TF_HasNotNull
13d90 20 20 20 20 20 20 30 78 30 32 30 30 20 20 20 20        0x0200    
13da0 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f 54 20  /* Contains NOT 
13db0 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73  NULL constraints
13dc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 53   */.#define TF_S
13dd0 68 61 64 6f 77 20 20 20 20 20 20 20 20 20 20 30  hadow          0
13de0 78 30 34 30 30 20 20 20 20 2f 2a 20 54 72 75 65  x0400    /* True
13df0 20 66 6f 72 20 61 20 73 68 61 64 6f 77 20 74 61   for a shadow ta
13e00 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65  ble */../*.** Te
13e10 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65  st to see whethe
13e20 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65  r or not a table
13e30 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61   is a virtual ta
13e40 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a  ble.  This is.**
13e50 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f   done as a macro
13e60 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c   so that it will
13e70 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75   be optimized ou
13e80 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a  t when virtual.*
13e90 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20  * table support 
13ea0 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
13eb0 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69  the build..*/.#i
13ec0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
13ed0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
13ee0 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
13ef0 61 6c 28 58 29 20 20 20 20 20 20 28 28 58 29 2d  al(X)      ((X)-
13f00 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65 6c  >nModuleArg).#el
13f10 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  se.#  define IsV
13f20 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30  irtual(X)      0
13f30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
13f40 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
13f50 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69  ne if a column i
13f60 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64  s hidden.  IsOrd
13f70 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
13f80 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b  n().** only work
13f90 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61  s for non-virtua
13fa0 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61  l tables (ordina
13fb0 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69  ry tables and vi
13fc0 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61  ews) and is.** a
13fd0 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65  lways false unle
13fe0 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ss SQLITE_ENABLE
13ff0 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20  _HIDDEN_COLUMNS 
14000 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65  is defined.  The
14010 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  .** IsHiddenColu
14020 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65  mn() macro is ge
14030 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a  neral purpose..*
14040 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
14050 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
14060 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64  EN_COLUMNS).#  d
14070 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
14080 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
14090 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
140a0 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
140b0 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
140c0 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
140d0 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d  Column(X) (((X)-
140e0 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
140f0 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
14100 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53  #elif !defined(S
14110 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
14120 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69  ALTABLE).#  defi
14130 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
14140 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28  n(X)         (((
14150 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
14160 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
14170 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f  0).#  define IsO
14180 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
14190 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23  umn(X) 0.#else.#
141a0 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
141b0 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
141c0 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49     0.#  define I
141d0 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
141e0 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69  olumn(X) 0.#endi
141f0 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20  f.../* Does the 
14200 74 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77  table have a row
14210 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61  id */.#define Ha
14220 73 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28  sRowid(X)     ((
14230 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
14240 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29  TF_WithoutRowid)
14250 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73  ==0).#define Vis
14260 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28  ibleRowid(X) (((
14270 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
14280 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64  F_NoVisibleRowid
14290 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  )==0)../*.** Eac
142a0 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  h foreign key co
142b0 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69  nstraint is an i
142c0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
142d0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
142e0 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65  re..**.** A fore
142f0 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63  ign key is assoc
14300 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74  iated with two t
14310 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f  ables.  The "fro
14320 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74  m" table is.** t
14330 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  he table that co
14340 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52  ntains the REFER
14350 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61  ENCES clause tha
14360 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f  t creates the fo
14370 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54  reign.** key.  T
14380 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73  he "to" table is
14390 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
143a0 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20  is named in the 
143b0 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
143c0 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74  e..** Consider t
143d0 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a  his example:.**.
143e0 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
143f0 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20  BLE ex1(.**     
14400 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d    a INTEGER PRIM
14410 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20  ARY KEY,.**     
14420 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53    b INTEGER CONS
14430 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52  TRAINT fk1 REFER
14440 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20  ENCES ex2(x).** 
14450 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72      );.**.** For
14460 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b   foreign key "fk
14470 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  1", the from-tab
14480 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20  le is "ex1" and 
14490 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
144a0 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61  "ex2"..** Equiva
144b0 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a  lent names:.**.*
144c0 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65  *     from-table
144d0 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a   == child-table.
144e0 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c  **       to-tabl
144f0 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c  e == parent-tabl
14500 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46  e.**.** Each REF
14510 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67  ERENCES clause g
14520 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74  enerates an inst
14530 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
14540 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
14550 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61  ** which is atta
14560 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d  ched to the from
14570 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d  -table.  The to-
14580 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65  table need not e
14590 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65  xist when.** the
145a0 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63   from-table is c
145b0 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69  reated.  The exi
145c0 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f  stence of the to
145d0 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68  -table is not ch
145e0 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ecked..**.** The
145f0 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72   list of all par
14600 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54  ents for child T
14610 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61  able X is held a
14620 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a  t X.pFKey..**.**
14630 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63   A list of all c
14640 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61  hildren for a ta
14650 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69  ble named Z (whi
14660 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65  ch might not eve
14670 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68  n exist).** is h
14680 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b  eld in Schema.fk
14690 65 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61  eyHash with a ha
146a0 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a  sh key of Z..*/.
146b0 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20  struct FKey {.  
146c0 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20  Table *pFrom;   
146d0 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61    /* Table conta
146e0 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45  ining the REFERE
146f0 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61  NCES clause (aka
14700 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b  : Child) */.  FK
14710 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20  ey *pNextFrom;  
14720 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74  /* Next FKey wit
14730 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46  h the same in pF
14740 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74  rom. Next parent
14750 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63   of pFrom */.  c
14760 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20  har *zTo;       
14770 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c   /* Name of tabl
14780 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70  e that the key p
14790 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50  oints to (aka: P
147a0 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79  arent) */.  FKey
147b0 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a   *pNextTo;    /*
147c0 20 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73   Next with the s
147d0 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68  ame zTo. Next ch
147e0 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20  ild of zTo. */. 
147f0 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20   FKey *pPrevTo; 
14800 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77     /* Previous w
14810 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f  ith the same zTo
14820 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20   */.  int nCol; 
14830 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14840 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
14850 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a  this key */.  /*
14860 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39   EV: R-30323-219
14870 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66  17 */.  u8 isDef
14880 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20  erred;       /* 
14890 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
148a0 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64  nt checking is d
148b0 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d  eferred till COM
148c0 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74  MIT */.  u8 aAct
148d0 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f  ion[2];        /
148e0 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20  * ON DELETE and 
148f0 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e  ON UPDATE action
14900 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20  s, respectively 
14910 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70  */.  Trigger *ap
14920 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72  Trigger[2];/* Tr
14930 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69  iggers for aActi
14940 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a  on[] actions */.
14950 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70    struct sColMap
14960 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69   {      /* Mappi
14970 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  ng of columns in
14980 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e   pFrom to column
14990 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20  s in zTo */.    
149a0 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20  int iFrom;      
149b0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
149c0 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f  f column in pFro
149d0 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  m */.    char *z
149e0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Col;           /
149f0 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e  * Name of column
14a00 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c   in zTo.  If NUL
14a10 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45  L use PRIMARY KE
14a20 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d  Y */.  } aCol[1]
14a30 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14a40 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
14a50 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d  ch of nCol colum
14a60 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ns */.};../*.** 
14a70 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
14a80 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77  many different w
14a90 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61  ays to resolve a
14aa0 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
14ab0 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20  rror.  ROLLBACK 
14ac0 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
14ad0 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69   that a constrai
14ae0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20  nt violation.** 
14af0 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61  causes the opera
14b00 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20  tion in process 
14b10 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20  to fail and for 
14b20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
14b30 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65  saction.** to be
14b40 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41   rolled back.  A
14b50 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20  BORT processing 
14b60 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74  means the operat
14b70 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a  ion in process.*
14b80 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20  * fails and any 
14b90 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72  prior changes fr
14ba0 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72  om that one oper
14bb0 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64  ation are backed
14bc0 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65   out,.** but the
14bd0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
14be0 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e  not rolled back.
14bf0 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e    FAIL processin
14c00 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20  g means that.** 
14c10 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
14c20 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20   progress stops 
14c30 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65  and returns an e
14c40 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20  rror code.  But 
14c50 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73  prior.** changes
14c60 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65   due to the same
14c70 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e   operation are n
14c80 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e  ot backed out an
14c90 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  d no rollback.**
14ca0 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45   occurs.  IGNORE
14cb0 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
14cc0 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74  particular row t
14cd0 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63  hat caused the c
14ce0 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
14cf0 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74  or is not insert
14d00 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20  ed or updated.  
14d10 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
14d20 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
14d30 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  r.** is returned
14d40 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73  .  REPLACE means
14d50 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e   that preexistin
14d60 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20  g database rows 
14d70 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61  that caused.** a
14d80 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
14d90 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65  nt violation are
14da0 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74   removed so that
14db0 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20   the new insert 
14dc0 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e  or.** update can
14dd0 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65   proceed.  Proce
14de0 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
14df0 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20  and no error is 
14e00 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  reported..**.** 
14e10 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c  RESTRICT, SETNUL
14e20 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61  L, and CASCADE a
14e30 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c  ctions apply onl
14e40 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79  y to foreign key
14e50 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69  s..** RESTRICT i
14e60 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42  s the same as AB
14e70 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54  ORT for IMMEDIAT
14e80 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61  E foreign keys a
14e90 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61  nd the.** same a
14ea0 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44  s ROLLBACK for D
14eb0 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53  EFERRED keys.  S
14ec0 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61  ETNULL means tha
14ed0 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  t the foreign.**
14ee0 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e   key is set to N
14ef0 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65  ULL.  CASCADE me
14f00 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54  ans that a DELET
14f10 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74  E or UPDATE of t
14f20 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64  he.** referenced
14f30 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72   table row is pr
14f40 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68  opagated into th
14f50 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73  e row that holds
14f60 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20   the.** foreign 
14f70 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  key..**.** The f
14f80 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69  ollowing symboli
14f90 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  c values are use
14fa0 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63  d to record whic
14fb0 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74  h type.** of act
14fc0 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a  ion to take..*/.
14fd0 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20  #define OE_None 
14fe0 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65      0   /* There
14ff0 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e   is no constrain
15000 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64  t to check */.#d
15010 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63  efine OE_Rollbac
15020 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68  k 1   /* Fail th
15030 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  e operation and 
15040 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
15050 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
15060 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20  ine OE_Abort    
15070 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20  2   /* Back out 
15080 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e  changes but do n
15090 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  o rollback trans
150a0 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
150b0 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20  e OE_Fail     3 
150c0 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70    /* Stop the op
150d0 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76  eration but leav
150e0 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e  e all prior chan
150f0 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ges */.#define O
15100 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f  E_Ignore   4   /
15110 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72  * Ignore the err
15120 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68  or. Do not do th
15130 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  e INSERT or UPDA
15140 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  TE */.#define OE
15150 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a  _Replace  5   /*
15160 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   Delete existing
15170 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f   record, then do
15180 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
15190 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  E */.#define OE_
151a0 55 70 64 61 74 65 20 20 20 36 20 20 20 2f 2a 20  Update   6   /* 
151b0 50 72 6f 63 65 73 73 20 61 73 20 61 20 44 4f 20  Process as a DO 
151c0 55 50 44 41 54 45 20 69 6e 20 61 6e 20 75 70 73  UPDATE in an ups
151d0 65 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ert */.#define O
151e0 45 5f 52 65 73 74 72 69 63 74 20 37 20 20 20 2f  E_Restrict 7   /
151f0 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49  * OE_Abort for I
15200 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c  MMEDIATE, OE_Rol
15210 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52  lback for DEFERR
15220 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ED */.#define OE
15230 5f 53 65 74 4e 75 6c 6c 20 20 38 20 20 20 2f 2a  _SetNull  8   /*
15240 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
15250 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55   key value to NU
15260 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  LL */.#define OE
15270 5f 53 65 74 44 66 6c 74 20 20 39 20 20 20 2f 2a  _SetDflt  9   /*
15280 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
15290 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74   key value to it
152a0 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65  s default */.#de
152b0 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20  fine OE_Cascade 
152c0 20 31 30 20 20 2f 2a 20 43 61 73 63 61 64 65 20   10  /* Cascade 
152d0 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  the changes */.#
152e0 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c  define OE_Defaul
152f0 74 20 20 31 31 20 20 2f 2a 20 44 6f 20 77 68 61  t  11  /* Do wha
15300 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c  tever the defaul
15310 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a  t action is */..
15320 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
15330 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
15340 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
15350 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
15360 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
15370 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b   to sqlite3VdbeK
15380 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73  eyCompare and is
15390 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c   used to control
153a0 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
153b0 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e  on of the two in
153c0 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20  dex keys..**.** 
153d0 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f  Note that aSortO
153e0 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c  rder[] and aColl
153f0 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31  [] have nField+1
15400 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a   slots.  There.*
15410 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f  * are nField slo
15420 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ts for the colum
15430 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74  ns of an index t
15440 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c  hen one extra sl
15450 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f  ot.** for the ro
15460 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  wid at the end..
15470 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66  */.struct KeyInf
15480 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20  o {.  u32 nRef; 
15490 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
154a0 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65  ber of reference
154b0 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66  s to this KeyInf
154c0 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38  o object */.  u8
154d0 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
154e0 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
154f0 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20  ng - one of the 
15500 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75  SQLITE_UTF* valu
15510 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79  es */.  u16 nKey
15520 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 4e  Field;      /* N
15530 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c  umber of key col
15540 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65  umns in the inde
15550 78 20 2a 2f 0a 20 20 75 31 36 20 6e 41 6c 6c 46  x */.  u16 nAllF
15560 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 54 6f  ield;      /* To
15570 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 63  tal columns, inc
15580 6c 75 64 69 6e 67 20 6b 65 79 20 70 6c 75 73 20  luding key plus 
15590 6f 74 68 65 72 73 20 2a 2f 0a 20 20 73 71 6c 69  others */.  sqli
155a0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
155b0 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
155c0 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
155d0 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
155e0 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65      /* Sort orde
155f0 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  r for each colum
15600 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  n. */.  CollSeq 
15610 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43  *aColl[1];  /* C
15620 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
15630 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20  e for each term 
15640 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b  of the key */.};
15650 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a  ../*.** This obj
15660 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f  ect holds a reco
15670 72 64 20 77 68 69 63 68 20 68 61 73 20 62 65 65  rd which has bee
15680 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74  n parsed out int
15690 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20  o individual.** 
156a0 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20  fields, for the 
156b0 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e  purposes of doin
156c0 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a  g a comparison..
156d0 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69  **.** A record i
156e0 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74  s an object that
156f0 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
15700 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20   more fields of 
15710 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73  data..** Records
15720 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f   are used to sto
15730 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  re the content o
15740 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e  f a table row an
15750 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68  d to store.** th
15760 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65  e key of an inde
15770 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64  x.  A blob encod
15780 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20  ing of a record 
15790 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a  is created by.**
157a0 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
157b0 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65  rd opcode of the
157c0 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73   VDBE and is dis
157d0 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65  assembled by the
157e0 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  .** OP_Column op
157f0 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69  code..**.** An i
15800 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
15810 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20 61 73  object serves as
15820 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69   a "key" for doi
15830 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a  ng a search on.*
15840 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65  * an index b+tre
15850 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74  e. The goal of t
15860 68 65 20 73 65 61 72 63 68 20 69 73 20 74 6f 20  he search is to 
15870 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74  find the entry t
15880 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64  hat.** is closed
15890 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63   to the key desc
158a0 72 69 62 65 64 20 62 79 20 74 68 69 73 20 6f 62  ribed by this ob
158b0 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65  ject.  This obje
158c0 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a  ct might hold.**
158d0 20 6a 75 73 74 20 61 20 70 72 65 66 69 78 20 6f   just a prefix o
158e0 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20  f the key.  The 
158f0 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  number of fields
15900 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20   is given by.** 
15910 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
15920 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61  ..**.** The r1 a
15930 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61 72 65  nd r2 fields are
15940 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72   the values to r
15950 65 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65  eturn if this ke
15960 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a  y is less than.*
15970 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  * or greater tha
15980 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62  n a key in the b
15990 74 72 65 65 2c 20 72 65 73 70 65 63 74 69 76 65  tree, respective
159a0 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e  ly.  These are n
159b0 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e  ormally.** -1 an
159c0 64 20 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c  d +1 respectivel
159d0 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65 20  y, but might be 
159e0 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61  inverted to +1 a
159f0 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74  nd -1 if the b-t
15a00 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53  ree.** is in DES
15a10 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  C order..**.** T
15a20 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f  he key compariso
15a30 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75  n functions actu
15a40 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61  ally return defa
15a50 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79  ult_rc when they
15a60 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61   find.** an equa
15a70 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  ls comparison.  
15a80 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62  default_rc can b
15a90 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20  e -1, 0, or +1. 
15aa0 20 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a   If there are.**
15ab0 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65   multiple entrie
15ac0 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20  s in the b-tree 
15ad0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65  with the same ke
15ae0 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f  y (when only loo
15af0 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66  king.** at the f
15b00 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  irst pKeyInfo->n
15b10 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65  Fields,) then de
15b20 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20  fault_rc can be 
15b30 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20  set to -1 to.** 
15b40 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68  cause the search
15b50 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73   to find the las
15b60 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74  t match, or +1 t
15b70 6f 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72  o cause the sear
15b80 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68  ch to.** find th
15b90 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a  e first match..*
15ba0 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d  *.** The key com
15bb0 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
15bc0 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65  s will set eqSee
15bd0 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65  n to true if the
15be0 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e  y ever.** get an
15bf0 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20  d equal results 
15c00 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74  when comparing t
15c10 68 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f  his structure to
15c20 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64   a b-tree record
15c30 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c  ..** When defaul
15c40 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61  t_rc!=0, the sea
15c50 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70  rch might end up
15c60 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69   on the record i
15c70 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65  mmediately.** be
15c80 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d  fore the first m
15c90 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74  atch or immediat
15ca0 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61  ely after the la
15cb0 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a  st match.  The.*
15cc0 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77  * eqSeen field w
15cd0 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65  ill indicate whe
15ce0 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65  ther or not an e
15cf0 78 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74  xact match exist
15d00 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72  s in the.** b-tr
15d10 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e  ee..*/.struct Un
15d20 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20  packedRecord {. 
15d30 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
15d40 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f  fo;  /* Collatio
15d50 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72  n and sort-order
15d60 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
15d70 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20    Mem *aMem;    
15d80 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20        /* Values 
15d90 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
15da0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15db0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
15dc0 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38   apMem[] */.  i8
15dd0 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20   default_rc;    
15de0 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20    /* Comparison 
15df0 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61  result if keys a
15e00 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38  re equal */.  u8
15e10 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
15e20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63    /* Error detec
15e30 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f  ted by xRecordCo
15e40 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f  mpare (CORRUPT o
15e50 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38  r NOMEM) */.  i8
15e60 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20   r1;            
15e70 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
15e80 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3c 20 72  turn if (lhs < r
15e90 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20  hs) */.  i8 r2; 
15ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15eb0 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
15ec0 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a  if (lhs > rhs) *
15ed0 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20  /.  u8 eqSeen;  
15ee0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
15ef0 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63  if an equality c
15f00 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65  omparison has be
15f10 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a  en seen */.};...
15f20 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69  /*.** Each SQL i
15f30 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e  ndex is represen
15f40 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79  ted in memory by
15f50 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
15f60 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
15f70 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
15f80 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  * The columns of
15f90 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
15fa0 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65  are to be indexe
15fb0 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a  d are described.
15fc0 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75  ** by the aiColu
15fd0 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68  mn[] field of th
15fe0 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46  is structure.  F
15ff0 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70  or example, supp
16000 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74  ose.** we have t
16010 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62  he following tab
16020 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a  le and index:.**
16030 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
16040 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c  ABLE Ex1(c1 int,
16050 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74   c2 int, c3 text
16060 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  );.**     CREATE
16070 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78   INDEX Ex2 ON Ex
16080 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20  1(c3,c1);.**.** 
16090 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72  In the Table str
160a0 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
160b0 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62  g Ex1, nCol==3 b
160c0 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65  ecause there are
160d0 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e  .** three column
160e0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
160f0 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74   In the Index st
16100 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
16110 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75  ng.** Ex2, nColu
16120 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66  mn==2 since 2 of
16130 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f   the 3 columns o
16140 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65  f Ex1 are indexe
16150 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  d..** The value 
16160 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b  of aiColumn is {
16170 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e  2, 0}.  aiColumn
16180 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74  [0]==2 because t
16190 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75  he.** first colu
161a0 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
161b0 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64   (c3) has an ind
161c0 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61  ex of 2 in Ex1.a
161d0 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65  Col[]..** The se
161e0 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  cond column to b
161f0 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68  e indexed (c1) h
16200 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
16210 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b   in.** Ex1.aCol[
16220 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43  ], hence Ex2.aiC
16230 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a  olumn[1]==0..**.
16240 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45  ** The Index.onE
16250 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72  rror field deter
16260 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
16270 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64   not the indexed
16280 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74   columns.** must
16290 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77   be unique and w
162a0 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65  hat to do if the
162b0 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e  y are not.  When
162c0 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f   Index.onError=O
162d0 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65  E_None,.** it me
162e0 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ans this is not 
162f0 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20  a unique index. 
16300 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73   Otherwise it is
16310 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a   a unique index.
16320 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ** and the value
16330 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f   of Index.onErro
16340 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77  r indicate the w
16350 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65  hich conflict re
16360 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f  solution.** algo
16370 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20  rithm to employ 
16380 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65  whenever an atte
16390 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69  mpt is made to i
163a0 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71  nsert a non-uniq
163b0 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a  ue.** element..*
163c0 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69  *.** While parsi
163d0 6e 67 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  ng a CREATE TABL
163e0 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45  E or CREATE INDE
163f0 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f  X statement in o
16400 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72  rder to.** gener
16410 61 74 65 20 56 44 42 45 20 63 6f 64 65 20 28 61  ate VDBE code (a
16420 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72  s opposed to par
16430 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72  sing one read fr
16440 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73  om an sqlite_mas
16450 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20  ter.** table as 
16460 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20  part of parsing 
16470 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61  an existing data
16480 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72  base schema), tr
16490 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65  ansient instance
164a0 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  s.** of this str
164b0 75 63 74 75 72 65 20 6d 61 79 20 62 65 20 63 72  ucture may be cr
164c0 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63  eated. In this c
164d0 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e  ase the Index.tn
164e0 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a  um variable is.*
164f0 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
16500 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61  the address of a
16510 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f   VDBE instructio
16520 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73  n, not a databas
16530 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72  e page.** number
16540 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68   (it cannot - th
16550 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  e database page 
16560 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64  is not allocated
16570 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a   until the VDBE.
16580 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78  ** program is ex
16590 65 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e  ecuted). See con
165a0 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77  vertToWithoutRow
165b0 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65  idTable() for de
165c0 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  tails..*/.struct
165d0 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20   Index {.  char 
165e0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
165f0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
16600 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  his index */.  i
16610 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20  16 *aiColumn;   
16620 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
16630 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
16640 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e  d by this index.
16650 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20    1st is 0 */.  
16660 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67  LogEst *aiRowLog
16670 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d  Est;     /* From
16680 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72   ANALYZE: Est. r
16690 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20  ows selected by 
166a0 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
166b0 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20   Table *pTable; 
166c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
166d0 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67   SQL table being
166e0 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68   indexed */.  ch
166f0 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
16700 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
16710 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
16720 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
16730 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
16740 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
16750 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
16760 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64  index associated
16770 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74   with the same t
16780 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  able */.  Schema
16790 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
167a0 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
167b0 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64  taining this ind
167c0 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72  ex */.  u8 *aSor
167d0 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
167e0 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c   /* for each col
167f0 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c  umn: True==DESC,
16800 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20   False==ASC */. 
16810 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a   const char **az
16820 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72  Coll;     /* Arr
16830 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20  ay of collation 
16840 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66  sequence names f
16850 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78  or index */.  Ex
16860 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72  pr *pPartIdxWher
16870 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20  e;     /* WHERE 
16880 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69  clause for parti
16890 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20  al indices */.  
168a0 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78  ExprList *aColEx
168b0 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75  pr;      /* Colu
168c0 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  mn expressions *
168d0 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
168e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
168f0 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69  DB Page containi
16900 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20  ng root of this 
16910 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73  index */.  LogEs
16920 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20  t szIdxRow;     
16930 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
16940 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a   average row siz
16950 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  e in bytes */.  
16960 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20  u16 nKeyCol;    
16970 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
16980 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f  er of columns fo
16990 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f  rming the key */
169a0 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20  .  u16 nColumn; 
169b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
169c0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
169d0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69   stored in the i
169e0 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45  ndex */.  u8 onE
169f0 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20  rror;           
16a00 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20     /* OE_Abort, 
16a10 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65  OE_Ignore, OE_Re
16a20 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e  place, or OE_Non
16a30 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  e */.  unsigned 
16a40 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20  idxType:2;      
16a50 2f 2a 20 30 3a 4e 6f 72 6d 61 6c 20 31 3a 55 4e  /* 0:Normal 1:UN
16a60 49 51 55 45 2c 20 32 3a 50 52 49 4d 41 52 59 20  IQUE, 2:PRIMARY 
16a70 4b 45 59 2c 20 33 3a 49 50 4b 20 2a 2f 0a 20 20  KEY, 3:IPK */.  
16a80 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65  unsigned bUnorde
16a90 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20  red:1;   /* Use 
16aa0 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d  this index for =
16ab0 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20  = or IN queries 
16ac0 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  only */.  unsign
16ad0 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31  ed uniqNotNull:1
16ae0 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e  ;  /* True if UN
16af0 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c  IQUE and NOT NUL
16b00 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e  L for all column
16b10 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  s */.  unsigned 
16b20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20  isResized:1;    
16b30 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a  /* True if resiz
16b40 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68  eIndexObject() h
16b50 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a  as been called *
16b60 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43  /.  unsigned isC
16b70 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20  overing:1;   /* 
16b80 54 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20  True if this is 
16b90 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  a covering index
16ba0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
16bb0 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f  oSkipScan:1;   /
16bc0 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20  * Do not try to 
16bd0 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66  use skip-scan if
16be0 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73 69 67   true */.  unsig
16bf0 6e 65 64 20 68 61 73 53 74 61 74 31 3a 31 3b 20  ned hasStat1:1; 
16c00 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f 67 45      /* aiRowLogE
16c10 73 74 20 76 61 6c 75 65 73 20 63 6f 6d 65 20 66  st values come f
16c20 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
16c30 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
16c40 4e 6f 51 75 65 72 79 3a 31 3b 20 20 20 20 20 2f  NoQuery:1;     /
16c50 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 74 68 69  * Do not use thi
16c60 73 20 69 6e 64 65 78 20 74 6f 20 6f 70 74 69 6d  s index to optim
16c70 69 7a 65 20 71 75 65 72 69 65 73 20 2a 2f 0a 20  ize queries */. 
16c80 20 75 6e 73 69 67 6e 65 64 20 62 41 73 63 4b 65   unsigned bAscKe
16c90 79 42 75 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75  yBug:1;   /* Tru
16ca0 65 20 69 66 20 74 68 65 20 62 62 61 37 62 36 39  e if the bba7b69
16cb0 66 39 38 34 39 62 35 62 66 20 62 75 67 20 61 70  f9849b5bf bug ap
16cc0 70 6c 69 65 73 20 2a 2f 0a 23 69 66 64 65 66 20  plies */.#ifdef 
16cd0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
16ce0 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c  AT4.  int nSampl
16cf0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
16d00 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d  * Number of elem
16d10 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b  ents in aSample[
16d20 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70  ] */.  int nSamp
16d30 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  leCol;          
16d40 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78  /* Size of Index
16d50 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e  Sample.anEq[] an
16d60 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f  d so on */.  tRo
16d70 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20  wcnt *aAvgEq;   
16d80 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65        /* Average
16d90 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20   nEq values for 
16da0 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d  keys not in aSam
16db0 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61  ple */.  IndexSa
16dc0 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20  mple *aSample;  
16dd0 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20    /* Samples of 
16de0 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65  the left-most ke
16df0 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  y */.  tRowcnt *
16e00 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20  aiRowEst;       
16e10 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d  /* Non-logarithm
16e20 69 63 20 73 74 61 74 31 20 64 61 74 61 20 66 6f  ic stat1 data fo
16e30 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  r this index */.
16e40 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73    tRowcnt nRowEs
16e50 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f  t0;        /* No
16e60 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75  n-logarithmic nu
16e70 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
16e80 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e  the index */.#en
16e90 64 69 66 0a 20 20 42 69 74 6d 61 73 6b 20 63 6f  dif.  Bitmask co
16ea0 6c 4e 6f 74 49 64 78 65 64 3b 20 20 20 20 20 2f  lNotIdxed;     /
16eb0 2a 20 30 20 66 6f 72 20 75 6e 69 6e 64 65 78 65  * 0 for unindexe
16ec0 64 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 54 61  d columns in pTa
16ed0 62 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  b */.};../*.** A
16ee0 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
16ef0 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a  r Index.idxType.
16f00 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
16f10 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45 46  E_IDXTYPE_APPDEF
16f20 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65        0   /* Cre
16f30 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54  ated using CREAT
16f40 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69  E INDEX */.#defi
16f50 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
16f60 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31 20  E_UNIQUE      1 
16f70 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20    /* Implements 
16f80 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  a UNIQUE constra
16f90 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  int */.#define S
16fa0 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52  QLITE_IDXTYPE_PR
16fb0 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a  IMARYKEY  2   /*
16fc0 20 49 73 20 74 68 65 20 50 52 49 4d 41 52 59 20   Is the PRIMARY 
16fd0 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c  KEY for the tabl
16fe0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
16ff0 49 54 45 5f 49 44 58 54 59 50 45 5f 49 50 4b 20  ITE_IDXTYPE_IPK 
17000 20 20 20 20 20 20 20 20 33 20 20 20 2f 2a 20 49          3   /* I
17010 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
17020 45 59 20 69 6e 64 65 78 20 2a 2f 0a 0a 2f 2a 20  EY index */../* 
17030 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
17040 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49 4d  ndex X is a PRIM
17050 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f  ARY KEY index */
17060 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61  .#define IsPrima
17070 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28  ryKeyIndex(X)  (
17080 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51  (X)->idxType==SQ
17090 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49  LITE_IDXTYPE_PRI
170a0 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74  MARYKEY)../* Ret
170b0 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65  urn true if inde
170c0 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45 20  x X is a UNIQUE 
170d0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
170e0 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58   IsUniqueIndex(X
170f0 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45  )      ((X)->onE
17100 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a  rror!=OE_None)..
17110 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43  /* The Index.aiC
17120 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61  olumn[] values a
17130 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69  re normally posi
17140 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42  tive integer.  B
17150 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20  ut.** there are 
17160 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61  some negative va
17170 6c 75 65 73 20 74 68 61 74 20 68 61 76 65 20 73  lues that have s
17180 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a  pecial meaning:.
17190 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f  */.#define XN_RO
171a0 57 49 44 20 20 20 20 20 28 2d 31 29 20 20 20 20  WID     (-1)    
171b0 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75   /* Indexed colu
171c0 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  mn is the rowid 
171d0 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58  */.#define XN_EX
171e0 50 52 20 20 20 20 20 20 28 2d 32 29 20 20 20 20  PR      (-2)    
171f0 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75   /* Indexed colu
17200 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73  mn is an express
17210 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61  ion */../*.** Ea
17220 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64  ch sample stored
17230 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   in the sqlite_s
17240 74 61 74 34 20 74 61 62 6c 65 20 69 73 20 72 65  tat4 table is re
17250 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
17260 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73  ory.** using a s
17270 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73  tructure of this
17280 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75   type.  See docu
17290 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65  mentation at the
172a0 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61   top of the.** a
172b0 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20  nalyze.c source 
172c0 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  file for additio
172d0 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
172e0 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
172f0 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20  Sample {.  void 
17300 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  *p;          /* 
17310 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c  Pointer to sampl
17320 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  ed record */.  i
17330 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
17340 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f   /* Size of reco
17350 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  rd in bytes */. 
17360 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20   tRowcnt *anEq; 
17370 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
17380 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
17390 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74  the key equals t
173a0 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
173b0 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20  tRowcnt *anLt;  
173c0 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
173d0 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b   of rows where k
173e0 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ey is less than 
173f0 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
17400 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b   tRowcnt *anDLt;
17410 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
17420 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65  r of distinct ke
17430 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  ys less than thi
17440 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s sample */.};..
17450 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
17460 61 6c 75 65 73 20 74 6f 20 75 73 65 20 77 69 74  alues to use wit
17470 68 69 6e 20 74 68 65 20 66 6c 61 67 73 20 61 72  hin the flags ar
17480 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
17490 33 47 65 74 54 6f 6b 65 6e 28 29 2e 0a 2a 2f 0a  3GetToken()..*/.
174a0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
174b0 4f 4b 45 4e 5f 51 55 4f 54 45 44 20 20 20 20 30  OKEN_QUOTED    0
174c0 78 31 20 2f 2a 20 54 6f 6b 65 6e 20 69 73 20 61  x1 /* Token is a
174d0 20 71 75 6f 74 65 64 20 69 64 65 6e 74 69 66 69   quoted identifi
174e0 65 72 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er. */.#define S
174f0 51 4c 49 54 45 5f 54 4f 4b 45 4e 5f 4b 45 59 57  QLITE_TOKEN_KEYW
17500 4f 52 44 20 20 20 30 78 32 20 2f 2a 20 54 6f 6b  ORD   0x2 /* Tok
17510 65 6e 20 69 73 20 61 20 6b 65 79 77 6f 72 64 2e  en is a keyword.
17520 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
17530 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74  token coming out
17540 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73   of the lexer is
17550 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
17560 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72  ** this structur
17570 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61  e.  Tokens are a
17580 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74  lso used as part
17590 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
175a0 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d  n..**.** The mem
175b0 6f 72 79 20 74 68 61 74 20 22 7a 22 20 70 6f 69  ory that "z" poi
175c0 6e 74 73 20 74 6f 20 69 73 20 6f 77 6e 65 64 20  nts to is owned 
175d0 62 79 20 6f 74 68 65 72 20 6f 62 6a 65 63 74 73  by other objects
175e0 2e 20 20 54 61 6b 65 20 63 61 72 65 0a 2a 2a 20  .  Take care.** 
175f0 74 68 61 74 20 74 68 65 20 6f 77 6e 65 72 20 6f  that the owner o
17600 66 20 74 68 65 20 22 7a 22 20 73 74 72 69 6e 67  f the "z" string
17610 20 64 6f 65 73 20 6e 6f 74 20 64 65 61 6c 6c 6f   does not deallo
17620 63 61 74 65 20 74 68 65 20 73 74 72 69 6e 67 20  cate the string 
17630 62 65 66 6f 72 65 0a 2a 2a 20 74 68 65 20 54 6f  before.** the To
17640 6b 65 6e 20 67 6f 65 73 20 6f 75 74 20 6f 66 20  ken goes out of 
17650 73 63 6f 70 65 21 20 20 56 65 72 79 20 6f 66 74  scope!  Very oft
17660 65 6e 2c 20 74 68 65 20 22 7a 22 20 70 6f 69 6e  en, the "z" poin
17670 74 73 20 74 6f 20 73 6f 6d 65 20 70 6c 61 63 65  ts to some place
17680 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 69 64 64 6c  .** in the middl
17690 65 20 6f 66 20 74 68 65 20 50 61 72 73 65 2e 7a  e of the Parse.z
176a0 53 71 6c 20 74 65 78 74 2e 20 20 42 75 74 20 69  Sql text.  But i
176b0 74 20 6d 69 67 68 74 20 61 6c 73 6f 20 70 6f 69  t might also poi
176c0 6e 74 20 74 6f 20 61 0a 2a 2a 20 73 74 61 74 69  nt to a.** stati
176d0 63 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72  c string..*/.str
176e0 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f  uct Token {.  co
176f0 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  nst char *z;    
17700 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
17710 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c  token.  Not NULL
17720 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a  -terminated! */.
17730 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e    unsigned int n
17740 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  ;    /* Number o
17750 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  f characters in 
17760 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b  this token */.};
17770 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
17780 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
17790 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69  cture contains i
177a0 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65  nformation neede
177b0 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a  d to generate.**
177c0 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45   code for a SELE
177d0 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  CT that contains
177e0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
177f0 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45  ions..**.** If E
17800 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43  xpr.op==TK_AGG_C
17810 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f  OLUMN or TK_AGG_
17820 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78  FUNCTION then Ex
17830 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61  pr.pAggInfo is a
17840 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  .** pointer to t
17850 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
17860 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  The Expr.iColumn
17870 20 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e   field is the in
17880 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66  dex in.** AggInf
17890 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49  o.aCol[] or AggI
178a0 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69  nfo.aFunc[] of i
178b0 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65  nformation neede
178c0 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a  d to generate.**
178d0 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e   code for that n
178e0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e  ode..**.** AggIn
178f0 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20  fo.pGroupBy and 
17900 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45  AggInfo.aFunc.pE
17910 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65  xpr point to fie
17920 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a  lds within the.*
17930 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63  * original Selec
17940 74 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  t structure that
17950 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53   describes the S
17960 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
17970 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64    These.** field
17980 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f  s do not need to
17990 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64   be freed when d
179a0 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20  eallocating the 
179b0 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72  AggInfo structur
179c0 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67  e..*/.struct Agg
179d0 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65  Info {.  u8 dire
179e0 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ctMode;         
179f0 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65   /* Direct rende
17a00 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20  ring mode means 
17a10 74 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74  take data direct
17a20 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ly.             
17a30 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
17a40 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c  from source tabl
17a50 65 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66  es rather than f
17a60 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73  rom accumulators
17a70 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74   */.  u8 useSort
17a80 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a  ingIdx;       /*
17a90 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c   In direct mode,
17aa0 20 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73   reference the s
17ab0 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74  orting index rat
17ac0 68 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  her.            
17ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
17ae0 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65   than the source
17af0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
17b00 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20  sortingIdx;     
17b10 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
17b20 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74  mber of the sort
17b30 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
17b40 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61  nt sortingIdxPTa
17b50 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72  b;     /* Cursor
17b60 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64   number of pseud
17b70 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  o-table */.  int
17b80 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b   nSortingColumn;
17b90 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17ba0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
17bb0 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
17bc0 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d  /.  int mnReg, m
17bd0 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52  xReg;       /* R
17be0 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65 72  ange of register
17bf0 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
17c00 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a  aCol and aFunc *
17c10 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
17c20 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54  roupBy;     /* T
17c30 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75  he group by clau
17c40 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41  se */.  struct A
17c50 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20  ggInfo_col {    
17c60 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* For each colu
17c70 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63  mn used in sourc
17c80 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20  e tables */.    
17c90 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
17ca0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72           /* Sour
17cb0 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
17cc0 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
17cd0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
17ce0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
17cf0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
17d00 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e  .    int iColumn
17d10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
17d20 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77   Column number w
17d30 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65  ithin the source
17d40 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
17d50 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b  t iSorterColumn;
17d60 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e         /* Column
17d70 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73   number in the s
17d80 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
17d90 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20      int iMem;   
17da0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17db0 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  Memory location 
17dc0 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63  that acts as acc
17dd0 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20  umulator */.    
17de0 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
17df0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
17e00 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73  original express
17e10 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c  ion */.  } *aCol
17e20 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b  ;.  int nColumn;
17e30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
17e40 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e  umber of used en
17e50 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20  tries in aCol[] 
17e60 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75  */.  int nAccumu
17e70 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  lator;       /* 
17e80 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
17e90 73 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f  s that show thro
17ea0 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75  ugh to the outpu
17eb0 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
17ed0 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d  Additional colum
17ee0 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79  ns are used only
17ef0 20 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74   as parameters t
17f00 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  o.              
17f10 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61              ** a
17f20 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
17f30 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41  ns */.  struct A
17f40 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20  ggInfo_func {   
17f50 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72  /* For each aggr
17f60 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a  egate function *
17f70 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
17f80 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
17f90 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63  * Expression enc
17fa0 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69  oding the functi
17fb0 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65  on */.    FuncDe
17fc0 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20  f *pFunc;       
17fd0 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67     /* The aggreg
17fe0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70  ate function imp
17ff0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
18000 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
18010 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
18020 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
18030 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
18040 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69  mulator */.    i
18050 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20  nt iDistinct;   
18060 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d          /* Ephem
18070 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20  eral table used 
18080 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49  to enforce DISTI
18090 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e  NCT */.  } *aFun
180a0 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20  c;.  int nFunc; 
180b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
180c0 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
180d0 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a  s in aFunc[] */.
180e0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61  };../*.** The da
180f0 74 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20  tatype ynVar is 
18100 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  a signed integer
18110 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20  , either 16-bit 
18120 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73  or 32-bit..** Us
18130 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62  ually it is 16-b
18140 69 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c  its.  But if SQL
18150 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
18160 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74  _NUMBER is great
18170 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37  er.** than 32767
18180 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65   we have to make
18190 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d   it 32-bit.  16-
181a0 62 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64  bit is preferred
181b0 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75   because.** it u
181c0 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20  ses less memory 
181d0 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65  in the Expr obje
181e0 63 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62  ct, which is a b
181f0 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a  ig memory user.*
18200 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74  * in systems wit
18210 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72  h lots of prepar
18220 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20  ed statements.  
18230 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74  And few applicat
18240 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72  ions.** need mor
18250 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20  e than about 10 
18260 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e  or 20 variables.
18270 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65    But some extre
18280 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a  me users want.**
18290 20 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65   to have prepare
182a0 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  d statements wit
182b0 68 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72  h over 32767 var
182c0 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20  iables, and for 
182d0 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69  them.** the opti
182e0 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20  on is available 
182f0 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  (at compile-time
18300 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  )..*/.#if SQLITE
18310 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
18320 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65  MBER<=32767.type
18330 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23  def i16 ynVar;.#
18340 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74  else.typedef int
18350 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a   ynVar;.#endif..
18360 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20  /*.** Each node 
18370 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
18380 20 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72   in the parse tr
18390 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  ee is an instanc
183a0 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
183b0 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78  ucture..**.** Ex
183c0 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63  pr.op is the opc
183d0 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72  ode. The integer
183e0 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f   parser token co
183f0 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a  des are reused.*
18400 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72  * as opcodes her
18410 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  e. For example, 
18420 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e  the parser defin
18430 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61  es TK_GE to be a
18440 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64  n integer.** cod
18450 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  e representing t
18460 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72  he ">=" operator
18470 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65  . This same inte
18480 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73  ger code is reus
18490 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65  ed.** to represe
184a0 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74  nt the greater-t
184b0 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20  han-or-equal-to 
184c0 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20  operator in the 
184d0 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72  expression.** tr
184e0 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ee..**.** If the
184f0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
18500 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54  n SQL literal (T
18510 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c  K_INTEGER, TK_FL
18520 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a  OAT, TK_BLOB,.**
18530 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20   or TK_STRING), 
18540 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
18550 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78  contains the tex
18560 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74  t of the SQL lit
18570 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20  eral. If.** the 
18580 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
18590 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52  variable (TK_VAR
185a0 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70  IABLE), then Exp
185b0 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
185c0 20 74 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65   the.** variable
185d0 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20   name. Finally, 
185e0 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
185f0 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
18600 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f  tion (TK_FUNCTIO
18610 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72  N),.** then Expr
18620 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
18630 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
18640 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  function..**.** 
18650 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20  Expr.pRight and 
18660 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74  Expr.pLeft are t
18670 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
18680 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73  t subexpressions
18690 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20   of a.** binary 
186a0 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72  operator. Either
186b0 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20   or both may be 
186c0 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  NULL..**.** Expr
186d0 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69  .x.pList is a li
186e0 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  st of arguments 
186f0 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
18700 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
18710 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20  tion,.** a CASE 
18720 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e  expression or an
18730 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   IN expression o
18740 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  f the form "<lhs
18750 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e  > IN (<y>, <z>..
18760 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  .)"..** Expr.x.p
18770 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69  Select is used i
18780 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
18790 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74   is a sub-select
187a0 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f   or an expressio
187b0 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d  n of.** the form
187c0 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45   "<lhs> IN (SELE
187d0 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65  CT ...)". If the
187e0 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69   EP_xIsSelect bi
187f0 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a  t is set in the.
18800 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  ** Expr.flags ma
18810 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e  sk, then Expr.x.
18820 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
18830 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70  . Otherwise, Exp
18840 72 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20  r.x.pList is.** 
18850 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  valid..**.** An 
18860 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
18870 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e  e form ID or ID.
18880 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63  ID refers to a c
18890 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65  olumn in a table
188a0 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78  ..** For such ex
188b0 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e  pressions, Expr.
188c0 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f  op is set to TK_
188d0 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e  COLUMN and Expr.
188e0 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65  iTable is.** the
188f0 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20   integer cursor 
18900 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45  number of a VDBE
18910 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
18920 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61   to that table a
18930 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75  nd.** Expr.iColu
18940 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e  mn is the column
18950 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
18960 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e  specific column.
18970 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72    If the.** expr
18980 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61  ession is used a
18990 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  s a result in an
189a0 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43   aggregate SELEC
189b0 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76  T, then the.** v
189c0 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f  alue is also sto
189d0 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e  red in the Expr.
189e0 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  iAgg column in t
189f0 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20  he aggregate so 
18a00 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62  that.** it can b
18a10 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72  e accessed after
18a20 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20   all aggregates 
18a30 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a  are computed..**
18a40 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
18a50 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f  ssion is an unbo
18a60 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72  und variable mar
18a70 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20  ker (a question 
18a80 6d 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65  mark.** characte
18a90 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69  r '?' in the ori
18aa0 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20  ginal SQL) then 
18ab0 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20  the Expr.iTable 
18ac0 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 0a  holds the index.
18ad0 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ** number for th
18ae0 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a  at variable..**.
18af0 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
18b00 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65  sion is a subque
18b10 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f  ry then Expr.iCo
18b20 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e  lumn holds an in
18b30 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65  teger.** registe
18b40 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e  r number contain
18b50 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ing the result o
18b60 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20  f the subquery. 
18b70 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75   If the.** subqu
18b80 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73  ery gives a cons
18b90 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65  tant result, the
18ba0 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20  n iTable is -1. 
18bb0 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79   If the subquery
18bc0 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66  .** gives a diff
18bd0 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20  erent answer at 
18be0 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20  different times 
18bf0 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  during statement
18c00 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74   processing.** t
18c10 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68  hen iTable is th
18c20 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73  e address of a s
18c30 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63  ubroutine that c
18c40 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71  omputes the subq
18c50 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uery..**.** If t
18c60 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79  he Expr is of ty
18c70 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e  pe OP_Column, an
18c80 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69  d the table it i
18c90 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d  s selecting from
18ca0 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61  .** is a disk ta
18cb0 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e  ble or the "old.
18cc0 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c  *" pseudo-table,
18cd0 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74   then pTab point
18ce0 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72  s to the.** corr
18cf0 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20  esponding table 
18d00 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a  definition..**.*
18d10 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54  * ALLOCATION NOT
18d20 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f  ES:.**.** Expr o
18d30 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61  bjects can use a
18d40 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73   lot of memory s
18d50 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65  pace in database
18d60 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20   schema.  To.** 
18d70 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f  help reduce memo
18d80 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c  ry requirements,
18d90 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78   sometimes an Ex
18da0 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62  pr object will b
18db0 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20  e.** truncated. 
18dc0 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74   And to reduce t
18dd0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
18de0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c  ory allocations,
18df0 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77   sometimes.** tw
18e00 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f  o or more Expr o
18e10 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73  bjects will be s
18e20 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
18e30 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
18e40 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72  ion,.** together
18e50 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65   with Expr.zToke
18e60 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a  n strings..**.**
18e70 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
18e80 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f  ed and EP_TokenO
18e90 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65  nly flags are se
18ea0 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70  t when.** an Exp
18eb0 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e  r object is trun
18ec0 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f  cated.  When EP_
18ed0 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20  Reduced is set, 
18ee0 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20  then all.** the 
18ef0 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63  child Expr objec
18f00 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70  ts in the Expr.p
18f10 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52  Left and Expr.pR
18f20 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a  ight subtrees.**
18f30 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77   are contained w
18f40 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d  ithin the same m
18f50 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
18f60 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72  .  Note, however
18f70 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75  , that.** the su
18f80 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78  btrees in Expr.x
18f90 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78  .pList or Expr.x
18fa0 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77  .pSelect are alw
18fb0 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a  ays separately.*
18fc0 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67  * allocated, reg
18fd0 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
18fe0 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64  er or not EP_Red
18ff0 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a  uced is set..*/.
19000 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20  struct Expr {.  
19010 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
19020 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74         /* Operat
19030 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79  ion performed by
19040 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20   this node */.  
19050 63 68 61 72 20 61 66 66 45 78 70 72 3b 20 20 20  char affExpr;   
19060 20 20 20 20 20 20 20 2f 2a 20 61 66 66 69 6e 69         /* affini
19070 74 79 2c 20 6f 72 20 52 41 49 53 45 20 74 79 70  ty, or RAISE typ
19080 65 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73  e */.  u32 flags
19090 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
190a0 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20   Various flags. 
190b0 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20   EP_* See below 
190c0 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
190d0 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20   char *zToken;  
190e0 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
190f0 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72   value. Zero ter
19100 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75  minated and dequ
19110 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  oted */.    int 
19120 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20  iValue;         
19130 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69     /* Non-negati
19140 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ve integer value
19150 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20   if EP_IntValue 
19160 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20  */.  } u;..  /* 
19170 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f  If the EP_TokenO
19180 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20  nly flag is set 
19190 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
191a0 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
191b0 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
191c0 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
191d0 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
191e0 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
191f0 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
19200 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
19210 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
19220 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
19230 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
19240 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19250 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19260 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19270 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78  *********/..  Ex
19280 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20  pr *pLeft;      
19290 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62       /* Left sub
192a0 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  node */.  Expr *
192b0 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  pRight;         
192c0 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64   /* Right subnod
192d0 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  e */.  union {. 
192e0 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69     ExprList *pLi
192f0 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20  st;     /* op = 
19300 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45  IN, EXISTS, SELE
19310 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49  CT, CASE, FUNCTI
19320 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20  ON, BETWEEN */. 
19330 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
19340 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49  ct;     /* EP_xI
19350 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d  sSelect and op =
19360 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c   IN, EXISTS, SEL
19370 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20  ECT */.  } x;.. 
19380 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65   /* If the EP_Re
19390 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65  duced flag is se
193a0 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
193b0 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
193c0 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
193d0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
193e0 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
193f0 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
19400 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
19410 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
19420 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
19430 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
19440 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
19450 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19460 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19470 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19480 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69  ***********/..#i
19490 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
194a0 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20  R_DEPTH>0.  int 
194b0 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20  nHeight;        
194c0 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20     /* Height of 
194d0 74 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20  the tree headed 
194e0 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a  by this node */.
194f0 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61  #endif.  int iTa
19500 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
19510 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75  /* TK_COLUMN: cu
19520 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
19530 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c  able holding col
19540 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  umn.            
19550 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
19560 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67  TK_REGISTER: reg
19570 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20  ister number.   
19580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19590 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47        ** TK_TRIG
195a0 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30  GER: 1 -> new, 0
195b0 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20   -> old.        
195c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195d0 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a   ** EP_Unlikely:
195e0 20 20 31 33 34 32 31 37 37 32 38 20 74 69 6d 65    134217728 time
195f0 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20  s likelihood.   
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19610 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45        ** TK_SELE
19620 43 54 3a 20 31 73 74 20 72 65 67 69 73 74 65 72  CT: 1st register
19630 20 6f 66 20 72 65 73 75 6c 74 20 76 65 63 74 6f   of result vecto
19640 72 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f  r */.  ynVar iCo
19650 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  lumn;         /*
19660 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75   TK_COLUMN: colu
19670 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f  mn index.  -1 fo
19680 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20  r rowid..       
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196a0 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45    ** TK_VARIABLE
196b0 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65  : variable numbe
196c0 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e  r (always >= 1).
196d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
196e0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
196f0 53 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63  SELECT_COLUMN: c
19700 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73  olumn of the res
19710 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20  ult vector */.  
19720 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20  i16 iAgg;       
19730 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
19740 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66  entry in pAggInf
19750 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61  o->aCol[] or ->a
19760 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20  Func[] */.  i16 
19770 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b  iRightJoinTable;
19780 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d     /* If EP_From
19790 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20  Join, the right 
197a0 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69  table of the joi
197b0 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20  n */.  u8 op2;  
197c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
197d0 20 54 4b 5f 52 45 47 49 53 54 45 52 2f 54 4b 5f   TK_REGISTER/TK_
197e0 54 52 55 54 48 3a 20 6f 72 69 67 69 6e 61 6c 20  TRUTH: original 
197f0 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70  value of Expr.op
19800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19810 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
19820 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75  COLUMN: the valu
19830 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43  e of p5 for OP_C
19840 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20  olumn.          
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19860 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  * TK_AGG_FUNCTIO
19870 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68  N: nesting depth
19880 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70   */.  AggInfo *p
19890 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20  AggInfo;     /* 
198a0 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43  Used by TK_AGG_C
198b0 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47  OLUMN and TK_AGG
198c0 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 75  _FUNCTION */.  u
198d0 6e 69 6f 6e 20 7b 0a 20 20 20 20 54 61 62 6c 65  nion {.    Table
198e0 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
198f0 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
19900 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  Table containing
19910 20 63 6f 6c 75 6d 6e 2e 20 43 61 6e 20 62 65 20   column. Can be 
19920 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 20  NULL.           
19930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19940 2a 2a 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20  ** for a column 
19950 6f 66 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61  of an index on a
19960 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  n expression */.
19970 20 20 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e      Window *pWin
19980 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 50  ;          /* EP
19990 5f 57 69 6e 46 75 6e 63 3a 20 57 69 6e 64 6f 77  _WinFunc: Window
199a0 2f 46 69 6c 74 65 72 20 64 65 66 6e 20 66 6f 72  /Filter defn for
199b0 20 61 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20   a function */. 
199c0 20 20 20 73 74 72 75 63 74 20 7b 20 20 20 20 20     struct {     
199d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
199e0 49 4e 2c 20 54 4b 5f 53 45 4c 45 43 54 2c 20 61  IN, TK_SELECT, a
199f0 6e 64 20 54 4b 5f 45 58 49 53 54 53 20 2a 2f 0a  nd TK_EXISTS */.
19a00 20 20 20 20 20 20 69 6e 74 20 69 41 64 64 72 3b        int iAddr;
19a10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19a20 53 75 62 72 6f 75 74 69 6e 65 20 65 6e 74 72 79  Subroutine entry
19a30 20 61 64 64 72 65 73 73 20 2a 2f 0a 20 20 20 20   address */.    
19a40 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b    int regReturn;
19a50 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
19a60 73 74 65 72 20 75 73 65 64 20 74 6f 20 68 6f 6c  ster used to hol
19a70 64 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73  d return address
19a80 20 2a 2f 0a 20 20 20 20 7d 20 73 75 62 3b 0a 20   */.    } sub;. 
19a90 20 7d 20 79 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20   } y;.};../*.** 
19aa0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
19ab0 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  e the meanings o
19ac0 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78  f bits in the Ex
19ad0 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
19ae0 2a 2a 20 56 61 6c 75 65 20 72 65 73 74 72 69 63  ** Value restric
19af0 74 69 6f 6e 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  tions:.**.**    
19b00 20 20 20 20 20 20 45 50 5f 41 67 67 20 3d 3d 20        EP_Agg == 
19b10 4e 43 5f 48 61 73 41 67 67 20 3d 3d 20 53 46 5f  NC_HasAgg == SF_
19b20 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 20 20 20  HasAgg.**       
19b30 20 20 20 45 50 5f 57 69 6e 20 3d 3d 20 4e 43 5f     EP_Win == NC_
19b40 48 61 73 57 69 6e 0a 2a 2f 0a 23 64 65 66 69 6e  HasWin.*/.#defin
19b50 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30  e EP_FromJoin  0
19b60 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69  x000001 /* Origi
19b70 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e  nates in ON/USIN
19b80 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74 65  G clause of oute
19b90 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
19ba0 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30  e EP_Distinct  0
19bb0 78 30 30 30 30 30 32 20 2f 2a 20 41 67 67 72 65  x000002 /* Aggre
19bc0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69  gate function wi
19bd0 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  th DISTINCT keyw
19be0 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ord */.#define E
19bf0 50 5f 48 61 73 46 75 6e 63 20 20 20 30 78 30 30  P_HasFunc   0x00
19c00 30 30 30 34 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  0004 /* Contains
19c10 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 75 6e   one or more fun
19c20 63 74 69 6f 6e 73 20 6f 66 20 61 6e 79 20 6b 69  ctions of any ki
19c30 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nd */.#define EP
19c40 5f 46 69 78 65 64 43 6f 6c 20 20 30 78 30 30 30  _FixedCol  0x000
19c50 30 30 38 20 2f 2a 20 54 4b 5f 43 6f 6c 75 6d 6e  008 /* TK_Column
19c60 20 77 69 74 68 20 61 20 6b 6e 6f 77 6e 20 66 69   with a known fi
19c70 78 65 64 20 76 61 6c 75 65 20 2a 2f 0a 23 64 65  xed value */.#de
19c80 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20  fine EP_Agg     
19c90 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 43 6f    0x000010 /* Co
19ca0 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
19cb0 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
19cc0 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
19cd0 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30  e EP_VarSelect 0
19ce0 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65  x000020 /* pSele
19cf0 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ct is correlated
19d00 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a  , not constant *
19d10 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c  /.#define EP_Dbl
19d20 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30 20  Quoted 0x000040 
19d30 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f  /* token.z was o
19d40 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e  riginally in "..
19d50 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ." */.#define EP
19d60 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30  _InfixFunc 0x000
19d70 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  080 /* True for 
19d80 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f  an infix functio
19d90 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65  n: LIKE, GLOB, e
19da0 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  tc */.#define EP
19db0 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30  _Collate   0x000
19dc0 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  100 /* Tree cont
19dd0 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54  ains a TK_COLLAT
19de0 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64  E operator */.#d
19df0 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63  efine EP_Generic
19e00 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49     0x000200 /* I
19e10 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72  gnore COLLATE or
19e20 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69   affinity on thi
19e30 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e  s tree */.#defin
19e40 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30  e EP_IntValue  0
19e50 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67  x000400 /* Integ
19e60 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e  er value contain
19e70 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a  ed in u.iValue *
19e80 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73  /.#define EP_xIs
19e90 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30 20  Select 0x000800 
19ea0 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20  /* x.pSelect is 
19eb0 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65  valid (otherwise
19ec0 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a   x.pList is) */.
19ed0 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20  #define EP_Skip 
19ee0 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a       0x001000 /*
19ef0 20 4f 70 65 72 61 74 6f 72 20 64 6f 65 73 20 6e   Operator does n
19f00 6f 74 20 63 6f 6e 74 72 69 62 75 74 65 20 74 6f  ot contribute to
19f10 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 23 64 65   affinity */.#de
19f20 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20  fine EP_Reduced 
19f30 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78    0x002000 /* Ex
19f40 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 52  pr struct EXPR_R
19f50 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73  EDUCEDSIZE bytes
19f60 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
19f70 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78   EP_TokenOnly 0x
19f80 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73  004000 /* Expr s
19f90 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e  truct EXPR_TOKEN
19fa0 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f  ONLYSIZE bytes o
19fb0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
19fc0 50 5f 57 69 6e 20 20 20 20 20 20 20 30 78 30 30  P_Win       0x00
19fd0 38 30 30 30 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  8000 /* Contains
19fe0 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
19ff0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
1a000 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30  MemToken  0x0100
1a010 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71  00 /* Need to sq
1a020 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45 78  lite3DbFree() Ex
1a030 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65  pr.zToken */.#de
1a040 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65  fine EP_NoReduce
1a050 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61    0x020000 /* Ca
1a060 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44  nnot EXPRDUP_RED
1a070 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f  UCE this Expr */
1a080 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69  .#define EP_Unli
1a090 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f  kely  0x040000 /
1a0a0 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20  * unlikely() or 
1a0b0 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e  likelihood() fun
1a0c0 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
1a0d0 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78   EP_ConstFunc 0x
1a0e0 30 38 30 30 30 30 20 2f 2a 20 41 20 53 51 4c 49  080000 /* A SQLI
1a0f0 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
1a100 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e   or _SLOCHNG fun
1a110 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
1a120 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78   EP_CanBeNull 0x
1a130 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62 65  100000 /* Can be
1a140 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f   null despite NO
1a150 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
1a160 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
1a170 53 75 62 71 75 65 72 79 20 20 30 78 32 30 30 30  Subquery  0x2000
1a180 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61  00 /* Tree conta
1a190 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54 20  ins a TK_SELECT 
1a1a0 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66  operator */.#def
1a1b0 69 6e 65 20 45 50 5f 41 6c 69 61 73 20 20 20 20  ine EP_Alias    
1a1c0 20 30 78 34 30 30 30 30 30 20 2f 2a 20 49 73 20   0x400000 /* Is 
1a1d0 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 61 20 72  an alias for a r
1a1e0 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e  esult set column
1a1f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c   */.#define EP_L
1a200 65 61 66 20 20 20 20 20 20 30 78 38 30 30 30 30  eaf      0x80000
1a210 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c  0 /* Expr.pLeft,
1a220 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e 70 53 65   .pRight, .u.pSe
1a230 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f  lect all NULL */
1a240 0a 23 64 65 66 69 6e 65 20 45 50 5f 57 69 6e 46  .#define EP_WinF
1a250 75 6e 63 20 20 30 78 31 30 30 30 30 30 30 20 2f  unc  0x1000000 /
1a260 2a 20 54 4b 5f 46 55 4e 43 54 49 4f 4e 20 77 69  * TK_FUNCTION wi
1a270 74 68 20 45 78 70 72 2e 79 2e 70 57 69 6e 20 73  th Expr.y.pWin s
1a280 65 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  et */.#define EP
1a290 5f 53 75 62 72 74 6e 20 20 20 30 78 32 30 30 30  _Subrtn   0x2000
1a2a0 30 30 30 20 2f 2a 20 55 73 65 73 20 45 78 70 72  000 /* Uses Expr
1a2b0 2e 79 2e 73 75 62 2e 20 54 4b 5f 49 4e 2c 20 5f  .y.sub. TK_IN, _
1a2c0 53 45 4c 45 43 54 2c 20 6f 72 20 5f 45 58 49 53  SELECT, or _EXIS
1a2d0 54 53 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  TS */.#define EP
1a2e0 5f 51 75 6f 74 65 64 20 20 20 30 78 34 30 30 30  _Quoted   0x4000
1a2f0 30 30 30 20 2f 2a 20 54 4b 5f 49 44 20 77 61 73  000 /* TK_ID was
1a300 20 6f 72 69 67 69 6e 61 6c 6c 79 20 71 75 6f 74   originally quot
1a310 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ed */.#define EP
1a320 5f 53 74 61 74 69 63 20 20 20 30 78 38 30 30 30  _Static   0x8000
1a330 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d  000 /* Held in m
1a340 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e  emory not obtain
1a350 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ed from malloc()
1a360 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
1a370 73 54 72 75 65 20 20 30 78 31 30 30 30 30 30 30  sTrue  0x1000000
1a380 30 20 2f 2a 20 41 6c 77 61 79 73 20 68 61 73 20  0 /* Always has 
1a390 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 20 6f 66  boolean value of
1a3a0 20 54 52 55 45 20 2a 2f 0a 23 64 65 66 69 6e 65   TRUE */.#define
1a3b0 20 45 50 5f 49 73 46 61 6c 73 65 20 30 78 32 30   EP_IsFalse 0x20
1a3c0 30 30 30 30 30 30 20 2f 2a 20 41 6c 77 61 79 73  000000 /* Always
1a3d0 20 68 61 73 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   has boolean val
1a3e0 75 65 20 6f 66 20 46 41 4c 53 45 20 2a 2f 0a 0a  ue of FALSE */..
1a3f0 2f 2a 0a 2a 2a 20 54 68 65 20 45 50 5f 50 72 6f  /*.** The EP_Pro
1a400 70 61 67 61 74 65 20 6d 61 73 6b 20 69 73 20 61  pagate mask is a
1a410 20 73 65 74 20 6f 66 20 70 72 6f 70 65 72 74 69   set of properti
1a420 65 73 20 74 68 61 74 20 61 75 74 6f 6d 61 74 69  es that automati
1a430 63 61 6c 6c 79 20 70 72 6f 70 61 67 61 74 65 0a  cally propagate.
1a440 2a 2a 20 75 70 77 61 72 64 73 20 69 6e 74 6f 20  ** upwards into 
1a450 70 61 72 65 6e 74 20 6e 6f 64 65 73 2e 0a 2a 2f  parent nodes..*/
1a460 0a 23 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70  .#define EP_Prop
1a470 61 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74  agate (EP_Collat
1a480 65 7c 45 50 5f 53 75 62 71 75 65 72 79 7c 45 50  e|EP_Subquery|EP
1a490 5f 48 61 73 46 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a  _HasFunc)../*.**
1a4a0 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
1a4b0 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
1a4c0 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
1a4d0 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20   bits in the.** 
1a4e0 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
1a4f0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70  ..*/.#define Exp
1a500 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50  rHasProperty(E,P
1a510 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61  )     (((E)->fla
1a520 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
1a530 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72  ine ExprHasAllPr
1a540 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28  operty(E,P)  (((
1a550 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d  E)->flags&(P))==
1a560 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70  (P)).#define Exp
1a570 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50  rSetProperty(E,P
1a580 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73  )     (E)->flags
1a590 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78  |=(P).#define Ex
1a5a0 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28  prClearProperty(
1a5b0 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67  E,P)   (E)->flag
1a5c0 73 26 3d 7e 28 50 29 0a 23 64 65 66 69 6e 65 20  s&=~(P).#define 
1a5d0 45 78 70 72 41 6c 77 61 79 73 54 72 75 65 28 45  ExprAlwaysTrue(E
1a5e0 29 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73  )   (((E)->flags
1a5f0 26 28 45 50 5f 46 72 6f 6d 4a 6f 69 6e 7c 45 50  &(EP_FromJoin|EP
1a600 5f 49 73 54 72 75 65 29 29 3d 3d 45 50 5f 49 73  _IsTrue))==EP_Is
1a610 54 72 75 65 29 0a 23 64 65 66 69 6e 65 20 45 78  True).#define Ex
1a620 70 72 41 6c 77 61 79 73 46 61 6c 73 65 28 45 29  prAlwaysFalse(E)
1a630 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
1a640 45 50 5f 46 72 6f 6d 4a 6f 69 6e 7c 45 50 5f 49  EP_FromJoin|EP_I
1a650 73 46 61 6c 73 65 29 29 3d 3d 45 50 5f 49 73 46  sFalse))==EP_IsF
1a660 61 6c 73 65 29 0a 0a 2f 2a 20 54 68 65 20 45 78  alse)../* The Ex
1a670 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
1a680 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
1a690 20 66 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f   for Verificatio
1a6a0 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a  n, Validation,.*
1a6b0 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74  * and Accreditat
1a6c0 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f  ion only.  It wo
1a6d0 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74  rks like ExprSet
1a6e0 50 72 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e  Property() durin
1a6f0 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73  g VVA.** process
1a700 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f  es but is a no-o
1a710 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a  p for delivery..
1a720 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1a730 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20  _DEBUG.# define 
1a740 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
1a750 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c  ty(E,P)  (E)->fl
1a760 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23  ags|=(P).#else.#
1a770 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
1a780 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a  VAProperty(E,P).
1a790 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
1a7a0 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
1a7b0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
1a7c0 62 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62  bytes required b
1a7d0 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a  y a normal Expr.
1a7e0 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78  ** struct, an Ex
1a7f0 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
1a800 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
1a810 61 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66  ag set in Expr.f
1a820 6c 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45  lags.** and an E
1a830 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
1a840 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
1a850 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64   flag set..*/.#d
1a860 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53  efine EXPR_FULLS
1a870 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69  IZE           si
1a880 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20  zeof(Expr)      
1a890 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a       /* Full siz
1a8a0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  e */.#define EXP
1a8b0 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20  R_REDUCEDSIZE   
1a8c0 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
1a8d0 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43  pr,iTable)  /* C
1a8e0 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a  ommon features *
1a8f0 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54  /.#define EXPR_T
1a900 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20  OKENONLYSIZE    
1a910 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
1a920 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65  pLeft)   /* Fewe
1a930 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f  r features */../
1a940 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65  *.** Flags passe
1a950 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  d to the sqlite3
1a960 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69  ExprDup() functi
1a970 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64  on. See the head
1a980 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62  er comment.** ab
1a990 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  ove sqlite3ExprD
1a9a0 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73  up() for details
1a9b0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
1a9c0 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20  RDUP_REDUCE     
1a9d0 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55      0x0001  /* U
1a9e0 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65  sed reduced-size
1a9f0 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a   Expr nodes */..
1aa00 2f 2a 0a 2a 2a 20 54 72 75 65 20 69 66 20 74 68  /*.** True if th
1aa10 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 73  e expression pas
1aa20 73 65 64 20 61 73 20 61 6e 20 61 72 67 75 6d 65  sed as an argume
1aa30 6e 74 20 77 61 73 20 61 20 66 75 6e 63 74 69 6f  nt was a functio
1aa40 6e 20 77 69 74 68 0a 2a 2a 20 61 6e 20 4f 56 45  n with.** an OVE
1aa50 52 28 29 20 63 6c 61 75 73 65 20 28 61 20 77 69  R() clause (a wi
1aa60 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 29 2e 0a  ndow function)..
1aa70 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 57 69 6e  */.#define IsWin
1aa80 64 6f 77 46 75 6e 63 28 70 29 20 28 20 5c 0a 20  dowFunc(p) ( \. 
1aa90 20 20 20 45 78 70 72 48 61 73 50 72 6f 70 65 72     ExprHasProper
1aaa0 74 79 28 28 70 29 2c 20 45 50 5f 57 69 6e 46 75  ty((p), EP_WinFu
1aab0 6e 63 29 20 26 26 20 70 2d 3e 79 2e 70 57 69 6e  nc) && p->y.pWin
1aac0 2d 3e 65 46 72 6d 54 79 70 65 21 3d 54 4b 5f 46  ->eFrmType!=TK_F
1aad0 49 4c 54 45 52 20 5c 0a 29 0a 0a 2f 2a 0a 2a 2a  ILTER \.)../*.**
1aae0 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
1aaf0 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78  ssions.  Each ex
1ab00 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74  pression may opt
1ab10 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a  ionally have a.*
1ab20 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72  * name.  An expr
1ab30 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f  /name combinatio
1ab40 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e  n can be used in
1ab50 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73   several ways, s
1ab60 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69  uch.** as the li
1ab70 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49  st of "expr AS I
1ab80 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77  D" fields follow
1ab90 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f  ing a "SELECT" o
1aba0 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74  r in the.** list
1abb0 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20   of "ID = expr" 
1abc0 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41  items in an UPDA
1abd0 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65  TE.  A list of e
1abe0 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a  xpressions can.*
1abf0 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61  * also be used a
1ac00 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  s the argument t
1ac10 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e  o a function, in
1ac20 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
1ac30 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64  a.zName.** field
1ac40 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
1ac50 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74  .** By default t
1ac60 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69  he Expr.zSpan fi
1ac70 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61  eld holds a huma
1ac80 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72  n-readable descr
1ac90 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  iption of.** the
1aca0 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
1acb0 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20   is used in the 
1acc0 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72  generation of er
1acd0 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64  ror messages and
1ace0 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c  .** column label
1acf0 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  s.  In this case
1ad00 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20  , Expr.zSpan is 
1ad10 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65  typically the te
1ad20 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d  xt of a.** colum
1ad30 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20  n expression as 
1ad40 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53  it exists in a S
1ad50 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1ad60 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a    However, if.**
1ad70 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20   the bSpanIsTab 
1ad80 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
1ad90 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c  n zSpan is overl
1ada0 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68  oaded to mean th
1adb0 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65  e name.** of the
1adc0 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69   result column i
1add0 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41  n the form: DATA
1ade0 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  BASE.TABLE.COLUM
1adf0 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a  N.  This later.*
1ae00 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66  * form is used f
1ae10 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69  or name resoluti
1ae20 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46  on with nested F
1ae30 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a  ROM clauses..*/.
1ae40 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20  struct ExprList 
1ae50 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20  {.  int nExpr;  
1ae60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ae70 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69  mber of expressi
1ae80 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ons on the list 
1ae90 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72  */.  struct Expr
1aea0 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46  List_item { /* F
1aeb0 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69  or each expressi
1aec0 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a  on in the list *
1aed0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
1aee0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
1aef0 20 54 68 65 20 70 61 72 73 65 20 74 72 65 65 20   The parse tree 
1af00 66 6f 72 20 74 68 69 73 20 65 78 70 72 65 73 73  for this express
1af10 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ion */.    char 
1af20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
1af30 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f     /* Token asso
1af40 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
1af50 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
1af60 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20     char *zSpan; 
1af70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72             /* Or
1af80 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
1af90 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  he expression */
1afa0 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65  .    u8 sortOrde
1afb0 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
1afc0 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20  1 for DESC or 0 
1afd0 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75  for ASC */.    u
1afe0 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b  nsigned done :1;
1aff0 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67         /* A flag
1b000 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65   to indicate whe
1b010 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  n processing is 
1b020 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20  finished */.    
1b030 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73  unsigned bSpanIs
1b040 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e  Tab :1; /* zSpan
1b050 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e   holds DB.TABLE.
1b060 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e  COLUMN */.    un
1b070 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20  signed reusable 
1b080 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  :1;   /* Constan
1b090 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  t expression is 
1b0a0 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20  reusable */.    
1b0b0 75 6e 73 69 67 6e 65 64 20 62 53 6f 72 74 65 72  unsigned bSorter
1b0c0 52 65 66 20 3a 31 3b 20 2f 2a 20 44 65 66 65 72  Ref :1; /* Defer
1b0d0 20 65 76 61 6c 75 61 74 69 6f 6e 20 75 6e 74 69   evaluation unti
1b0e0 6c 20 61 66 74 65 72 20 73 6f 72 74 69 6e 67 20  l after sorting 
1b0f0 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20  */.    union {. 
1b100 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20       struct {.  
1b110 20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72        u16 iOrder
1b120 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46  ByCol;      /* F
1b130 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c  or ORDER BY, col
1b140 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65  umn number in re
1b150 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20  sult set */.    
1b160 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20      u16 iAlias; 
1b170 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1b180 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41  ex into Parse.aA
1b190 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65  lias[] for zName
1b1a0 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20   */.      } x;. 
1b1b0 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45       int iConstE
1b1c0 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20  xprReg;      /* 
1b1d0 52 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63  Register in whic
1b1e0 68 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20  h Expr value is 
1b1f0 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20  cached */.    } 
1b200 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20  u;.  } a[1];    
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b220 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65 61   One slot for ea
1b230 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  ch expression in
1b240 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
1b250 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1b260 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
1b270 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20  ture can hold a 
1b280 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69  simple list of i
1b290 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73  dentifiers,.** s
1b2a0 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20  uch as the list 
1b2b0 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66  "a,b,c" in the f
1b2c0 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
1b2d0 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  nts:.**.**      
1b2e0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
1b2f0 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b  b,c) VALUES ...;
1b300 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
1b310 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61  INDEX idx ON t(a
1b320 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43  ,b,c);.**      C
1b330 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72  REATE TRIGGER tr
1b340 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45  ig BEFORE UPDATE
1b350 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e   ON t(a,b,c) ...
1b360 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69  ;.**.** The IdLi
1b370 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69  st.a.idx field i
1b380 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20  s used when the 
1b390 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74  IdList represent
1b3a0 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a  s the list of.**
1b3b0 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66   column names af
1b3c0 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  ter a table name
1b3d0 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74   in an INSERT st
1b3e0 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65  atement.  In the
1b3f0 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a   statement.**.**
1b400 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
1b410 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a   t(a,b,c) ....**
1b420 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68  .** If "a" is th
1b430 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e k-th column of
1b440 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e   table "t", then
1b450 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78   IdList.a[0].idx
1b460 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ==k..*/.struct I
1b470 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74  dList {.  struct
1b480 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20   IdList_item {. 
1b490 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
1b4a0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
1b4b0 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a  the identifier *
1b4c0 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20  /.    int idx;  
1b4d0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1b4e0 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61   in some Table.a
1b4f0 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d  Col[] of a colum
1b500 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f  n named zName */
1b510 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e  .  } *a;.  int n
1b520 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  Id;         /* N
1b530 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66  umber of identif
1b540 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  iers on the list
1b550 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1b560 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1b570 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20  cture describes 
1b580 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1b590 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
1b5a0 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74  ement..** Each t
1b5b0 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79  able or subquery
1b5c0 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
1b5d0 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74  use is a separat
1b5e0 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20  e element of.** 
1b5f0 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20  the SrcList.a[] 
1b600 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74  array..**.** Wit
1b610 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f  h the addition o
1b620 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  f multiple datab
1b630 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65  ase support, the
1b640 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1b650 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f  ture.** can also
1b660 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63   be used to desc
1b670 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61  ribe a particula
1b680 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20  r table such as 
1b690 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a  the table that.*
1b6a0 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79  * is modified by
1b6b0 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45   an INSERT, DELE
1b6c0 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74  TE, or UPDATE st
1b6d0 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61  atement.  In sta
1b6e0 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75  ndard SQL,.** su
1b6f0 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20  ch a table must 
1b700 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65  be a simple name
1b710 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51  : ID.  But in SQ
1b720 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20  Lite, the table 
1b730 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64  can.** now be id
1b740 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61  entified by a da
1b750 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64  tabase name, a d
1b760 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62  ot, then the tab
1b770 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a  le name: ID.ID..
1b780 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79  **.** The jointy
1b790 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68  pe starts out sh
1b7a0 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74  owing the join t
1b7b0 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20  ype between the 
1b7c0 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a  current table.**
1b7d0 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61   and the next ta
1b7e0 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e  ble on the list.
1b7f0 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69    The parser bui
1b800 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69  lds the list thi
1b810 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71  s way..** But sq
1b820 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
1b830 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65  tJoinType() late
1b840 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69  r shifts the joi
1b850 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65  ntypes so that e
1b860 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20  ach.** jointype 
1b870 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f  expresses the jo
1b880 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74  in between the t
1b890 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
1b8a0 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a  vious table..**.
1b8b0 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65  ** In the colUse
1b8c0 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67  d field, the hig
1b8d0 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74  h-order bit (bit
1b8e0 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74   63) is set if t
1b8f0 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74  he table.** cont
1b900 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36  ains more than 6
1b910 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68  3 columns and th
1b920 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72  e 64-th or later
1b930 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e   column is used.
1b940 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69  .*/.struct SrcLi
1b950 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b  st {.  int nSrc;
1b960 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b970 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73  r of tables or s
1b980 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65  ubqueries in the
1b990 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1b9a0 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20    u32 nAlloc;   
1b9b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b9c0 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65  entries allocate
1b9d0 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a  d in a[] below *
1b9e0 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69  /.  struct SrcLi
1b9f0 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63  st_item {.    Sc
1ba00 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
1ba10 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69  /* Schema to whi
1ba20 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73 20  ch this item is 
1ba30 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61  fixed */.    cha
1ba40 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f  r *zDatabase;  /
1ba50 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61  * Name of databa
1ba60 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20  se holding this 
1ba70 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61  table */.    cha
1ba80 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
1ba90 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
1baa0 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ble */.    char 
1bab0 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20  *zAlias;     /* 
1bac0 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20  The "B" part of 
1bad0 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73  a "A AS B" phras
1bae0 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65  e.  zName is the
1baf0 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c   "A" */.    Tabl
1bb00 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a  e *pTab;      /*
1bb10 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f   An SQL table co
1bb20 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a  rresponding to z
1bb30 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65  Name */.    Sele
1bb40 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a  ct *pSelect;  /*
1bb50 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   A SELECT statem
1bb60 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63  ent used in plac
1bb70 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d  e of a table nam
1bb80 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64  e */.    int add
1bb90 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64  rFillSub;  /* Ad
1bba0 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74  dress of subrout
1bbb0 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20  ine to manifest 
1bbc0 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20  a subquery */.  
1bbd0 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b    int regReturn;
1bbe0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1bbf0 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61  holding return a
1bc00 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46 69  ddress of addrFi
1bc10 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74  llSub */.    int
1bc20 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f   regResult;    /
1bc30 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64  * Registers hold
1bc40 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61  ing results of a
1bc50 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
1bc60 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20     struct {.    
1bc70 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20    u8 jointype;  
1bc80 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a      /* Type of j
1bc90 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73  oin between this
1bca0 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70   table and the p
1bcb0 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20  revious */.     
1bcc0 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64   unsigned notInd
1bcd0 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54  exed :1;    /* T
1bce0 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
1bcf0 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  a NOT INDEXED cl
1bd00 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ause */.      un
1bd10 73 69 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64  signed isIndexed
1bd20 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  By :1;   /* True
1bd30 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
1bd40 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
1bd50 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  e */.      unsig
1bd60 6e 65 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31  ned isTabFunc :1
1bd70 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
1bd80 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75   table-valued-fu
1bd90 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f  nction syntax */
1bda0 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1bdb0 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b  isCorrelated :1;
1bdc0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62    /* True if sub
1bdd0 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c  -query is correl
1bde0 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ated */.      un
1bdf0 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74  signed viaCorout
1be00 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c  ine :1;  /* Impl
1be10 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d  emented as a co-
1be20 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20  routine */.     
1be30 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75   unsigned isRecu
1be40 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54  rsive :1;   /* T
1be50 72 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76  rue for recursiv
1be60 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57  e reference in W
1be70 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b  ITH */.    } fg;
1be80 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72  .    int iCursor
1be90 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44  ;      /* The VD
1bea0 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  BE cursor number
1beb0 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
1bec0 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
1bed0 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20    Expr *pOn;    
1bee0 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c      /* The ON cl
1bef0 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
1bf00 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55  /.    IdList *pU
1bf10 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55  sing;   /* The U
1bf20 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61  SING clause of a
1bf30 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74   join */.    Bit
1bf40 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f  mask colUsed;  /
1bf50 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73  * Bit N (1<<N) s
1bf60 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f  et if column N o
1bf70 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a  f pTab is used *
1bf80 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
1bf90 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78      char *zIndex
1bfa0 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e  edBy;    /* Iden
1bfb0 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44  tifier from "IND
1bfc0 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e  EXED BY <zIndex>
1bfd0 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  " clause */.    
1bfe0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46 75 6e    ExprList *pFun
1bff0 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65  cArg;  /* Argume
1c000 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c  nts to table-val
1c010 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ued-function */.
1c020 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e      } u1;.    In
1c030 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b 20 20  dex *pIBIndex;  
1c040 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  /* Index structu
1c050 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  re corresponding
1c060 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64 42   to u1.zIndexedB
1c070 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20  y */.  } a[1];  
1c080 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1c090 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
1c0a0 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74   identifier on t
1c0b0 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
1c0c0 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76  *.** Permitted v
1c0d0 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72 63  alues of the Src
1c0e0 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20  List.a.jointype 
1c0f0 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65  field.*/.#define
1c100 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78   JT_INNER     0x
1c110 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b  0001    /* Any k
1c120 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20  ind of inner or 
1c130 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64  cross join */.#d
1c140 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20  efine JT_CROSS  
1c150 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20     0x0002    /* 
1c160 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20  Explicit use of 
1c170 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72  the CROSS keywor
1c180 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d */.#define JT_
1c190 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30 34  NATURAL   0x0004
1c1a0 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
1c1b0 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e  a "natural" join
1c1c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c   */.#define JT_L
1c1d0 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38 20  EFT      0x0008 
1c1e0 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72     /* Left outer
1c1f0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
1c200 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30 78   JT_RIGHT     0x
1c210 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74  0010    /* Right
1c220 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
1c230 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20  define JT_OUTER 
1c240 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a      0x0020    /*
1c250 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79   The "OUTER" key
1c260 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74 20  word is present 
1c270 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52  */.#define JT_ER
1c280 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20 20  ROR     0x0040  
1c290 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20    /* unknown or 
1c2a0 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e  unsupported join
1c2b0 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a   type */.../*.**
1c2c0 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61   Flags appropria
1c2d0 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c  te for the wctrl
1c2e0 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20  Flags parameter 
1c2f0 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65 42  of sqlite3WhereB
1c300 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68  egin().** and th
1c310 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72  e WhereInfo.wctr
1c320 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a  lFlags member..*
1c330 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
1c340 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64  raints (enforced
1c350 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
1c360 2a 2a 20 20 20 20 20 57 48 45 52 45 5f 55 53 45  **     WHERE_USE
1c370 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f 46 69  _LIMIT  == SF_Fi
1c380 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65 66  xedLimit.*/.#def
1c390 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
1c3a0 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30  Y_NORMAL   0x000
1c3b0 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64  0 /* No-op */.#d
1c3c0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
1c3d0 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30  RBY_MIN      0x0
1c3e0 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  001 /* ORDER BY 
1c3f0 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
1c400 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  in() func */.#de
1c410 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
1c420 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30  BY_MAX      0x00
1c430 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  02 /* ORDER BY p
1c440 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61  rocessing for ma
1c450 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  x() func */.#def
1c460 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53  ine WHERE_ONEPAS
1c470 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30  S_DESIRED  0x000
1c480 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20  4 /* Want to do 
1c490 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f  one-pass UPDATE/
1c4a0 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e  DELETE */.#defin
1c4b0 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
1c4c0 4d 55 4c 54 49 52 4f 57 20 30 78 30 30 30 38 20  MULTIROW 0x0008 
1c4d0 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 6f 6b  /* ONEPASS is ok
1c4e0 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72   with multiple r
1c4f0 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ows */.#define W
1c500 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f  HERE_DUPLICATES_
1c510 4f 4b 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20  OK    0x0010 /* 
1c520 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72  Ok to return a r
1c530 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63  ow more than onc
1c540 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
1c550 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53 45 20  RE_OR_SUBCLAUSE 
1c560 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 50 72      0x0020 /* Pr
1c570 6f 63 65 73 73 69 6e 67 20 61 20 73 75 62 2d 57  ocessing a sub-W
1c580 48 45 52 45 20 61 73 20 70 61 72 74 20 6f 66 0a  HERE as part of.
1c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5b0 20 20 20 20 20 20 2a 2a 20 74 68 65 20 4f 52 20        ** the OR 
1c5c0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f  optimization  */
1c5d0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47  .#define WHERE_G
1c5e0 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20  ROUPBY          
1c5f0 30 78 30 30 34 30 20 2f 2a 20 70 4f 72 64 65 72  0x0040 /* pOrder
1c600 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47  By is really a G
1c610 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69  ROUP BY */.#defi
1c620 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1c630 54 42 59 20 20 20 20 20 20 20 30 78 30 30 38 30  TBY       0x0080
1c640 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20   /* pOrderby is 
1c650 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43  really a DISTINC
1c660 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  T clause */.#def
1c670 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44  ine WHERE_WANT_D
1c680 49 53 54 49 4e 43 54 20 20 20 20 30 78 30 31 30  ISTINCT    0x010
1c690 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20  0 /* All output 
1c6a0 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69 73 74  needs to be dist
1c6b0 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  inct */.#define 
1c6c0 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55  WHERE_SORTBYGROU
1c6d0 50 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a  P      0x0200 /*
1c6e0 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33   Support sqlite3
1c6f0 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 29 20  WhereIsSorted() 
1c700 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c710 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20 20 20 20  _SEEK_TABLE     
1c720 20 20 30 78 30 34 30 30 20 2f 2a 20 44 6f 20 6e    0x0400 /* Do n
1c730 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 6f  ot defer seeks o
1c740 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a 2f 0a  n main table */.
1c750 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1c760 44 45 52 42 59 5f 4c 49 4d 49 54 20 20 20 20 30  DERBY_LIMIT    0
1c770 78 30 38 30 30 20 2f 2a 20 4f 52 44 45 52 42 59  x0800 /* ORDERBY
1c780 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20 69 6e  +LIMIT on the in
1c790 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66  ner loop */.#def
1c7a0 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 55  ine WHERE_SEEK_U
1c7b0 4e 49 51 5f 54 41 42 4c 45 20 20 30 78 31 30 30  NIQ_TABLE  0x100
1c7c0 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65  0 /* Do not defe
1c7d0 72 20 73 65 65 6b 73 20 69 66 20 75 6e 69 71 75  r seeks if uniqu
1c7e0 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
1c7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c800 20 20 20 20 30 78 32 30 30 30 20 20 20 20 6e 6f      0x2000    no
1c810 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64  t currently used
1c820 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c830 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20 20 20  E_USE_LIMIT     
1c840 20 20 20 30 78 34 30 30 30 20 2f 2a 20 55 73 65     0x4000 /* Use
1c850 20 74 68 65 20 4c 49 4d 49 54 20 69 6e 20 63 6f   the LIMIT in co
1c860 73 74 20 65 73 74 69 6d 61 74 65 73 20 2a 2f 0a  st estimates */.
1c870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c880 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30          /*     0
1c890 78 38 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72  x8000    not cur
1c8a0 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 0a  rently used */..
1c8b0 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72  /* Allowed retur
1c8c0 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71  n values from sq
1c8d0 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
1c8e0 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  inct().*/.#defin
1c8f0 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1c900 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a  _NOOP      0  /*
1c910 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
1c920 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64  d not used */.#d
1c930 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1c940 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31  INCT_UNIQUE    1
1c950 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74    /* No duplicat
1c960 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  es */.#define WH
1c970 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44  ERE_DISTINCT_ORD
1c980 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c  ERED   2  /* All
1c990 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   duplicates are 
1c9a0 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66  adjacent */.#def
1c9b0 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1c9c0 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20  CT_UNORDERED 3  
1c9d0 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72  /* Duplicates ar
1c9e0 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a  e scattered */..
1c9f0 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74  /*.** A NameCont
1ca00 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  ext defines a co
1ca10 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74  ntext in which t
1ca20 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20  o resolve table 
1ca30 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61  and column.** na
1ca40 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78  mes.  The contex
1ca50 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
1ca60 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28  list of tables (
1ca70 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69  the pSrcList) fi
1ca80 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73  eld and.** a lis
1ca90 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65  t of named expre
1caa0 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20  ssion (pEList). 
1cab0 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65   The named expre
1cac0 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a  ssion list may.*
1cad0 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20  * be NULL.  The 
1cae0 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73  pSrc corresponds
1caf0 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   to the FROM cla
1cb00 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
1cb10 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62  or.** to the tab
1cb20 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  le being operate
1cb30 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20  d on by INSERT, 
1cb40 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54  UPDATE, or DELET
1cb50 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73  E.  The.** pELis
1cb60 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
1cb70 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
1cb80 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20  of a SELECT and 
1cb90 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f  is NULL for.** o
1cba0 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e  ther statements.
1cbb0 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  .**.** NameConte
1cbc0 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65  xts can be neste
1cbd0 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69  d.  When resolvi
1cbe0 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e  ng names, the in
1cbf0 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74  ner-most.** cont
1cc00 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20  ext is searched 
1cc10 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61  first.  If no ma
1cc20 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
1cc30 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20  e next outer.** 
1cc40 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b  context is check
1cc50 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  ed.  If there is
1cc60 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c   still no match,
1cc70 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78   the next contex
1cc80 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e  t.** is checked.
1cc90 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63    This process c
1cca0 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65  ontinues until e
1ccb0 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73  ither a match is
1ccc0 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c   found.** or all
1ccd0 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68   contexts are ch
1cce0 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74  eck.  When a mat
1ccf0 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
1cd00 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a   nRef member of.
1cd10 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63  ** the context c
1cd20 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61  ontaining the ma
1cd30 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  tch is increment
1cd40 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73  ed..**.** Each s
1cd50 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e  ubquery gets a n
1cd60 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20  ew NameContext. 
1cd70 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64   The pNext field
1cd80 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
1cd90 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e  * NameContext in
1cda0 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72   the parent quer
1cdb0 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f  y.  Thus the pro
1cdc0 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67  cess of scanning
1cdd0 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
1cde0 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70  ext list corresp
1cdf0 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e  onds to searchin
1ce00 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73  g through succes
1ce10 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20  sively outer.** 
1ce20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69  subqueries looki
1ce30 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a  ng for a match..
1ce40 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  */.struct NameCo
1ce50 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20  ntext {.  Parse 
1ce60 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f  *pParse;       /
1ce70 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a  * The parser */.
1ce80 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
1ce90 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  ist;   /* One or
1cea0 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65   more tables use
1ceb0 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d  d to resolve nam
1cec0 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  es */.  union {.
1ced0 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45      ExprList *pE
1cee0 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69  List;    /* Opti
1cef0 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73  onal list of res
1cf00 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20  ult-set columns 
1cf10 2a 2f 0a 20 20 20 20 41 67 67 49 6e 66 6f 20 2a  */.    AggInfo *
1cf20 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49  pAggInfo;   /* I
1cf30 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
1cf40 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74   aggregates at t
1cf50 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20  his level */.   
1cf60 20 55 70 73 65 72 74 20 2a 70 55 70 73 65 72 74   Upsert *pUpsert
1cf70 3b 20 20 20 20 20 2f 2a 20 4f 4e 20 43 4f 4e 46  ;     /* ON CONF
1cf80 4c 49 43 54 20 63 6c 61 75 73 65 20 69 6e 66 6f  LICT clause info
1cf90 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 6e 20  rmation from an 
1cfa0 75 70 73 65 72 74 20 2a 2f 0a 20 20 7d 20 75 4e  upsert */.  } uN
1cfb0 43 3b 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  C;.  NameContext
1cfc0 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78   *pNext;  /* Nex
1cfd0 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e  t outer name con
1cfe0 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20  text.  NULL for 
1cff0 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69  outermost */.  i
1d000 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
1d010 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1d020 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20   names resolved 
1d030 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20  by this context 
1d040 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
1d050 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1d060 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e  ber of errors en
1d070 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20  countered while 
1d080 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
1d090 2a 2f 0a 20 20 69 6e 74 20 6e 63 46 6c 61 67 73  */.  int ncFlags
1d0a0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72  ;         /* Zer
1d0b0 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66  o or more NC_* f
1d0c0 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c  lags defined bel
1d0d0 6f 77 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  ow */.  Select *
1d0e0 70 57 69 6e 53 65 6c 65 63 74 3b 20 20 2f 2a 20  pWinSelect;  /* 
1d0f0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1d100 20 66 6f 72 20 61 6e 79 20 77 69 6e 64 6f 77 20   for any window 
1d110 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a  functions */.};.
1d120 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
1d130 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61  alues for the Na
1d140 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61  meContext, ncFla
1d150 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
1d160 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
1d170 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76  s (all checked v
1d180 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
1d190 20 20 20 20 4e 43 5f 48 61 73 41 67 67 20 20 20      NC_HasAgg   
1d1a0 20 3d 3d 20 53 46 5f 48 61 73 41 67 67 20 20 20   == SF_HasAgg   
1d1b0 20 3d 3d 20 45 50 5f 41 67 67 0a 2a 2a 20 20 20   == EP_Agg.**   
1d1c0 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d   NC_MinMaxAgg ==
1d1d0 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d   SF_MinMaxAgg ==
1d1e0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
1d1f0 4d 41 58 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73  MAX.**    NC_Has
1d200 57 69 6e 20 20 20 20 3d 3d 20 45 50 5f 57 69 6e  Win    == EP_Win
1d210 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  .**.*/.#define N
1d220 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 30  C_AllowAgg  0x00
1d230 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  01  /* Aggregate
1d240 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61   functions are a
1d250 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23  llowed here */.#
1d260 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64  define NC_PartId
1d270 78 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 54  x   0x0002  /* T
1d280 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67  rue if resolving
1d290 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78   a partial index
1d2a0 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e   WHERE */.#defin
1d2b0 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30  e NC_IsCheck   0
1d2c0 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69  x0004  /* True i
1d2d0 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  f resolving name
1d2e0 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e  s in a CHECK con
1d2f0 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
1d300 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20  ne NC_InAggFunc 
1d310 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20  0x0008  /* True 
1d320 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67  if analyzing arg
1d330 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67  uments to an agg
1d340 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
1d350 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78   NC_HasAgg    0x
1d360 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  0010  /* One or 
1d370 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
1d380 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f  unctions seen */
1d390 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64 78 45  .#define NC_IdxE
1d3a0 78 70 72 20 20 20 30 78 30 30 32 30 20 20 2f 2a  xpr   0x0020  /*
1d3b0 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
1d3c0 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43 52  ng columns of CR
1d3d0 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64  EATE INDEX */.#d
1d3e0 65 66 69 6e 65 20 4e 43 5f 56 61 72 53 65 6c 65  efine NC_VarSele
1d3f0 63 74 20 30 78 30 30 34 30 20 20 2f 2a 20 41 20  ct 0x0040  /* A 
1d400 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75  correlated subqu
1d410 65 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 65  ery has been see
1d420 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  n */.#define NC_
1d430 55 45 4c 69 73 74 20 20 20 20 30 78 30 30 38 30  UEList    0x0080
1d440 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43    /* True if uNC
1d450 2e 70 45 4c 69 73 74 20 69 73 20 75 73 65 64 20  .pEList is used 
1d460 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 41  */.#define NC_UA
1d470 67 67 49 6e 66 6f 20 20 30 78 30 31 30 30 20 20  ggInfo  0x0100  
1d480 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70  /* True if uNC.p
1d490 41 67 67 49 6e 66 6f 20 69 73 20 75 73 65 64 20  AggInfo is used 
1d4a0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 55  */.#define NC_UU
1d4b0 70 73 65 72 74 20 20 20 30 78 30 32 30 30 20 20  psert   0x0200  
1d4c0 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70  /* True if uNC.p
1d4d0 55 70 73 65 72 74 20 69 73 20 75 73 65 64 20 2a  Upsert is used *
1d4e0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e  /.#define NC_Min
1d4f0 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f  MaxAgg 0x1000  /
1d500 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67  * min/max aggreg
1d510 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20  ates seen.  See 
1d520 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64  note above */.#d
1d530 65 66 69 6e 65 20 4e 43 5f 43 6f 6d 70 6c 65 78  efine NC_Complex
1d540 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20 54 72     0x2000  /* Tr
1d550 75 65 20 69 66 20 61 20 66 75 6e 63 74 69 6f 6e  ue if a function
1d560 20 6f 72 20 73 75 62 71 75 65 72 79 20 73 65 65   or subquery see
1d570 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  n */.#define NC_
1d580 41 6c 6c 6f 77 57 69 6e 20 20 30 78 34 30 30 30  AllowWin  0x4000
1d590 20 20 2f 2a 20 57 69 6e 64 6f 77 20 66 75 6e 63    /* Window func
1d5a0 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65  tions are allowe
1d5b0 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e  d here */.#defin
1d5c0 65 20 4e 43 5f 48 61 73 57 69 6e 20 20 20 20 30  e NC_HasWin    0
1d5d0 78 38 30 30 30 20 20 2f 2a 20 4f 6e 65 20 6f 72  x8000  /* One or
1d5e0 20 6d 6f 72 65 20 77 69 6e 64 6f 77 20 66 75 6e   more window fun
1d5f0 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23  ctions seen */.#
1d600 64 65 66 69 6e 65 20 4e 43 5f 49 73 44 44 4c 20  define NC_IsDDL 
1d610 20 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20 52     0x10000  /* R
1d620 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69  esolving names i
1d630 6e 20 61 20 43 52 45 41 54 45 20 73 74 61 74 65  n a CREATE state
1d640 6d 65 6e 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  ment */../*.** A
1d650 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
1d660 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 62 6a 65  e following obje
1d670 63 74 20 64 65 73 63 72 69 62 65 73 20 61 20 73  ct describes a s
1d680 69 6e 67 6c 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  ingle ON CONFLIC
1d690 54 0a 2a 2a 20 63 6c 61 75 73 65 20 69 6e 20 61  T.** clause in a
1d6a0 6e 20 75 70 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20  n upsert..**.** 
1d6b0 54 68 65 20 70 55 70 73 65 72 74 54 61 72 67 65  The pUpsertTarge
1d6c0 74 20 66 69 65 6c 64 20 69 73 20 6f 6e 6c 79 20  t field is only 
1d6d0 73 65 74 20 69 66 20 74 68 65 20 4f 4e 20 43 4f  set if the ON CO
1d6e0 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 6e  NFLICT clause in
1d6f0 63 6c 75 64 65 73 0a 2a 2a 20 63 6f 6e 66 6c 69  cludes.** confli
1d700 63 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73 65  ct-target clause
1d710 2e 20 20 28 49 6e 20 22 4f 4e 20 43 4f 4e 46 4c  .  (In "ON CONFL
1d720 49 43 54 28 61 2c 62 29 22 20 74 68 65 20 22 28  ICT(a,b)" the "(
1d730 61 2c 62 29 22 20 69 73 20 74 68 65 0a 2a 2a 20  a,b)" is the.** 
1d740 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20  conflict-target 
1d750 63 6c 61 75 73 65 2e 29 20 20 54 68 65 20 70 55  clause.)  The pU
1d760 70 73 65 72 74 54 61 72 67 65 74 57 68 65 72 65  psertTargetWhere
1d770 20 69 73 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c   is the optional
1d780 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65  .** WHERE clause
1d790 20 75 73 65 64 20 74 6f 20 69 64 65 6e 74 69 66   used to identif
1d7a0 79 20 70 61 72 74 69 61 6c 20 75 6e 69 71 75 65  y partial unique
1d7b0 20 69 6e 64 65 78 65 73 2e 0a 2a 2a 0a 2a 2a 20   indexes..**.** 
1d7c0 70 55 70 73 65 72 74 53 65 74 20 69 73 20 74 68  pUpsertSet is th
1d7d0 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e  e list of column
1d7e0 3d 65 78 70 72 20 74 65 72 6d 73 20 6f 66 20 74  =expr terms of t
1d7f0 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
1d800 65 6e 74 2e 20 0a 2a 2a 20 54 68 65 20 70 55 70  ent. .** The pUp
1d810 73 65 72 74 53 65 74 20 66 69 65 6c 64 20 69 73  sertSet field is
1d820 20 4e 55 4c 4c 20 66 6f 72 20 61 20 4f 4e 20 43   NULL for a ON C
1d830 4f 4e 46 4c 49 43 54 20 44 4f 20 4e 4f 54 48 49  ONFLICT DO NOTHI
1d840 4e 47 2e 20 20 54 68 65 0a 2a 2a 20 70 55 70 73  NG.  The.** pUps
1d850 65 72 74 57 68 65 72 65 20 69 73 20 74 68 65 20  ertWhere is the 
1d860 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
1d870 20 74 68 65 20 55 50 44 41 54 45 20 61 6e 64 20   the UPDATE and 
1d880 69 73 20 4e 55 4c 4c 20 69 66 20 74 68 65 0a 2a  is NULL if the.*
1d890 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69  * WHERE clause i
1d8a0 73 20 6f 6d 69 74 74 65 64 2e 0a 2a 2f 0a 73 74  s omitted..*/.st
1d8b0 72 75 63 74 20 55 70 73 65 72 74 20 7b 0a 20 20  ruct Upsert {.  
1d8c0 45 78 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72  ExprList *pUpser
1d8d0 74 54 61 72 67 65 74 3b 20 20 2f 2a 20 4f 70 74  tTarget;  /* Opt
1d8e0 69 6f 6e 61 6c 20 64 65 73 63 72 69 70 74 69 6f  ional descriptio
1d8f0 6e 20 6f 66 20 63 6f 6e 66 6c 69 63 74 69 6e 67  n of conflicting
1d900 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72   index */.  Expr
1d910 20 2a 70 55 70 73 65 72 74 54 61 72 67 65 74 57   *pUpsertTargetW
1d920 68 65 72 65 3b 20 2f 2a 20 57 48 45 52 45 20 63  here; /* WHERE c
1d930 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61  lause for partia
1d940 6c 20 69 6e 64 65 78 20 74 61 72 67 65 74 73 20  l index targets 
1d950 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1d960 55 70 73 65 72 74 53 65 74 3b 20 20 20 20 20 2f  UpsertSet;     /
1d970 2a 20 54 68 65 20 53 45 54 20 63 6c 61 75 73 65  * The SET clause
1d980 20 66 72 6f 6d 20 61 6e 20 4f 4e 20 43 4f 4e 46   from an ON CONF
1d990 4c 49 43 54 20 55 50 44 41 54 45 20 2a 2f 0a 20  LICT UPDATE */. 
1d9a0 20 45 78 70 72 20 2a 70 55 70 73 65 72 74 57 68   Expr *pUpsertWh
1d9b0 65 72 65 3b 20 20 20 20 20 20 20 2f 2a 20 57 48  ere;       /* WH
1d9c0 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 74  ERE clause for t
1d9d0 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55  he ON CONFLICT U
1d9e0 50 44 41 54 45 20 2a 2f 0a 20 20 2f 2a 20 54 68  PDATE */.  /* Th
1d9f0 65 20 66 69 65 6c 64 73 20 61 62 6f 76 65 20 63  e fields above c
1da00 6f 6d 70 72 69 73 65 20 74 68 65 20 70 61 72 73  omprise the pars
1da10 65 20 74 72 65 65 20 66 6f 72 20 74 68 65 20 75  e tree for the u
1da20 70 73 65 72 74 20 63 6c 61 75 73 65 2e 0a 20 20  psert clause..  
1da30 2a 2a 20 54 68 65 20 66 69 65 6c 64 73 20 62 65  ** The fields be
1da40 6c 6f 77 20 61 72 65 20 75 73 65 64 20 74 6f 20  low are used to 
1da50 74 72 61 6e 73 66 65 72 20 69 6e 66 6f 72 6d 61  transfer informa
1da60 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 49 4e  tion from the IN
1da70 53 45 52 54 0a 20 20 2a 2a 20 70 72 6f 63 65 73  SERT.  ** proces
1da80 73 69 6e 67 20 64 6f 77 6e 20 69 6e 74 6f 20 74  sing down into t
1da90 68 65 20 55 50 44 41 54 45 20 70 72 6f 63 65 73  he UPDATE proces
1daa0 73 69 6e 67 20 77 68 69 6c 65 20 67 65 6e 65 72  sing while gener
1dab0 61 74 69 6e 67 20 63 6f 64 65 2e 0a 20 20 2a 2a  ating code..  **
1dac0 20 55 70 73 65 72 74 20 6f 77 6e 73 20 74 68 65   Upsert owns the
1dad0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 65   memory allocate
1dae0 64 20 61 62 6f 76 65 2c 20 62 75 74 20 6e 6f 74  d above, but not
1daf0 20 74 68 65 20 6d 65 6d 6f 72 79 20 62 65 6c 6f   the memory belo
1db00 77 2e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  w. */.  Index *p
1db10 55 70 73 65 72 74 49 64 78 3b 20 20 20 20 20 20  UpsertIdx;      
1db20 20 20 2f 2a 20 43 6f 6e 73 74 72 61 69 6e 74 20    /* Constraint 
1db30 74 68 61 74 20 70 55 70 73 65 72 74 54 61 72 67  that pUpsertTarg
1db40 65 74 20 69 64 65 6e 74 69 66 69 65 73 20 2a 2f  et identifies */
1db50 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 55 70 73  .  SrcList *pUps
1db60 65 72 74 53 72 63 3b 20 20 20 20 20 20 2f 2a 20  ertSrc;      /* 
1db70 54 61 62 6c 65 20 74 6f 20 62 65 20 75 70 64 61  Table to be upda
1db80 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  ted */.  int reg
1db90 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20  Data;           
1dba0 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69     /* First regi
1dbb0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 61 72 72  ster holding arr
1dbc0 61 79 20 6f 66 20 56 41 4c 55 45 53 20 2a 2f 0a  ay of VALUES */.
1dbd0 20 20 69 6e 74 20 69 44 61 74 61 43 75 72 3b 20    int iDataCur; 
1dbe0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1dbf0 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
1dc00 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74   cursor */.  int
1dc10 20 69 49 64 78 43 75 72 3b 20 20 20 20 20 20 20   iIdxCur;       
1dc20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1dc30 6f 66 20 74 68 65 20 66 69 72 73 74 20 69 6e 64  of the first ind
1dc40 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a 7d 3b 0a  ex cursor */.};.
1dc50 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1dc60 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
1dc70 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
1dc80 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72  ntains all infor
1dc90 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64  mation.** needed
1dca0 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64   to generate cod
1dcb0 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53  e for a single S
1dcc0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1dcd0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20 68  .**.** See the h
1dce0 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 6f 6e  eader comment on
1dcf0 20 74 68 65 20 63 6f 6d 70 75 74 65 4c 69 6d 69   the computeLimi
1dd00 74 52 65 67 69 73 74 65 72 73 28 29 20 72 6f 75  tRegisters() rou
1dd10 74 69 6e 65 20 66 6f 72 20 61 0a 2a 2a 20 64 65  tine for a.** de
1dd20 74 61 69 6c 65 64 20 64 65 73 63 72 69 70 74 69  tailed descripti
1dd30 6f 6e 20 6f 66 20 74 68 65 20 6d 65 61 6e 69 6e  on of the meanin
1dd40 67 20 6f 66 20 74 68 65 20 69 4c 69 6d 69 74 20  g of the iLimit 
1dd50 61 6e 64 20 69 4f 66 66 73 65 74 20 66 69 65 6c  and iOffset fiel
1dd60 64 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70  ds..**.** addrOp
1dd70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73  enEphm[] entries
1dd80 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64   contain the add
1dd90 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45  ress of OP_OpenE
1dda0 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73  phemeral opcodes
1ddb0 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65  ..** These addre
1ddc0 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f  sses must be sto
1ddd0 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63  red so that we c
1dde0 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66  an go back and f
1ddf0 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34  ill in.** the P4
1de00 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20  _KEYINFO and P2 
1de10 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72  parameters later
1de20 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b  .  Neither the K
1de30 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68  eyInfo nor.** th
1de40 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1de50 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65  mns in P2 can be
1de60 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65   computed at the
1de70 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73   same time.** as
1de80 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d   the OP_OpenEphm
1de90 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
1dea0 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f  coded because no
1deb0 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f  t.** enough info
1dec0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
1ded0 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  e compound query
1dee0 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61   is known at tha
1def0 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20  t point..** The 
1df00 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
1df10 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20  OpenTran[0] and 
1df20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [1] contains col
1df30 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
1df40 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75  .** for the resu
1df50 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79  lt set.  The Key
1df60 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
1df70 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e  nEphm[2] contain
1df80 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73  s collating.** s
1df90 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65  equences for the
1dfa0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1dfb0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
1dfc0 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20  ct {.  ExprList 
1dfd0 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a  *pEList;      /*
1dfe0 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74   The fields of t
1dff0 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75  he result */.  u
1e000 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
1e010 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a        /* One of:
1e020 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c   TK_UNION TK_ALL
1e030 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b   TK_INTERSECT TK
1e040 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67  _EXCEPT */.  Log
1e050 45 73 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20  Est nSelectRow; 
1e060 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
1e070 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   number of resul
1e080 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20  t rows */.  u32 
1e090 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20  selFlags;       
1e0a0 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46     /* Various SF
1e0b0 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  _* values */.  i
1e0c0 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73  nt iLimit, iOffs
1e0d0 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20  et;   /* Memory 
1e0e0 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e  registers holdin
1e0f0 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54  g LIMIT & OFFSET
1e100 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 75   counters */.  u
1e110 33 32 20 73 65 6c 49 64 3b 20 20 20 20 20 20 20  32 selId;       
1e120 20 20 20 20 20 20 2f 2a 20 55 6e 69 71 75 65 20        /* Unique 
1e130 69 64 65 6e 74 69 66 69 65 72 20 6e 75 6d 62 65  identifier numbe
1e140 72 20 66 6f 72 20 74 68 69 73 20 53 45 4c 45 43  r for this SELEC
1e150 54 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4f  T */.  int addrO
1e160 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a  penEphm[2];   /*
1e170 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70   OP_OpenEphem op
1e180 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f  codes related to
1e190 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a   this select */.
1e1a0 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b    SrcList *pSrc;
1e1b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1e1c0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
1e1d0 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
1e1e0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
1e1f0 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20  HERE clause */. 
1e200 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
1e210 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47  pBy;    /* The G
1e220 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a  ROUP BY clause *
1e230 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e  /.  Expr *pHavin
1e240 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  g;         /* Th
1e250 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  e HAVING clause 
1e260 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1e270 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54  OrderBy;    /* T
1e280 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1e290 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  se */.  Select *
1e2a0 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f  pPrior;        /
1e2b0 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69  * Prior select i
1e2c0 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  n a compound sel
1e2d0 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  ect statement */
1e2e0 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74  .  Select *pNext
1e2f0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
1e300 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20  t select to the 
1e310 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  left in a compou
1e320 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c  nd */.  Expr *pL
1e330 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f  imit;          /
1e340 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  * LIMIT expressi
1e350 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e  on. NULL means n
1e360 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69  ot used. */.  Wi
1e370 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20  th *pWith;      
1e380 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c 61       /* WITH cla
1e390 75 73 65 20 61 74 74 61 63 68 65 64 20 74 6f 20  use attached to 
1e3a0 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72 20  this select. Or 
1e3b0 4e 55 4c 4c 2e 20 2a 2f 0a 23 69 66 6e 64 65 66  NULL. */.#ifndef
1e3c0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e   SQLITE_OMIT_WIN
1e3d0 44 4f 57 46 55 4e 43 0a 20 20 57 69 6e 64 6f 77  DOWFUNC.  Window
1e3e0 20 2a 70 57 69 6e 3b 20 20 20 20 20 20 20 20 20   *pWin;         
1e3f0 20 2f 2a 20 4c 69 73 74 20 6f 66 20 77 69 6e 64   /* List of wind
1e400 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  ow functions */.
1e410 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 44 65    Window *pWinDe
1e420 66 6e 3b 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  fn;      /* List
1e430 20 6f 66 20 6e 61 6d 65 64 20 77 69 6e 64 6f 77   of named window
1e440 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 2a 2f 0a   definitions */.
1e450 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
1e460 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
1e470 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c  for Select.selFl
1e480 61 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70  ags.  The "SF" p
1e490 72 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72  refix stands for
1e4a0 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67  .** "Select Flag
1e4b0 22 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63  "..**.** Value c
1e4c0 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20  onstraints (all 
1e4d0 63 68 65 63 6b 65 64 20 76 69 61 20 61 73 73 65  checked via asse
1e4e0 72 74 28 29 29 0a 2a 2a 20 20 20 20 20 53 46 5f  rt()).**     SF_
1e4f0 48 61 73 41 67 67 20 20 20 20 20 3d 3d 20 4e 43  HasAgg     == NC
1e500 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 20 53  _HasAgg.**     S
1e510 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 3d 3d 20  F_MinMaxAgg  == 
1e520 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20  NC_MinMaxAgg    
1e530 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f   == SQLITE_FUNC_
1e540 4d 49 4e 4d 41 58 0a 2a 2a 20 20 20 20 20 53 46  MINMAX.**     SF
1e550 5f 46 69 78 65 64 4c 69 6d 69 74 20 3d 3d 20 57  _FixedLimit == W
1e560 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a  HERE_USE_LIMIT.*
1e570 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73  /.#define SF_Dis
1e580 74 69 6e 63 74 20 20 20 20 20 20 20 30 78 30 30  tinct       0x00
1e590 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73  001  /* Output s
1e5a0 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43  hould be DISTINC
1e5b0 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  T */.#define SF_
1e5c0 41 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20 30  All            0
1e5d0 78 30 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75  x00002  /* Inclu
1e5e0 64 65 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77  des the ALL keyw
1e5f0 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ord */.#define S
1e600 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20  F_Resolved      
1e610 20 30 78 30 30 30 30 34 20 20 2f 2a 20 49 64 65   0x00004  /* Ide
1e620 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65  ntifiers have be
1e630 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23  en resolved */.#
1e640 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67  define SF_Aggreg
1e650 61 74 65 20 20 20 20 20 20 30 78 30 30 30 30 38  ate      0x00008
1e660 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67    /* Contains ag
1e670 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61  g functions or a
1e680 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65   GROUP BY */.#de
1e690 66 69 6e 65 20 53 46 5f 48 61 73 41 67 67 20 20  fine SF_HasAgg  
1e6a0 20 20 20 20 20 20 20 30 78 30 30 30 31 30 20 20         0x00010  
1e6b0 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72  /* Contains aggr
1e6c0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
1e6d0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73  */.#define SF_Us
1e6e0 65 73 45 70 68 65 6d 65 72 61 6c 20 20 30 78 30  esEphemeral  0x0
1e6f0 30 30 32 30 20 20 2f 2a 20 55 73 65 73 20 74 68  0020  /* Uses th
1e700 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  e OpenEphemeral 
1e710 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e  opcode */.#defin
1e720 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20  e SF_Expanded   
1e730 20 20 20 20 30 78 30 30 30 34 30 20 20 2f 2a 20      0x00040  /* 
1e740 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
1e750 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20  and() called on 
1e760 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  this */.#define 
1e770 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20  SF_HasTypeInfo  
1e780 20 20 30 78 30 30 30 38 30 20 20 2f 2a 20 46 52    0x00080  /* FR
1e790 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61  OM subqueries ha
1e7a0 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74  ve Table metadat
1e7b0 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  a */.#define SF_
1e7c0 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 30  Compound       0
1e7d0 78 30 30 31 30 30 20 20 2f 2a 20 50 61 72 74 20  x00100  /* Part 
1e7e0 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75  of a compound qu
1e7f0 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ery */.#define S
1e800 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20  F_Values        
1e810 20 30 78 30 30 32 30 30 20 20 2f 2a 20 53 79 6e   0x00200  /* Syn
1e820 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41  thesized from VA
1e830 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23  LUES clause */.#
1e840 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56  define SF_MultiV
1e850 61 6c 75 65 20 20 20 20 20 30 78 30 30 34 30 30  alue     0x00400
1e860 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55    /* Single VALU
1e870 45 53 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c  ES term with mul
1e880 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64  tiple rows */.#d
1e890 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46  efine SF_NestedF
1e8a0 72 6f 6d 20 20 20 20 20 30 78 30 30 38 30 30 20  rom     0x00800 
1e8b0 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61   /* Part of a pa
1e8c0 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d  renthesized FROM
1e8d0 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
1e8e0 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20  ne SF_MinMaxAgg 
1e8f0 20 20 20 20 20 30 78 30 31 30 30 30 20 20 2f 2a       0x01000  /*
1e900 20 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61   Aggregate conta
1e910 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d  ining min() or m
1e920 61 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ax() */.#define 
1e930 53 46 5f 52 65 63 75 72 73 69 76 65 20 20 20 20  SF_Recursive    
1e940 20 20 30 78 30 32 30 30 30 20 20 2f 2a 20 54 68    0x02000  /* Th
1e950 65 20 72 65 63 75 72 73 69 76 65 20 70 61 72 74  e recursive part
1e960 20 6f 66 20 61 20 72 65 63 75 72 73 69 76 65 20   of a recursive 
1e970 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTE */.#define S
1e980 46 5f 46 69 78 65 64 4c 69 6d 69 74 20 20 20 20  F_FixedLimit    
1e990 20 30 78 30 34 30 30 30 20 20 2f 2a 20 6e 53 65   0x04000  /* nSe
1e9a0 6c 65 63 74 52 6f 77 20 73 65 74 20 62 79 20 61  lectRow set by a
1e9b0 20 63 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20   constant LIMIT 
1e9c0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61  */.#define SF_Ma
1e9d0 79 62 65 43 6f 6e 76 65 72 74 20 20 20 30 78 30  ybeConvert   0x0
1e9e0 38 30 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f  8000  /* Need co
1e9f0 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c  nvertCompoundSel
1ea00 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20  ectToSubquery() 
1ea10 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f  */.#define SF_Co
1ea20 6e 76 65 72 74 65 64 20 20 20 20 20 20 30 78 31  nverted      0x1
1ea30 30 30 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76  0000  /* By conv
1ea40 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
1ea50 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
1ea60 0a 23 64 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c  .#define SF_Incl
1ea70 75 64 65 48 69 64 64 65 6e 20 20 30 78 32 30 30  udeHidden  0x200
1ea80 30 30 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68  00  /* Include h
1ea90 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e  idden columns in
1eaa0 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69   output */.#defi
1eab0 6e 65 20 53 46 5f 43 6f 6d 70 6c 65 78 52 65 73  ne SF_ComplexRes
1eac0 75 6c 74 20 20 30 78 34 30 30 30 30 20 20 2f 2a  ult  0x40000  /*
1ead0 20 52 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73   Result contains
1eae0 20 73 75 62 71 75 65 72 79 20 6f 72 20 66 75 6e   subquery or fun
1eaf0 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
1eb00 20 53 46 5f 57 68 65 72 65 42 65 67 69 6e 20 20   SF_WhereBegin  
1eb10 20 20 20 30 78 38 30 30 30 30 20 20 2f 2a 20 52     0x80000  /* R
1eb20 65 61 6c 6c 79 20 61 20 57 68 65 72 65 42 65 67  eally a WhereBeg
1eb30 69 6e 28 29 20 63 61 6c 6c 2e 20 20 44 65 62 75  in() call.  Debu
1eb40 67 20 4f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  g Only */../*.**
1eb50 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   The results of 
1eb60 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20  a SELECT can be 
1eb70 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73  distributed in s
1eb80 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20  everal ways, as 
1eb90 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e  defined.** by on
1eba0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1ebb0 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20  ng macros.  The 
1ebc0 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61  "SRT" prefix mea
1ebd0 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c  ns "SELECT Resul
1ebe0 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a  t.** Type"..**.*
1ebf0 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20  *     SRT_Union 
1ec00 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
1ec10 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20  lts as a key in 
1ec20 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  a temporary inde
1ec30 78 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  x.**            
1ec40 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66           identif
1ec50 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53  ied by pDest->iS
1ec60 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
1ec70 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
1ec80 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20   Remove results 
1ec90 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61  from the tempora
1eca0 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e  ry index pDest->
1ecb0 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
1ecc0 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20     SRT_Exists   
1ecd0 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20     Store a 1 in 
1ece0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73  memory cell pDes
1ecf0 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68  t->iSDParm if th
1ed00 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20  e result.**     
1ed10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  set is not empty
1ed30 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1ed40 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f  Discard     Thro
1ed50 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77  w the results aw
1ed60 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65  ay.  This is use
1ed70 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20  d by SELECT.**  
1ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed90 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69     statements wi
1eda0 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68  thin triggers wh
1edb0 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65  ose only purpose
1edc0 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   is.**          
1edd0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
1ede0 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66  ide-effects of f
1edf0 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
1ee00 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  All of the above
1ee10 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e   are free to ign
1ee20 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20  ore their ORDER 
1ee30 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65  BY clause. Those
1ee40 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20   that.** follow 
1ee50 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f  must honor the O
1ee60 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1ee70 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75  **.**     SRT_Ou
1ee80 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61  tput      Genera
1ee90 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70  te a row of outp
1eea0 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50  ut (using the OP
1eeb0 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20  _ResultRow.**   
1eec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eed0 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61    opcode) for ea
1eee0 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65  ch row in the re
1eef0 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  sult set..**.** 
1ef00 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20      SRT_Mem     
1ef10 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69      Only valid i
1ef20 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
1ef30 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
1ef40 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ef50 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68          Store th
1ef60 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f  e first column o
1ef70 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75  f the first resu
1ef80 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20  lt row.**       
1ef90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1efa0 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
1efb0 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62  >iSDParm then ab
1efc0 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a  andon the rest.*
1efd0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1efe0 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65        of the que
1eff0 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e  ry.  This destin
1f000 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c  ation implies "L
1f010 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20  IMIT 1"..**.**  
1f020 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20     SRT_Set      
1f030 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75     The result mu
1f040 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63  st be a single c
1f050 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61  olumn.  Store ea
1f060 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ch.**           
1f070 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66            row of
1f080 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b   result as the k
1f090 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73  ey in table pDes
1f0a0 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1f0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0c0 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66     Apply the aff
1f0d0 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66  inity pDest->aff
1f0e0 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72  Sdst before stor
1f0f0 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ing.**          
1f100 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1f110 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70  ts.  Used to imp
1f120 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45  lement "IN (SELE
1f130 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20  CT ...)"..**.** 
1f140 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62      SRT_EphemTab
1f150 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65      Create an te
1f160 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
1f170 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64  est->iSDParm and
1f180 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20   store.**       
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1f1a0 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20  e result there. 
1f1b0 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65  The cursor is le
1f1c0 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a  ft open after.**
1f1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1e0 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20       returning. 
1f1f0 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
1f200 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74  T_Table except t
1f210 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  hat.**          
1f220 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
1f230 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73  destination uses
1f240 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1f250 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20  l to create.**  
1f260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f270 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72     the table fir
1f280 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  st..**.**     SR
1f290 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65  T_Coroutine   Ge
1f2a0 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74  nerate a co-rout
1f2b0 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73  ine that returns
1f2c0 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a   a new row of.**
1f2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2e0 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63       results eac
1f2f0 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76  h time it is inv
1f300 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79  oked.  The entry
1f310 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20   point.**       
1f320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
1f330 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20   the co-routine 
1f340 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
1f350 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
1f360 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20  Parm.**         
1f370 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20              and 
1f380 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69  the result row i
1f390 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73  s stored in pDes
1f3a0 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65  t->nDest registe
1f3b0 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  rs.**           
1f3c0 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69            starti
1f3d0 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69  ng with pDest->i
1f3e0 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Sdst..**.**     
1f3f0 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
1f400 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1f410 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1f420 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1f430 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f  .**     SRT_Fifo
1f440 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20          This is 
1f450 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61  like SRT_EphemTa
1f460 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  b except that th
1f470 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20  e table.**      
1f480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1f490 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72  s assumed to alr
1f4a0 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53  eady be open.  S
1f4b0 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20  RT_Fifo has.**  
1f4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4d0 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61     the additiona
1f4e0 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65  l property of be
1f4f0 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f  ing able to igno
1f500 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
1f510 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52            the OR
1f520 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1f530 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1f540 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72  tFifo    Store r
1f550 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70  esults in a temp
1f560 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1f570 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1f580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f590 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20     But also use 
1f5a0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1f5b0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
1f5c0 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   as.**          
1f5d0 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63             a rec
1f5e0 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72  ord of all prior
1f5f0 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e   results and ign
1f600 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74  ore any duplicat
1f610 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1f620 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20           rows.  
1f630 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69  Name means:  "Di
1f640 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a  stinct Fifo"..**
1f650 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75  .**     SRT_Queu
1f660 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  e       Store re
1f670 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
1f680 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
1f690 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a  SDParm (really.*
1f6a0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f6b0 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e        an index).
1f6c0 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65    Append a seque
1f6d0 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68  nce number so th
1f6e0 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a  at all entries.*
1f6f0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f700 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e        are distin
1f710 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  ct..**.**     SR
1f720 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74  T_DistQueue   St
1f730 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
1f740 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44  riority queue pD
1f750 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c  est->iSDParm onl
1f760 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  y if.**         
1f770 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1f780 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20  same record has 
1f790 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65  never been store
1f7a0 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a  d before.  The.*
1f7b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f7c0 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70        index at p
1f7d0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
1f7e0 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73  hold all prior s
1f7f0 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tores..*/.#defin
1f800 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20  e SRT_Union     
1f810 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72     1  /* Store r
1f820 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e  esult as keys in
1f830 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
1f840 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20  fine SRT_Except 
1f850 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f        2  /* Remo
1f860 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61  ve result from a
1f870 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a   UNION index */.
1f880 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73  #define SRT_Exis
1f890 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53  ts       3  /* S
1f8a0 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65  tore 1 if the re
1f8b0 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74  sult is not empt
1f8c0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
1f8d0 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20  _Discard      4 
1f8e0 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20   /* Do not save 
1f8f0 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77  the results anyw
1f900 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
1f910 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20  SRT_Fifo        
1f920 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   5  /* Store res
1f930 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
1f940 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
1f950 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wid */.#define S
1f960 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20  RT_DistFifo     
1f970 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46  6  /* Like SRT_F
1f980 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20  ifo, but unique 
1f990 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a  results only */.
1f9a0 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75  #define SRT_Queu
1f9b0 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53  e        7  /* S
1f9c0 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
1f9d0 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69  n queue */.#defi
1f9e0 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65  ne SRT_DistQueue
1f9f0 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53      8  /* Like S
1fa00 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e  RT_Queue, but un
1fa10 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
1fa20 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44  y */../* The ORD
1fa30 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
1fa40 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20  ignored for all 
1fa50 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a  of the above */.
1fa60 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c  #define Ignorabl
1fa70 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d  eOrderby(X) ((X-
1fa80 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73  >eDest)<=SRT_Dis
1fa90 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65  tQueue)..#define
1faa0 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
1fab0 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65    9  /* Output e
1fac0 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  ach row of resul
1fad0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
1fae0 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20  _Mem         10 
1faf0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1fb00 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   in a memory cel
1fb10 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  l */.#define SRT
1fb20 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20  _Set         11 
1fb30 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1fb40 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  s as keys in an 
1fb50 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1fb60 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20   SRT_EphemTab   
1fb70 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74   12  /* Create t
1fb80 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64  ransient tab and
1fb90 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f   store like SRT_
1fba0 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Table */.#define
1fbb0 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
1fbc0 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65   13  /* Generate
1fbd0 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
1fbe0 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
1fbf0 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20  ne SRT_Table    
1fc00 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20     14  /* Store 
1fc10 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
1fc20 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
1fc30 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   rowid */../*.**
1fc40 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1fc50 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63  this object desc
1fc60 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70  ribes where to p
1fc70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ut of the result
1fc80 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54  s of.** a SELECT
1fc90 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
1fca0 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
1fcb0 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20   {.  u8 eDest;  
1fcc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77            /* How
1fcd0 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74   to dispose of t
1fce0 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20  he results.  On 
1fcf0 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20  of SRT_* above. 
1fd00 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d  */.  int iSDParm
1fd10 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70  ;         /* A p
1fd20 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79  arameter used by
1fd30 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f   the eDest dispo
1fd40 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  sal method */.  
1fd50 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20  int iSdst;      
1fd60 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
1fd70 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75  ister where resu
1fd80 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20  lts are written 
1fd90 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20  */.  int nSdst; 
1fda0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1fdb0 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
1fdc0 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
1fdd0 63 68 61 72 20 2a 7a 41 66 66 53 64 73 74 3b 20  char *zAffSdst; 
1fde0 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
1fdf0 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74   used when eDest
1fe00 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 45  ==SRT_Set */.  E
1fe10 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
1fe20 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d  y;  /* Key colum
1fe30 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65  ns for SRT_Queue
1fe40 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65   and SRT_DistQue
1fe50 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ue */.};../*.** 
1fe60 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65  During code gene
1fe70 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d  ration of statem
1fe80 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73  ents that do ins
1fe90 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e  erts into AUTOIN
1fea0 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c 65  CREMENT.** table
1feb0 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  s, the following
1fec0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
1fed0 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
1fee0 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e  Table.u.autoInc.
1fef0 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20  p.** pointer of 
1ff00 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65  each autoincreme
1ff10 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f  nt table to reco
1ff20 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66  rd some side inf
1ff30 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  ormation that.**
1ff40 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1ff50 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68  tor needs.  We h
1ff60 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d  ave to keep per-
1ff70 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d  table autoincrem
1ff80 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ent.** informati
1ff90 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72  on in case inser
1ffa0 74 73 20 61 72 65 20 64 6f 6e 65 20 77 69 74 68  ts are done with
1ffb0 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72  in triggers.  Tr
1ffc0 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a  iggers do not.**
1ffd0 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69   normally coordi
1ffe0 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76  nate their activ
1fff0 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f  ities, but we do
20000 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e   need to coordin
20010 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69  ate the.** loadi
20020 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66  ng and saving of
20030 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69   autoincrement i
20040 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
20050 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
20060 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  o {.  AutoincInf
20070 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e  o *pNext;   /* N
20080 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69  ext info block i
20090 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d  n a list of them
200a0 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20   all */.  Table 
200b0 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
200c0 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e  /* Table this in
200d0 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20  fo block refers 
200e0 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  to */.  int iDb;
200f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20100 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65   Index in sqlite
20110 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62  3.aDb[] of datab
20120 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62  ase holding pTab
20130 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72   */.  int regCtr
20140 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
20150 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68  emory register h
20160 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64  olding the rowid
20170 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a   counter */.};..
20180 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f  /*.** At least o
20190 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ne instance of t
201a0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
201b0 75 63 74 75 72 65 20 69 73 20 63 72 65 61 74 65  ucture is create
201c0 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 74 72  d for each.** tr
201d0 69 67 67 65 72 20 74 68 61 74 20 6d 61 79 20 62  igger that may b
201e0 65 20 66 69 72 65 64 20 77 68 69 6c 65 20 70 61  e fired while pa
201f0 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c  rsing an INSERT,
20200 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54   UPDATE or DELET
20210 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20  E.** statement. 
20220 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73  All such objects
20230 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
20240 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68  he linked list h
20250 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73  eaded at.** Pars
20260 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 61 6e  e.pTriggerPrg an
20270 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73  d deleted once s
20280 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61  tatement compila
20290 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a  tion has been.**
202a0 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a   completed..**.*
202b0 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f  * A Vdbe sub-pro
202c0 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d  gram that implem
202d0 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e  ents the body an
202e0 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66  d WHEN clause of
202f0 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67   trigger.** Trig
20300 67 65 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c  gerPrg.pTrigger,
20310 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61   assuming a defa
20320 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ult ON CONFLICT 
20330 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69  clause of.** Tri
20340 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20  ggerPrg.orconf, 
20350 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
20360 20 54 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f   TriggerPrg.pPro
20370 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a  gram variable..*
20380 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54 72 69  * The Parse.pTri
20390 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76  ggerPrg list nev
203a0 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20  er contains two 
203b0 65 6e 74 72 69 65 73 20 77 69 74 68 20 74 68 65  entries with the
203c0 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20   same.** values 
203d0 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67 65  for both pTrigge
203e0 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a  r and orconf..**
203f0 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72 50  .** The TriggerP
20400 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76  rg.aColmask[0] v
20410 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
20420 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e  o a mask of old.
20430 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63  * columns.** acc
20440 65 73 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f  essed (or set to
20450 20 30 20 66 6f 72 20 74 72 69 67 67 65 72 73 20   0 for triggers 
20460 66 69 72 65 64 20 61 73 20 61 20 72 65 73 75 6c  fired as a resul
20470 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a 2a 20 73  t of INSERT.** s
20480 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69  tatements). Simi
20490 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67  larly, the Trigg
204a0 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31  erPrg.aColmask[1
204b0 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
204c0 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f  t to.** a mask o
204d0 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f new.* columns 
204e0 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67  used by the prog
204f0 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ram..*/.struct T
20500 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72  riggerPrg {.  Tr
20510 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
20520 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72        /* Trigger
20530 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61   this program wa
20540 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a  s coded from */.
20550 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e    TriggerPrg *pN
20560 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
20570 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65  t entry in Parse
20580 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
20590 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61  t */.  SubProgra
205a0 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f  m *pProgram;   /
205b0 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d  * Program implem
205c0 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f  enting pTrigger/
205d0 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20  orconf */.  int 
205e0 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  orconf;         
205f0 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f      /* Default O
20600 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63  N CONFLICT polic
20610 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d  y */.  u32 aColm
20620 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f  ask[2];        /
20630 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a  * Masks of old.*
20640 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  , new.* columns 
20650 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a  accessed */.};..
20660 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73  /*.** The yDbMas
20670 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74  k datatype for t
20680 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c  he bitmask of al
20690 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
206a0 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ases..*/.#if SQL
206b0 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
206c0 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e  >30.  typedef un
206d0 73 69 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d  signed char yDbM
206e0 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f  ask[(SQLITE_MAX_
206f0 41 54 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a  ATTACHED+9)/8];.
20700 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54  # define DbMaskT
20710 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d  est(M,I)    (((M
20720 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49  )[(I)/8]&(1<<((I
20730 29 26 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66  )&7)))!=0).# def
20740 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d  ine DbMaskZero(M
20750 29 20 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d  )      memset((M
20760 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23  ),0,sizeof(M)).#
20770 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65   define DbMaskSe
20780 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28  t(M,I)     (M)[(
20790 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26  I)/8]|=(1<<((I)&
207a0 37 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  7)).# define DbM
207b0 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20  askAllZero(M)   
207c0 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
207d0 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65  Zero(M).# define
207e0 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d   DbMaskNonZero(M
207f0 29 20 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61  )   (sqlite3DbMa
20800 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29  skAllZero(M)==0)
20810 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66  .#else.  typedef
20820 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44   unsigned int yD
20830 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20  bMask;.# define 
20840 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20  DbMaskTest(M,I) 
20850 20 20 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d     (((M)&(((yDbM
20860 61 73 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30  ask)1)<<(I)))!=0
20870 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
20880 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d  kZero(M)      (M
20890 29 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  )=0.# define DbM
208a0 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20  askSet(M,I)     
208b0 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29  (M)|=(((yDbMask)
208c0 31 29 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e  1)<<(I)).# defin
208d0 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e DbMaskAllZero(
208e0 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65  M)   (M)==0.# de
208f0 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65  fine DbMaskNonZe
20900 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23  ro(M)   (M)!=0.#
20910 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
20920 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65  SQL parser conte
20930 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74  xt.  A copy of t
20940 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
20950 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a   passed through.
20960 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  ** the parser an
20970 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20  d down into all 
20980 74 68 65 20 70 61 72 73 65 72 20 61 63 74 69 6f  the parser actio
20990 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64  n routine in ord
209a0 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61  er to.** carry a
209b0 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f  round informatio
209c0 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c  n that is global
209d0 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70   to the entire p
209e0 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  arse..**.** The 
209f0 73 74 72 75 63 74 75 72 65 20 69 73 20 64 69 76  structure is div
20a00 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61  ided into two pa
20a10 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70  rts.  When the p
20a20 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a  arser and code.*
20a30 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20  * generate call 
20a40 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72  themselves recur
20a50 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73  sively, the firs
20a60 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74  t part of the st
20a70 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f  ructure.** is co
20a80 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65 20 73  nstant but the s
20a90 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65  econd part is re
20aa0 73 65 74 20 61 74 20 74 68 65 20 62 65 67 69 6e  set at the begin
20ab0 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a  ning and end of.
20ac0 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
20ad0 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61  n..**.** The nTa
20ae0 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62  bleLock and aTab
20af0 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73  leLock variables
20b00 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69   are only used i
20b10 66 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63  f the shared-cac
20b20 68 65 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73  he.** feature is
20b30 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c   enabled (if sql
20b40 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68  ite3Tsd()->useSh
20b50 61 72 65 64 44 61 74 61 20 69 73 20 74 72 75 65  aredData is true
20b60 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75  ). They are.** u
20b70 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
20b80 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f   set of table-lo
20b90 63 6b 73 20 72 65 71 75 69 72 65 64 20 62 79 20  cks required by 
20ba0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65  the statement be
20bb0 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e  ing.** compiled.
20bc0 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65   Function sqlite
20bd0 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20  3TableLock() is 
20be0 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72  used to add entr
20bf0 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69  ies to the.** li
20c00 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61  st..*/.struct Pa
20c10 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  rse {.  sqlite3 
20c20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  *db;         /* 
20c30 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  The main databas
20c40 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20  e structure */. 
20c50 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20   char *zErrMsg; 
20c60 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f        /* An erro
20c70 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56  r message */.  V
20c80 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20  dbe *pVdbe;     
20c90 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65      /* An engine
20ca0 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64   for executing d
20cb0 61 74 61 62 61 73 65 20 62 79 74 65 63 6f 64 65  atabase bytecode
20cc0 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
20cd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
20ce0 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65  turn code from e
20cf0 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xecution */.  u8
20d00 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20   colNamesSet;   
20d10 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72     /* TRUE after
20d20 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68   OP_ColumnName h
20d30 61 73 20 62 65 65 6e 20 69 73 73 75 65 64 20 74  as been issued t
20d40 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20  o pVdbe */.  u8 
20d50 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20  checkSchema;    
20d60 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65    /* Causes sche
20d70 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20  ma cookie check 
20d80 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a  after an error *
20d90 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20  /.  u8 nested;  
20da0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
20db0 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c  er of nested cal
20dc0 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73 65 72  ls to the parser
20dd0 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20  /code generator 
20de0 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67  */.  u8 nTempReg
20df0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
20e00 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79  ber of temporary
20e10 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 61 54   registers in aT
20e20 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38  empReg[] */.  u8
20e30 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20   isMultiWrite;  
20e40 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74     /* True if st
20e50 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69  atement may modi
20e60 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70  fy/insert multip
20e70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20  le rows */.  u8 
20e80 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20  mayAbort;       
20e90 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
20ea0 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77  tement may throw
20eb0 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74   an ABORT except
20ec0 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43  ion */.  u8 hasC
20ed0 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a  ompound;      /*
20ee0 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20   Need to invoke 
20ef0 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
20f00 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
20f10 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73  ) */.  u8 okCons
20f20 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f  tFactor;    /* O
20f30 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20  K to factor out 
20f40 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 75  constants */.  u
20f50 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61 73 69  8 disableLookasi
20f60 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66  de; /* Number of
20f70 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73 69 64 65   times lookaside
20f80 20 68 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c   has been disabl
20f90 65 64 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62  ed */.  u8 disab
20fa0 6c 65 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20  leVtab;      /* 
20fb0 44 69 73 61 62 6c 65 20 61 6c 6c 20 76 69 72 74  Disable all virt
20fc0 75 61 6c 20 74 61 62 6c 65 73 20 66 6f 72 20 74  ual tables for t
20fd0 68 69 73 20 70 61 72 73 65 20 2a 2f 0a 20 20 69  his parse */.  i
20fe0 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20  nt nRangeReg;   
20ff0 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74      /* Size of t
21000 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  he temporary reg
21010 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20  ister block */. 
21020 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20   int iRangeReg; 
21030 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72        /* First r
21040 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f  egister in tempo
21050 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c  rary register bl
21060 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ock */.  int nEr
21070 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
21080 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
21090 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  s seen */.  int 
210a0 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  nTab;           
210b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72   /* Number of pr
210c0 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74  eviously allocat
210d0 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20  ed VDBE cursors 
210e0 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20  */.  int nMem;  
210f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
21100 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65  ber of memory ce
21110 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  lls used so far 
21120 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c  */.  int szOpAll
21130 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 42 79 74  oc;       /* Byt
21140 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61  es of memory spa
21150 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  ce allocated for
21160 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20   Vdbe.aOp[] */. 
21170 20 69 6e 74 20 69 53 65 6c 66 54 61 62 3b 20 20   int iSelfTab;  
21180 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 61        /* Table a
21190 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
211a0 6e 20 69 6e 64 65 78 20 6f 6e 20 65 78 70 72 2c  n index on expr,
211b0 20 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20 20   or negative.   
211c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211d0 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 62 61      ** of the ba
211e0 73 65 20 72 65 67 69 73 74 65 72 20 64 75 72 69  se register duri
211f0 6e 67 20 63 68 65 63 6b 2d 63 6f 6e 73 74 72 61  ng check-constra
21200 69 6e 74 20 65 76 61 6c 20 2a 2f 0a 20 20 69 6e  int eval */.  in
21210 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20  t nLabel;       
21220 20 20 20 2f 2a 20 54 68 65 20 2a 6e 65 67 61 74     /* The *negat
21230 69 76 65 2a 20 6f 66 20 74 68 65 20 6e 75 6d 62  ive* of the numb
21240 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65  er of labels use
21250 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65  d */.  int nLabe
21260 6c 41 6c 6c 6f 63 3b 20 20 20 20 20 2f 2a 20 4e  lAlloc;     /* N
21270 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 69  umber of slots i
21280 6e 20 61 4c 61 62 65 6c 20 2a 2f 0a 20 20 69 6e  n aLabel */.  in
21290 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20  t *aLabel;      
212a0 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68     /* Space to h
212b0 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a  old the labels *
212c0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43  /.  ExprList *pC
212d0 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73  onstExpr;/* Cons
212e0 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  tant expressions
212f0 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73   */.  Token cons
21300 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61  traintName;/* Na
21310 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72  me of the constr
21320 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62  aint currently b
21330 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20  eing parsed */. 
21340 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61   yDbMask writeMa
21350 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61  sk;   /* Start a
21360 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
21370 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61  on on these data
21380 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61  bases */.  yDbMa
21390 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20  sk cookieMask;  
213a0 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63  /* Bitmask of sc
213b0 68 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61  hema verified da
213c0 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74  tabases */.  int
213d0 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20   regRowid;      
213e0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
213f0 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43  lding rowid of C
21400 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72  REATE TABLE entr
21410 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  y */.  int regRo
21420 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52  ot;         /* R
21430 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
21440 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
21450 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73   for new objects
21460 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72   */.  int nMaxAr
21470 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  g;         /* Ma
21480 78 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f  x args passed to
21490 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62   user function b
214a0 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  y sub-program */
214b0 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20  .  int nSelect; 
214c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
214d0 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74 6d 74  r of SELECT stmt
214e0 73 2e 20 43 6f 75 6e 74 65 72 20 66 6f 72 20 53  s. Counter for S
214f0 65 6c 65 63 74 2e 73 65 6c 49 64 20 2a 2f 0a 23  elect.selId */.#
21500 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21510 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
21520 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b    int nTableLock
21530 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
21540 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61  er of locks in a
21550 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54  TableLock */.  T
21560 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65  ableLock *aTable
21570 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65  Lock; /* Require
21580 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f  d table locks fo
21590 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
215a0 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
215b0 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69  AutoincInfo *pAi
215c0 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  nc;  /* Informat
215d0 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e  ion about AUTOIN
215e0 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73  CREMENT counters
215f0 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f   */.  Parse *pTo
21600 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61  plevel;    /* Pa
21610 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  rse structure fo
21620 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28  r main program (
21630 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61  or NULL) */.  Ta
21640 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62  ble *pTriggerTab
21650 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67  ;  /* Table trig
21660 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63  gers are being c
21670 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 50 61  oded for */.  Pa
21680 72 73 65 20 2a 70 50 61 72 65 6e 74 50 61 72 73  rse *pParentPars
21690 65 3b 20 2f 2a 20 50 61 72 65 6e 74 20 70 61 72  e; /* Parent par
216a0 73 65 72 20 69 66 20 74 68 69 73 20 70 61 72 73  ser if this pars
216b0 65 72 20 69 73 20 6e 65 73 74 65 64 20 2a 2f 0a  er is nested */.
216c0 20 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b    int addrCrTab;
216d0 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73         /* Addres
216e0 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 42 74  s of OP_CreateBt
216f0 72 65 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52  ree opcode on CR
21700 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
21710 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20  u32 nQueryLoop; 
21720 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62       /* Est numb
21730 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73  er of iterations
21740 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a   of a query (10*
21750 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33  log2(N)) */.  u3
21760 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20  2 oldmask;      
21770 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c     /* Mask of ol
21780 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  d.* columns refe
21790 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20  renced */.  u32 
217a0 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  newmask;        
217b0 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e   /* Mask of new.
217c0 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
217d0 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72  nced */.  u8 eTr
217e0 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f  iggerOp;       /
217f0 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  * TK_UPDATE, TK_
21800 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c  INSERT or TK_DEL
21810 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63  ETE */.  u8 eOrc
21820 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
21830 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
21840 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20  LICT policy for 
21850 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f  trigger steps */
21860 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69  .  u8 disableTri
21870 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20  ggers;  /* True 
21880 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67  to disable trigg
21890 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a  ers */..  /*****
218a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
218b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
218c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
218d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
218e0 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65 6c 64  *****.  ** Field
218f0 73 20 61 62 6f 76 65 20 6d 75 73 74 20 62 65 20  s above must be 
21900 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 7a  initialized to z
21910 65 72 6f 2e 20 20 54 68 65 20 66 69 65 6c 64 73  ero.  The fields
21920 20 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20   that follow,.  
21930 2a 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 62  ** down to the b
21940 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
21950 72 65 63 75 72 73 69 76 65 20 73 65 63 74 69 6f  recursive sectio
21960 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74  n, do not need t
21970 6f 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74 69 61  o be.  ** initia
21980 6c 69 7a 65 64 20 61 73 20 74 68 65 79 20 77 69  lized as they wi
21990 6c 6c 20 62 65 20 73 65 74 20 62 65 66 6f 72 65  ll be set before
219a0 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68   being used.  Th
219b0 65 20 62 6f 75 6e 64 61 72 79 20 69 73 0a 20 20  e boundary is.  
219c0 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  ** determined by
219d0 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c   offsetof(Parse,
219e0 61 54 65 6d 70 52 65 67 29 2e 0a 20 20 2a 2a 2a  aTempReg)..  ***
219f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a30 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20  *******/..  int 
21a40 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20  aTempReg[8];    
21a50 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61      /* Holding a
21a60 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  rea for temporar
21a70 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20  y registers */. 
21a80 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65   Token sNameToke
21a90 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65  n;       /* Toke
21aa0 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69  n with unqualifi
21ab0 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  ed schema object
21ac0 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a   name */..  /***
21ad0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ae0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21af0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21b00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21b10 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65  *****.  ** Above
21b20 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74   is constant bet
21b30 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e  ween recursions.
21b40 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74    Below is reset
21b50 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65   before and afte
21b60 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75  r.  ** each recu
21b70 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e  rsion.  The boun
21b80 64 61 72 79 20 62 65 74 77 65 65 6e 20 74 68 65  dary between the
21b90 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69  se two regions i
21ba0 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a  s determined.  *
21bb0 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66  * using offsetof
21bc0 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65  (Parse,sLastToke
21bd0 6e 29 20 73 6f 20 74 68 65 20 73 4c 61 73 74 54  n) so the sLastT
21be0 6f 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73 74 20  oken field must 
21bf0 62 65 20 74 68 65 0a 20 20 2a 2a 20 66 69 72 73  be the.  ** firs
21c00 74 20 66 69 65 6c 64 20 69 6e 20 74 68 65 20 72  t field in the r
21c10 65 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e  ecursive region.
21c20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
21c30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21c40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21c50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21c60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
21c70 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e  Token sLastToken
21c80 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c  ;       /* The l
21c90 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64  ast token parsed
21ca0 20 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56 61 72   */.  ynVar nVar
21cb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21cc0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27  /* Number of '?'
21cd0 20 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20   variables seen 
21ce0 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61  in the SQL so fa
21cf0 72 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72  r */.  u8 iPkSor
21d00 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
21d10 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20   /* ASC or DESC 
21d20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d  for INTEGER PRIM
21d30 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20  ARY KEY */.  u8 
21d40 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20  explain;        
21d50 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
21d60 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c  f the EXPLAIN fl
21d70 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74  ag is found on t
21d80 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 20  he query */.#if 
21d90 21 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  !(defined(SQLITE
21da0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
21db0 4c 45 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  LE) && defined(S
21dc0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
21dd0 54 41 42 4c 45 29 29 0a 20 20 75 38 20 65 50 61  TABLE)).  u8 ePa
21de0 72 73 65 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  rseMode;        
21df0 20 20 20 20 2f 2a 20 50 41 52 53 45 5f 4d 4f 44      /* PARSE_MOD
21e00 45 5f 58 58 58 20 63 6f 6e 73 74 61 6e 74 20 2a  E_XXX constant *
21e10 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
21e20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
21e30 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
21e40 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  nVtabLock;      
21e50 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21e60 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  of virtual table
21e70 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e  s to lock */.#en
21e80 64 69 66 0a 20 20 69 6e 74 20 6e 48 65 69 67 68  dif.  int nHeigh
21e90 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
21ea0 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72  /* Expression tr
21eb0 65 65 20 68 65 69 67 68 74 20 6f 66 20 63 75 72  ee height of cur
21ec0 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20  rent sub-select 
21ed0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
21ee0 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20  E_OMIT_EXPLAIN. 
21ef0 20 69 6e 74 20 61 64 64 72 45 78 70 6c 61 69 6e   int addrExplain
21f00 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 64  ;          /* Ad
21f10 64 72 65 73 73 20 6f 66 20 63 75 72 72 65 6e 74  dress of current
21f20 20 4f 50 5f 45 78 70 6c 61 69 6e 20 6f 70 63 6f   OP_Explain opco
21f30 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 56  de */.#endif.  V
21f40 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b 20 20 20  List *pVList;   
21f50 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 70 70           /* Mapp
21f60 69 6e 67 20 62 65 74 77 65 65 6e 20 76 61 72 69  ing between vari
21f70 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e 64 20 6e  able names and n
21f80 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56 64 62 65  umbers */.  Vdbe
21f90 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20 20   *pReprepare;   
21fa0 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e        /* VM bein
21fb0 67 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71  g reprepared (sq
21fc0 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29  lite3Reprepare()
21fd0 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  ) */.  const cha
21fe0 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20  r *zTail;       
21ff0 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74   /* All SQL text
22000 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 73   past the last s
22010 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20  emicolon parsed 
22020 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77  */.  Table *pNew
22030 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f  Table;         /
22040 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20  * A table being 
22050 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43  constructed by C
22060 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20  REATE TABLE */. 
22070 20 49 6e 64 65 78 20 2a 70 4e 65 77 49 6e 64 65   Index *pNewInde
22080 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e  x;         /* An
22090 20 69 6e 64 65 78 20 62 65 69 6e 67 20 63 6f 6e   index being con
220a0 73 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41  structed by CREA
220b0 54 45 20 49 4e 44 45 58 2e 0a 20 20 20 20 20 20  TE INDEX..      
220c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220d0 20 20 20 20 20 20 2a 2a 20 41 6c 73 6f 20 75 73        ** Also us
220e0 65 64 20 74 6f 20 68 6f 6c 64 20 72 65 64 75 6e  ed to hold redun
220f0 64 61 6e 74 20 55 4e 49 51 55 45 20 63 6f 6e 73  dant UNIQUE cons
22100 74 72 61 69 6e 74 73 0a 20 20 20 20 20 20 20 20  traints.        
22110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22120 20 20 20 20 2a 2a 20 64 75 72 69 6e 67 20 61 20      ** during a 
22130 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20 2a 2f  RENAME COLUMN */
22140 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77  .  Trigger *pNew
22150 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20  Trigger;     /* 
22160 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f  Trigger under co
22170 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45  nstruct by a CRE
22180 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20  ATE TRIGGER */. 
22190 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
221a0 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68  thContext; /* Th
221b0 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20  e 6th parameter 
221c0 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c  to db->xAuth cal
221d0 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65  lbacks */.#ifnde
221e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
221f0 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b  RTUALTABLE.  Tok
22200 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20 20  en sArg;        
22210 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65         /* Comple
22220 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64  te text of a mod
22230 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ule argument */.
22240 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62    Table **apVtab
22250 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50  Lock;       /* P
22260 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61  ointer to virtua
22270 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67  l tables needing
22280 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64   locking */.#end
22290 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d  if.  Table *pZom
222a0 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f  bieTab;        /
222b0 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20  * List of Table 
222c0 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74  objects to delet
222d0 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e  e after code gen
222e0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
222f0 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20 20   *pTriggerPrg;  
22300 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
22310 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72 73  f coded triggers
22320 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
22330 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
22340 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48 20  /* Current WITH 
22350 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20  clause, or NULL 
22360 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
22370 54 6f 46 72 65 65 3b 20 20 20 20 20 20 20 20 2f  ToFree;        /
22380 2a 20 46 72 65 65 20 74 68 69 73 20 57 49 54 48  * Free this WITH
22390 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20 65   object at the e
223a0 6e 64 20 6f 66 20 74 68 65 20 70 61 72 73 65 20  nd of the parse 
223b0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
223c0 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
223d0 45 0a 20 20 52 65 6e 61 6d 65 54 6f 6b 65 6e 20  E.  RenameToken 
223e0 2a 70 52 65 6e 61 6d 65 3b 20 20 20 20 20 2f 2a  *pRename;     /*
223f0 20 54 6f 6b 65 6e 73 20 73 75 62 6a 65 63 74 20   Tokens subject 
22400 74 6f 20 72 65 6e 61 6d 69 6e 67 20 62 79 20 41  to renaming by A
22410 4c 54 45 52 20 54 41 42 4c 45 20 2a 2f 0a 23 65  LTER TABLE */.#e
22420 6e 64 69 66 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65  ndif.};..#define
22430 20 50 41 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d   PARSE_MODE_NORM
22440 41 4c 20 20 20 20 20 20 20 20 30 0a 23 64 65 66  AL        0.#def
22450 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 44  ine PARSE_MODE_D
22460 45 43 4c 41 52 45 5f 56 54 41 42 20 20 31 0a 23  ECLARE_VTAB  1.#
22470 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44  define PARSE_MOD
22480 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 20  E_RENAME_COLUMN 
22490 32 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  2.#define PARSE_
224a0 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 54 41 42 4c  MODE_RENAME_TABL
224b0 45 20 20 33 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65  E  3../*.** Size
224c0 73 20 61 6e 64 20 70 6f 69 6e 74 65 72 73 20 6f  s and pointers o
224d0 66 20 76 61 72 69 6f 75 73 20 70 61 72 74 73 20  f various parts 
224e0 6f 66 20 74 68 65 20 50 61 72 73 65 20 6f 62 6a  of the Parse obj
224f0 65 63 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ect..*/.#define 
22500 50 41 52 53 45 5f 48 44 52 5f 53 5a 20 6f 66 66  PARSE_HDR_SZ off
22510 73 65 74 6f 66 28 50 61 72 73 65 2c 61 54 65 6d  setof(Parse,aTem
22520 70 52 65 67 29 20 2f 2a 20 52 65 63 75 72 73 69  pReg) /* Recursi
22530 76 65 20 70 61 72 74 20 77 2f 6f 20 61 43 6f 6c  ve part w/o aCol
22540 43 61 63 68 65 2a 2f 0a 23 64 65 66 69 6e 65 20  Cache*/.#define 
22550 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a  PARSE_RECURSE_SZ
22560 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c   offsetof(Parse,
22570 73 4c 61 73 74 54 6f 6b 65 6e 29 20 20 20 20 2f  sLastToken)    /
22580 2a 20 52 65 63 75 72 73 69 76 65 20 70 61 72 74  * Recursive part
22590 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53   */.#define PARS
225a0 45 5f 54 41 49 4c 5f 53 5a 20 28 73 69 7a 65 6f  E_TAIL_SZ (sizeo
225b0 66 28 50 61 72 73 65 29 2d 50 41 52 53 45 5f 52  f(Parse)-PARSE_R
225c0 45 43 55 52 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f  ECURSE_SZ) /* No
225d0 6e 2d 72 65 63 75 72 73 69 76 65 20 70 61 72 74  n-recursive part
225e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53   */.#define PARS
225f0 45 5f 54 41 49 4c 28 58 29 20 28 28 28 63 68 61  E_TAIL(X) (((cha
22600 72 2a 29 28 58 29 29 2b 50 41 52 53 45 5f 52 45  r*)(X))+PARSE_RE
22610 43 55 52 53 45 5f 53 5a 29 20 20 2f 2a 20 50 6f  CURSE_SZ)  /* Po
22620 69 6e 74 65 72 20 74 6f 20 74 61 69 6c 20 2a 2f  inter to tail */
22630 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
22640 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79  rue if currently
22650 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74   inside an sqlit
22660 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
22670 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65  ) call..*/.#ifde
22680 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
22690 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65  RTUALTABLE.  #de
226a0 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
226b0 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23  VTAB 0.#else.  #
226c0 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
226d0 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e  E_VTAB (pParse->
226e0 65 50 61 72 73 65 4d 6f 64 65 3d 3d 50 41 52 53  eParseMode==PARS
226f0 45 5f 4d 4f 44 45 5f 44 45 43 4c 41 52 45 5f 56  E_MODE_DECLARE_V
22700 54 41 42 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  TAB).#endif..#if
22710 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
22720 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 29  OMIT_ALTERTABLE)
22730 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 52 45  .  #define IN_RE
22740 4e 41 4d 45 5f 4f 42 4a 45 43 54 20 30 0a 23 65  NAME_OBJECT 0.#e
22750 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  lse.  #define IN
22760 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43 54 20 28  _RENAME_OBJECT (
22770 70 50 61 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f  pParse->eParseMo
22780 64 65 3e 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 52  de>=PARSE_MODE_R
22790 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29 0a 23 65  ENAME_COLUMN).#e
227a0 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
227b0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
227c0 52 54 55 41 4c 54 41 42 4c 45 29 20 26 26 20 64  RTUALTABLE) && d
227d0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
227e0 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 29 0a 20  IT_ALTERTABLE). 
227f0 20 23 64 65 66 69 6e 65 20 49 4e 5f 53 50 45 43   #define IN_SPEC
22800 49 41 4c 5f 50 41 52 53 45 20 30 0a 23 65 6c 73  IAL_PARSE 0.#els
22810 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 53  e.  #define IN_S
22820 50 45 43 49 41 4c 5f 50 41 52 53 45 20 28 70 50  PECIAL_PARSE (pP
22830 61 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65  arse->eParseMode
22840 21 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52  !=PARSE_MODE_NOR
22850 4d 41 4c 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  MAL).#endif../*.
22860 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
22870 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
22880 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65  structure can be
22890 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73   declared on a s
228a0 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a  tack and used.**
228b0 20 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72   to save the Par
228c0 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
228d0 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74  value so that it
228e0 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64   can be restored
228f0 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63   later..*/.struc
22900 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a  t AuthContext {.
22910 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
22920 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a  uthContext;   /*
22930 20 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65   Put saved Parse
22940 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65  .zAuthContext he
22950 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  re */.  Parse *p
22960 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
22970 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65      /* The Parse
22980 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b   structure */.};
22990 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64  ../*.** Bitfield
229a0 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61   flags for P5 va
229b0 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f  lue in various o
229c0 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61  pcodes..**.** Va
229d0 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
229e0 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73  (enforced via as
229f0 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4f  sert()):.**    O
22a00 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
22a10 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e     == SQLITE_FUN
22a20 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20 20 20 4f  C_LENGTH.**    O
22a30 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
22a40 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e     == SQLITE_FUN
22a50 43 5f 54 59 50 45 4f 46 0a 2a 2a 20 20 20 20 4f  C_TYPEOF.**    O
22a60 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20  PFLAG_BULKCSR   
22a70 20 20 20 3d 3d 20 42 54 52 45 45 5f 42 55 4c 4b     == BTREE_BULK
22a80 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  LOAD.**    OPFLA
22a90 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 3d  G_SEEKEQ       =
22aa0 3d 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 0a  = BTREE_SEEK_EQ.
22ab0 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 46 4f 52  **    OPFLAG_FOR
22ac0 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52  DELETE    == BTR
22ad0 45 45 5f 46 4f 52 44 45 4c 45 54 45 0a 2a 2a 20  EE_FORDELETE.** 
22ae0 20 20 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f     OPFLAG_SAVEPO
22af0 53 49 54 49 4f 4e 20 3d 3d 20 42 54 52 45 45 5f  SITION == BTREE_
22b00 53 41 56 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20  SAVEPOSITION.** 
22b10 20 20 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c     OPFLAG_AUXDEL
22b20 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f  ETE    == BTREE_
22b30 41 55 58 44 45 4c 45 54 45 0a 2a 2f 0a 23 64 65  AUXDELETE.*/.#de
22b40 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41  fine OPFLAG_NCHA
22b50 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20  NGE       0x01  
22b60 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20    /* OP_Insert: 
22b70 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
22b80 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20  ->nChange */.   
22b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bb0 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64 20 69    /* Also used i
22bc0 6e 20 50 32 20 28 6e 6f 74 20 50 35 29 20 6f 66  n P2 (not P5) of
22bd0 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64   OP_Delete */.#d
22be0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 4f 43  efine OPFLAG_NOC
22bf0 48 4e 47 20 20 20 20 20 20 20 20 30 78 30 31 20  HNG        0x01 
22c00 20 20 20 2f 2a 20 4f 50 5f 56 43 6f 6c 75 6d 6e     /* OP_VColumn
22c10 20 6e 6f 63 68 61 6e 67 65 20 66 6f 72 20 55 50   nochange for UP
22c20 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
22c30 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20  OPFLAG_EPHEM    
22c40 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
22c50 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d  OP_Column: Ephem
22c60 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f  eral output is o
22c70 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  k */.#define OPF
22c80 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20  LAG_LASTROWID   
22c90 20 20 30 78 32 30 20 20 20 20 2f 2a 20 53 65 74    0x20    /* Set
22ca0 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c   to update db->l
22cb0 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66  astRowid */.#def
22cc0 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  ine OPFLAG_ISUPD
22cd0 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20  ATE      0x04   
22ce0 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65   /* This OP_Inse
22cf0 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44  rt is an sql UPD
22d00 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
22d10 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20  PFLAG_APPEND    
22d20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54      0x08    /* T
22d30 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  his is likely to
22d40 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f   be an append */
22d50 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22d60 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78  USESEEKRESULT 0x
22d70 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20  10    /* Try to 
22d80 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20  avoid a seek in 
22d90 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f  BtreeInsert() */
22da0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22db0 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78  ISNOOP        0x
22dc0 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65  40    /* OP_Dele
22dd0 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61  te does pre-upda
22de0 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a  te-hook only */.
22df0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
22e00 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34  ENGTHARG     0x4
22e10 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
22e20 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
22e30 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66  length() */.#def
22e40 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ine OPFLAG_TYPEO
22e50 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20  FARG     0x80   
22e60 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
22e70 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  ly used for type
22e80 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  of() */.#define 
22e90 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20  OPFLAG_BULKCSR  
22ea0 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
22eb0 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74  OP_Open** used t
22ec0 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73  o open bulk curs
22ed0 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  or */.#define OP
22ee0 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20  FLAG_SEEKEQ     
22ef0 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50     0x02    /* OP
22f00 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75  _Open** cursor u
22f10 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79  ses EQ seek only
22f20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22f30 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20  AG_FORDELETE    
22f40 20 30 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x08    /* OP_O
22f50 70 65 6e 20 73 68 6f 75 6c 64 20 75 73 65 20 42  pen should use B
22f60 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a  TREE_FORDELETE *
22f70 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22f80 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30  _P2ISREG       0
22f90 78 31 30 20 20 20 20 2f 2a 20 50 32 20 74 6f 20  x10    /* P2 to 
22fa0 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72  OP_Open** is a r
22fb0 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a  egister number *
22fc0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22fd0 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30  _PERMUTE       0
22fe0 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d  x01    /* OP_Com
22ff0 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65  pare: use the pe
23000 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  rmutation */.#de
23010 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56 45  fine OPFLAG_SAVE
23020 50 4f 53 49 54 49 4f 4e 20 20 30 78 30 32 20 20  POSITION  0x02  
23030 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 2f 49    /* OP_Delete/I
23040 6e 73 65 72 74 3a 20 73 61 76 65 20 63 75 72 73  nsert: save curs
23050 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65 66 69 6e  or pos */.#defin
23060 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  e OPFLAG_AUXDELE
23070 54 45 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  TE     0x04    /
23080 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e 64  * OP_Delete: ind
23090 65 78 20 69 6e 20 61 20 44 45 4c 45 54 45 20 6f  ex in a DELETE o
230a0 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  p */.#define OPF
230b0 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d 41 47 49 43  LAG_NOCHNG_MAGIC
230c0 20 20 30 78 36 64 20 20 20 20 2f 2a 20 4f 50 5f    0x6d    /* OP_
230d0 4d 61 6b 65 52 65 63 6f 72 64 3a 20 73 65 72 69  MakeRecord: seri
230e0 61 6c 74 79 70 65 20 31 30 20 69 73 20 6f 6b 20  altype 10 is ok 
230f0 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74  */../*. * Each t
23100 72 69 67 67 65 72 20 70 72 65 73 65 6e 74 20 69  rigger present i
23110 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
23120 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20  chema is stored 
23130 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  as an instance o
23140 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67  f. * struct Trig
23150 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74  ger.. *. * Point
23160 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73  ers to instances
23170 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
23180 65 72 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  er are stored in
23190 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e   two ways.. * 1.
231a0 20 49 6e 20 74 68 65 20 22 74 72 69 67 48 61 73   In the "trigHas
231b0 68 22 20 68 61 73 68 20 74 61 62 6c 65 20 28 70  h" hash table (p
231c0 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74  art of the sqlit
231d0 65 33 2a 20 74 68 61 74 20 72 65 70 72 65 73 65  e3* that represe
231e0 6e 74 73 20 74 68 65 0a 20 2a 20 20 20 20 64 61  nts the. *    da
231f0 74 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c  tabase). This al
23200 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72  lows Trigger str
23210 75 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65  uctures to be re
23220 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e  trieved by name.
23230 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67  . * 2. All trigg
23240 65 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ers associated w
23250 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62  ith a single tab
23260 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64  le form a linked
23270 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65   list, using the
23280 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d  . *    pNext mem
23290 62 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72  ber of struct Tr
232a0 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72  igger. A pointer
232b0 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
232c0 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20  ement of the. * 
232d0 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69     linked list i
232e0 73 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20  s stored as the 
232f0 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65  "pTrigger" membe
23300 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61  r of the associa
23310 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74  ted. *    struct
23320 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68   Table.. *. * Th
23330 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
23340 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74  mber points to t
23350 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
23360 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   of a linked lis
23370 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20  t. * containing 
23380 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
23390 74 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ts specified as 
233a0 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
233b0 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20  ram.. */.struct 
233c0 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72  Trigger {.  char
233d0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
233e0 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20      /* The name 
233f0 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20  of the trigger  
23400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23410 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20        */.  char 
23420 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  *table;         
23430 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20     /* The table 
23440 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68  or view to which
23450 20 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70   the trigger app
23460 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  lies */.  u8 op;
23470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23480 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44    /* One of TK_D
23490 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45  ELETE, TK_UPDATE
234a0 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20  , TK_INSERT     
234b0 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74      */.  u8 tr_t
234c0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
234d0 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47   /* One of TRIGG
234e0 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47  ER_BEFORE, TRIGG
234f0 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78  ER_AFTER */.  Ex
23500 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20  pr *pWhen;      
23510 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
23520 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  N clause of the 
23530 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20  expression (may 
23540 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64  be NULL) */.  Id
23550 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20  List *pColumns; 
23560 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73        /* If this
23570 20 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46   is an UPDATE OF
23580 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74   <column-list> t
23590 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20  rigger,.        
235a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235b0 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e       the <column
235c0 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64  -list> is stored
235d0 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d   here */.  Schem
235e0 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
235f0 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
23600 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67  taining the trig
23610 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ger */.  Schema 
23620 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20  *pTabSchema;    
23630 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
23640 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20  ining the table 
23650 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
23660 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20   *step_list; /* 
23670 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69  Link list of tri
23680 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65  gger program ste
23690 70 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a  ps             *
236a0 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
236b0 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
236c0 65 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f  ext trigger asso
236d0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
236e0 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  table */.};../*.
236f0 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20  ** A trigger is 
23700 65 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20  either a BEFORE 
23710 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67  or an AFTER trig
23720 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ger.  The follow
23730 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a  ing constants.**
23740 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68   determine which
23750 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65  ..**.** If there
23760 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72   are multiple tr
23770 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68  iggers, you migh
23780 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45  t of some BEFORE
23790 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e   and some AFTER.
237a0 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65  .** In that case
237b0 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73  s, the constants
237c0 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52   below can be OR
237d0 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a  ed together..*/.
237e0 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
237f0 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e  BEFORE  1.#defin
23800 65 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  e TRIGGER_AFTER 
23810 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e    2../*. * An in
23820 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74  stance of struct
23830 20 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20   TriggerStep is 
23840 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20  used to store a 
23850 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65  single SQL state
23860 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20  ment. * that is 
23870 61 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67  a part of a trig
23880 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a  ger-program.. *.
23890 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20   * Instances of 
238a0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
238b0 65 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ep are stored in
238c0 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64   a singly linked
238d0 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a   list (linked. *
238e0 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78   using the "pNex
238f0 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72  t" member) refer
23900 65 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74  enced by the "st
23910 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
23920 6f 66 20 74 68 65 0a 20 2a 20 61 73 73 6f 63 69  of the. * associ
23930 61 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67  ated struct Trig
23940 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68  ger instance. Th
23950 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
23960 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  of the linked li
23970 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72  st is. * the fir
23980 73 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74  st step of the t
23990 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a  rigger-program..
239a0 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d   *. * The "op" m
239b0 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20  ember indicates 
239c0 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
239d0 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53  a "DELETE", "INS
239e0 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f  ERT", "UPDATE" o
239f0 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74  r. * "SELECT" st
23a00 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61  atement. The mea
23a10 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68  nings of the oth
23a20 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65  er members is de
23a30 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a  termined by the.
23a40 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22   * value of "op"
23a50 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a   as follows:. *.
23a60 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53   * (op == TK_INS
23a70 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20  ERT). * orconf  
23a80 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20    -> stores the 
23a90 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
23aa0 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74  rithm. * pSelect
23ab0 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73     -> If this is
23ac0 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
23ad0 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73  ... SELECT ... s
23ae0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
23af0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
23b00 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69  his stores a poi
23b10 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45  nter to the SELE
23b20 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74  CT statement. Ot
23b30 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
23b40 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
23b50 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
23b60 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65  he table to inse
23b70 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70  rt into.. * pExp
23b80 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73  rList -> If this
23b90 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
23ba0 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e  TO ... VALUES ..
23bb0 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
23bc0 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
23bd0 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61    this stores va
23be0 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72  lues to be inser
23bf0 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e  ted. Otherwise N
23c00 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20  ULL.. * pIdList 
23c10 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
23c20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
23c30 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  .. (<column-name
23c40 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20  s>) VALUES .... 
23c50 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  *              s
23c60 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74  tatement, then t
23c70 68 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63  his stores the c
23c80 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62  olumn-names to b
23c90 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  e. *            
23ca0 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e    inserted into.
23cb0 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
23cc0 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72  _DELETE). * zTar
23cd0 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
23ce0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
23cf0 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72  ble to delete fr
23d00 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  om.. * pWhere   
23d10 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
23d20 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45  ause of the DELE
23d30 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
23d40 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
23d50 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
23d60 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
23d70 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  .. *. * (op == T
23d80 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a 54 61  K_UPDATE). * zTa
23d90 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74  rget   -> Dequot
23da0 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
23db0 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 2e 0a  able to update..
23dc0 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
23dd0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
23de0 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
23df0 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
23e00 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
23e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
23e20 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
23e30 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20   pExprList -> A 
23e40 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75  list of the colu
23e50 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e  mns to update an
23e60 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  d the expression
23e70 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20  s to update. *  
23e80 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6d              them
23e90 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33   to. See sqlite3
23ea0 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e  Update() documen
23eb0 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e  tation of "pChan
23ec0 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20  ges". *         
23ed0 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20       argument.. 
23ee0 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  *. */.struct Tri
23ef0 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20  ggerStep {.  u8 
23f00 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
23f10 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44    /* One of TK_D
23f20 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45  ELETE, TK_UPDATE
23f30 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f  , TK_INSERT, TK_
23f40 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f  SELECT */.  u8 o
23f50 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
23f60 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20   /* OE_Rollback 
23f70 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65  etc. */.  Trigge
23f80 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f  r *pTrig;      /
23f90 2a 20 54 68 65 20 74 72 69 67 67 65 72 20 74 68  * The trigger th
23fa0 61 74 20 74 68 69 73 20 73 74 65 70 20 69 73 20  at this step is 
23fb0 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53  a part of */.  S
23fc0 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
23fd0 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74      /* SELECT st
23fe0 61 74 65 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f  atement or RHS o
23ff0 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 53 45  f INSERT INTO SE
24000 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68  LECT ... */.  ch
24010 61 72 20 2a 7a 54 61 72 67 65 74 3b 20 20 20 20  ar *zTarget;    
24020 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62     /* Target tab
24030 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55  le for DELETE, U
24040 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f  PDATE, INSERT */
24050 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
24060 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
24070 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
24080 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
24090 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72   steps */.  Expr
240a0 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b  List *pExprList;
240b0 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66   /* SET clause f
240c0 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 49  or UPDATE */.  I
240d0 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20  dList *pIdList; 
240e0 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61      /* Column na
240f0 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a  mes for INSERT *
24100 2f 0a 20 20 55 70 73 65 72 74 20 2a 70 55 70 73  /.  Upsert *pUps
24110 65 72 74 3b 20 20 20 20 20 2f 2a 20 55 70 73 65  ert;     /* Upse
24120 72 74 20 63 6c 61 75 73 65 73 20 6f 6e 20 61 6e  rt clauses on an
24130 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 63 68 61   INSERT */.  cha
24140 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
24150 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 53 51    /* Original SQ
24160 4c 20 74 65 78 74 20 6f 66 20 74 68 69 73 20 63  L text of this c
24170 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 54 72 69 67  ommand */.  Trig
24180 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20  gerStep *pNext; 
24190 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20   /* Next in the 
241a0 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54  link-list */.  T
241b0 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73  riggerStep *pLas
241c0 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d  t;  /* Last elem
241d0 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74  ent in link-list
241e0 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20  . Valid for 1st 
241f0 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a  elem only */.};.
24200 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
24210 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
24220 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
24230 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
24240 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20  sqliteFix....** 
24250 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79  routines as they
24260 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20   walk the parse 
24270 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74  tree to make dat
24280 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73  abase references
24290 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f  .** explicit..*/
242a0 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
242b0 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b  DbFixer DbFixer;
242c0 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20  .struct DbFixer 
242d0 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
242e0 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  e;      /* The p
242f0 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20  arsing context. 
24300 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   Error messages 
24310 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
24320 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
24330 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65  a;    /* Fix ite
24340 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d  ms to this schem
24350 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f  a */.  int bVarO
24360 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68  nly;       /* Ch
24370 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65  eck for variable
24380 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79   references only
24390 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
243a0 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b   *zDb;    /* Mak
243b0 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63  e sure all objec
243c0 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ts are contained
243d0 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73   in this databas
243e0 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
243f0 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79  r *zType;  /* Ty
24400 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  pe of the contai
24410 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
24420 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
24430 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a  .  const Token *
24440 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f  pName; /* Name o
24450 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
24460 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
24470 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a   messages */.};.
24480 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
24490 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d  ed used to accum
244a0 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f  ulate the text o
244b0 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65  f a string where
244c0 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65   we.** do not ne
244d0 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68  cessarily know h
244e0 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e  ow big the strin
244f0 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65  g will be in the
24500 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
24510 73 71 6c 69 74 65 33 5f 73 74 72 20 7b 0a 20 20  sqlite3_str {.  
24520 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
24530 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c       /* Optional
24540 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f   database for lo
24550 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65  okaside.  Can be
24560 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20   NULL */.  char 
24570 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20  *zText;         
24580 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f  /* The string co
24590 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a  llected so far *
245a0 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b  /.  u32  nAlloc;
245b0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75           /* Amou
245c0 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f  nt of space allo
245d0 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a  cated in zText *
245e0 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63  /.  u32  mxAlloc
245f0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69  ;        /* Maxi
24600 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f  mum allowed allo
24610 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e  cation.  0 for n
24620 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a  o malloc usage *
24630 2f 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20  /.  u32  nChar; 
24640 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
24650 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  th of the string
24660 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20   so far */.  u8 
24670 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20    accError;     
24680 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45    /* SQLITE_NOME
24690 4d 20 6f 72 20 53 51 4c 49 54 45 5f 54 4f 4f 42  M or SQLITE_TOOB
246a0 49 47 20 2a 2f 0a 20 20 75 38 20 20 20 70 72 69  IG */.  u8   pri
246b0 6e 74 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20  ntfFlags;    /* 
246c0 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 20 66 6c  SQLITE_PRINTF fl
246d0 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  ags below */.};.
246e0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
246f0 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30  RINTF_INTERNAL 0
24700 78 30 31 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c  x01  /* Internal
24710 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72  -use-only conver
24720 74 65 72 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a  ters allowed */.
24730 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
24740 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30  RINTF_SQLFUNC  0
24750 78 30 32 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63  x02  /* SQL func
24760 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 74  tion arguments t
24770 6f 20 56 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64  o VXPrintf */.#d
24780 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49  efine SQLITE_PRI
24790 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30  NTF_MALLOCED 0x0
247a0 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 78 54  4  /* True if xT
247b0 65 78 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ext is allocated
247c0 20 73 70 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69   space */..#defi
247d0 6e 65 20 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29  ne isMalloced(X)
247e0 20 20 28 28 28 58 29 2d 3e 70 72 69 6e 74 66 46    (((X)->printfF
247f0 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52  lags & SQLITE_PR
24800 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d  INTF_MALLOCED)!=
24810 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69  0).../*.** A poi
24820 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
24830 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
24840 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e  o communicate in
24850 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f  formation.** fro
24860 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e  m sqlite3Init an
24870 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  d OP_ParseSchema
24880 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65   into the sqlite
24890 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a  3InitCallback..*
248a0 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
248b0 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
248c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
248d0 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69  database being i
248e0 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
248f0 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b  char **pzErrMsg;
24900 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
24910 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65  sage stored here
24920 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
24930 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66            /* 0 f
24940 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  or main database
24950 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32  .  1 for TEMP, 2
24960 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20  .. for ATTACHed 
24970 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
24980 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
24990 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68  lt code stored h
249a0 65 72 65 20 2a 2f 0a 20 20 75 33 32 20 6d 49 6e  ere */.  u32 mIn
249b0 69 74 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  itFlags;     /* 
249c0 46 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 6c 69 6e  Flags controllin
249d0 67 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  g error messages
249e0 20 2a 2f 0a 20 20 75 33 32 20 6e 49 6e 69 74 52   */.  u32 nInitR
249f0 6f 77 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ow;       /* Num
24a00 62 65 72 20 6f 66 20 72 6f 77 73 20 70 72 6f 63  ber of rows proc
24a10 65 73 73 65 64 20 2a 2f 0a 7d 20 49 6e 69 74 44  essed */.} InitD
24a20 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ata;../*.** Allo
24a30 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 6d  wed values for m
24a40 49 6e 69 74 46 6c 61 67 73 0a 2a 2f 0a 23 64 65  InitFlags.*/.#de
24a50 66 69 6e 65 20 49 4e 49 54 46 4c 41 47 5f 41 6c  fine INITFLAG_Al
24a60 74 65 72 54 61 62 6c 65 20 20 20 30 78 30 30 30  terTable   0x000
24a70 31 20 20 2f 2a 20 54 68 69 73 20 69 73 20 61 20  1  /* This is a 
24a80 72 65 70 61 72 73 65 20 61 66 74 65 72 20 41 4c  reparse after AL
24a90 54 45 52 20 54 41 42 4c 45 20 2a 2f 0a 0a 2f 2a  TER TABLE */../*
24aa0 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f  .** Structure co
24ab0 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20  ntaining global 
24ac0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61  configuration da
24ad0 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  ta for the SQLit
24ae0 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a  e library..**.**
24af0 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
24b00 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f  also contains so
24b10 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61  me state informa
24b20 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
24b30 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a  Sqlite3Config {.
24b40 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20    int bMemstat; 
24b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b60 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
24b70 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61  nable memory sta
24b80 74 75 73 20 2a 2f 0a 20 20 75 38 20 62 43 6f 72  tus */.  u8 bCor
24b90 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  eMutex;         
24ba0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
24bb0 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72  ue to enable cor
24bc0 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20  e mutexing */.  
24bd0 75 38 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20  u8 bFullMutex;  
24be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bf0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
24c00 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e  ble full mutexin
24c10 67 20 2a 2f 0a 20 20 75 38 20 62 4f 70 65 6e 55  g */.  u8 bOpenU
24c20 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ri;             
24c30 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
24c40 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69   to interpret fi
24c50 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20  lenames as URIs 
24c60 2a 2f 0a 20 20 75 38 20 62 55 73 65 43 69 73 3b  */.  u8 bUseCis;
24c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c80 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f         /* Use co
24c90 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66  vering indices f
24ca0 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f  or full-scans */
24cb0 0a 20 20 75 38 20 62 53 6d 61 6c 6c 4d 61 6c 6c  .  u8 bSmallMall
24cc0 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  oc;             
24cd0 20 20 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c 61       /* Avoid la
24ce0 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  rge memory alloc
24cf0 61 74 69 6f 6e 73 20 69 66 20 74 72 75 65 20 2a  ations if true *
24d00 2f 0a 20 20 75 38 20 62 45 78 74 72 61 53 63 68  /.  u8 bExtraSch
24d10 65 6d 61 43 68 65 63 6b 73 3b 20 20 20 20 20 20  emaChecks;      
24d20 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20        /* Verify 
24d30 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61  type,name,tbl_na
24d40 6d 65 20 69 6e 20 73 63 68 65 6d 61 20 2a 2f 0a  me in schema */.
24d50 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20    int mxStrlen; 
24d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d70 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
24d80 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a  tring length */.
24d90 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75    int neverCorru
24da0 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pt;             
24db0 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
24dc0 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66  is always well-f
24dd0 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73  ormed */.  int s
24de0 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  zLookaside;     
24df0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24e00 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
24e10 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f  e buffer size */
24e20 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64  .  int nLookasid
24e30 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
24e40 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
24e50 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
24e60 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20   count */.  int 
24e70 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20  nStmtSpill;     
24e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24e90 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70   Stmt-journal sp
24ea0 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65  ill-to-disk thre
24eb0 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74  shold */.  sqlit
24ec0 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d  e3_mem_methods m
24ed0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
24ee0 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79  Low-level memory
24ef0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65   allocation inte
24f00 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
24f10 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
24f20 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20   mutex;      /* 
24f30 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20  Low-level mutex 
24f40 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
24f50 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65  qlite3_pcache_me
24f60 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20  thods2 pcache2; 
24f70 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61   /* Low-level pa
24f80 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61  ge-cache interfa
24f90 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48  ce */.  void *pH
24fa0 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
24fb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61            /* Hea
24fc0 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20  p storage space 
24fd0 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20  */.  int nHeap; 
24fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ff0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
25000 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69  f pHeap[] */.  i
25010 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b  nt mnReq, mxReq;
25020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25030 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20   /* Min and max 
25040 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69  heap requests si
25050 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  zes */.  sqlite3
25060 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20  _int64 szMmap;  
25070 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d             /* mm
25080 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f  ap() space per o
25090 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71  pen file */.  sq
250a0 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d  lite3_int64 mxMm
250b0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
250c0 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65  /* Maximum value
250d0 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20   for szMmap */. 
250e0 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20   void *pPage;   
250f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25100 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65     /* Page cache
25110 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
25120 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20   szPage;        
25130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25140 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70  * Size of each p
25150 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  age in pPage[] *
25160 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20  /.  int nPage;  
25170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25180 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
25190 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67  of pages in pPag
251a0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50  e[] */.  int mxP
251b0 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20  arserStack;     
251c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61             /* ma
251d0 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74  ximum depth of t
251e0 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20  he parser stack 
251f0 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43  */.  int sharedC
25200 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20  acheEnabled;    
25210 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69         /* true i
25220 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  f shared-cache m
25230 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  ode enabled */. 
25240 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20   u32 szPma;     
25250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25260 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f     /* Maximum So
25270 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f  rter PMA size */
25280 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20  .  /* The above 
25290 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c  might be initial
252a0 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f  ized to non-zero
252b0 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
252c0 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a   need to always.
252d0 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62    ** initially b
252e0 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e  e zero, however.
252f0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74   */.  int isInit
25300 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25310 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
25320 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61  after initializa
25330 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65  tion has finishe
25340 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f  d */.  int inPro
25350 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20  gress;          
25360 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
25370 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a   while initializ
25380 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
25390 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74  s */.  int isMut
253a0 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  exInit;         
253b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
253c0 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61   after mutexes a
253d0 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  re initialized *
253e0 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63  /.  int isMalloc
253f0 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
25400 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
25410 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
25420 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
25430 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b  nt isPCacheInit;
25440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25450 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
25460 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
25470 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ized */.  int nR
25480 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  efInitMutex;    
25490 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
254a0 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f  umber of users o
254b0 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a  f pInitMutex */.
254c0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
254d0 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  *pInitMutex;    
254e0 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65      /* Mutex use
254f0 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69  d by sqlite3_ini
25500 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76  tialize() */.  v
25510 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64  oid (*xLog)(void
25520 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
25530 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20  *); /* Function 
25540 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20  for logging */. 
25550 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20   void *pLogArg; 
25560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25570 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
25580 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28  rgument to xLog(
25590 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ) */.#ifdef SQLI
255a0 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47  TE_ENABLE_SQLLOG
255b0 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67  .  void(*xSqllog
255c0 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
255d0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e  ,const char*, in
255e0 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c  t);.  void *pSql
255f0 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23  logArg;.#endif.#
25600 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42  ifdef SQLITE_VDB
25610 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20  E_COVERAGE.  /* 
25620 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  The following ca
25630 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e  llback (if not N
25640 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ULL) is invoked 
25650 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72  on every VDBE br
25660 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74  anch.  ** operat
25670 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61  ion.  Set the ca
25680 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c  llback using SQL
25690 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42  ITE_TESTCTRL_VDB
256a0 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f  E_COVERAGE..  */
256b0 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42  .  void (*xVdbeB
256c0 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 75 6e 73  ranch)(void*,uns
256d0 69 67 6e 65 64 20 69 53 72 63 4c 69 6e 65 2c 75  igned iSrcLine,u
256e0 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b  8 eThis,u8 eMx);
256f0 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f    /* Callback */
25700 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72  .  void *pVdbeBr
25710 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20  anchArg;        
25720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25730 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25740 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  1st argument */.
25750 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
25760 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 45 53 45  LITE_ENABLE_DESE
25770 52 49 41 4c 49 5a 45 0a 20 20 73 71 6c 69 74 65  RIALIZE.  sqlite
25780 33 5f 69 6e 74 36 34 20 6d 78 4d 65 6d 64 62 53  3_int64 mxMemdbS
25790 69 7a 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 44  ize;        /* D
257a0 65 66 61 75 6c 74 20 6d 61 78 20 6d 65 6d 64 62  efault max memdb
257b0 20 73 69 7a 65 20 2a 2f 0a 23 65 6e 64 69 66 0a   size */.#endif.
257c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55  #ifndef SQLITE_U
257d0 4e 54 45 53 54 41 42 4c 45 0a 20 20 69 6e 74 20  NTESTABLE.  int 
257e0 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29  (*xTestCallback)
257f0 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a  (int);        /*
25800 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69   Invoked by sqli
25810 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f  te3FaultSim() */
25820 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c  .#endif.  int bL
25830 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20  ocaltimeFault;  
25840 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
25850 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61  rue to fail loca
25860 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f  ltime() calls */
25870 0a 20 20 69 6e 74 20 62 49 6e 74 65 72 6e 61 6c  .  int bInternal
25880 46 75 6e 63 74 69 6f 6e 73 3b 20 20 20 20 20 20  Functions;      
25890 20 20 20 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c       /* Internal
258a0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 61   SQL functions a
258b0 72 65 20 76 69 73 69 62 6c 65 20 2a 2f 0a 20 20  re visible */.  
258c0 69 6e 74 20 69 4f 6e 63 65 52 65 73 65 74 54 68  int iOnceResetTh
258d0 72 65 73 68 6f 6c 64 3b 20 20 20 20 20 20 20 20  reshold;        
258e0 20 20 2f 2a 20 57 68 65 6e 20 74 6f 20 72 65 73    /* When to res
258f0 65 74 20 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e 74  et OP_Once count
25900 65 72 73 20 2a 2f 0a 20 20 75 33 32 20 73 7a 53  ers */.  u32 szS
25910 6f 72 74 65 72 52 65 66 3b 20 20 20 20 20 20 20  orterRef;       
25920 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69             /* Mi
25930 6e 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20  n size in bytes 
25940 74 6f 20 75 73 65 20 73 6f 72 74 65 72 2d 72 65  to use sorter-re
25950 66 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  fs */.  unsigned
25960 20 69 6e 74 20 69 50 72 6e 67 53 65 65 64 3b 20   int iPrngSeed; 
25970 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 74            /* Alt
25980 65 72 6e 61 74 69 76 65 20 66 69 78 65 64 20 73  ernative fixed s
25990 65 65 64 20 66 6f 72 20 74 68 65 20 50 52 4e 47  eed for the PRNG
259a0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
259b0 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  is macro is used
259c0 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72   inside of asser
259d0 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74  t() statements t
259e0 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a  o indicate that.
259f0 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20 69 73  ** the assert is
25a00 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61   only valid on a
25a10 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74   well-formed dat
25a20 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20  abase.  Instead 
25a30 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73  of:.**.**     as
25a40 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a  sert( X );.**.**
25a50 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a   One writes:.**.
25a60 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
25a70 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29   || CORRUPT_DB )
25a80 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f  ;.**.** CORRUPT_
25a90 44 42 20 69 73 20 74 72 75 65 20 64 75 72 69 6e  DB is true durin
25aa0 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69  g normal operati
25ab0 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20  on.  CORRUPT_DB 
25ac0 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74  does not indicat
25ad0 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61  e.** that the da
25ae0 74 61 62 61 73 65 20 69 73 20 64 65 66 69 6e 69  tabase is defini
25af0 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e  tely corrupt, on
25b00 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67 68 74  ly that it might
25b10 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20   be corrupt..** 
25b20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61  For most test ca
25b30 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20  ses, CORRUPT_DB 
25b40 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20  is set to false 
25b50 75 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a  using a special.
25b60 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
25b70 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73  control().  This
25b80 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28   enables assert(
25b90 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  ) statements to 
25ba0 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20  prove.** things 
25bb0 74 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20  that are always 
25bc0 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f  true for well-fo
25bd0 72 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  rmed databases..
25be0 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55  */.#define CORRU
25bf0 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43  PT_DB  (sqlite3C
25c00 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75  onfig.neverCorru
25c10 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f  pt==0)../*.** Co
25c20 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61  ntext pointer pa
25c30 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67  ssed down throug
25c40 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e  h the tree-walk.
25c50 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65  .*/.struct Walke
25c60 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
25c70 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
25c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c90 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78  /* Parser contex
25ca0 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  t.  */.  int (*x
25cb0 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61  ExprCallback)(Wa
25cc0 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20  lker*, Expr*);  
25cd0 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66     /* Callback f
25ce0 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  or expressions *
25cf0 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63  /.  int (*xSelec
25d00 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  tCallback)(Walke
25d10 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a  r*,Select*);  /*
25d20 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   Callback for SE
25d30 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20  LECTs */.  void 
25d40 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
25d50 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  k2)(Walker*,Sele
25d60 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63  ct*);/* Second c
25d70 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45  allback for SELE
25d80 43 54 73 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c  CTs */.  int wal
25d90 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20  kerDepth;       
25da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25db0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
25dc0 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20  subqueries */.  
25dd0 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20  u8 eCode;       
25de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25df0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73            /* A s
25e00 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20  mall processing 
25e10 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  code */.  union 
25e20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
25e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e40 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74      /* Extra dat
25e50 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a  a for callback *
25e60 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78  /.    NameContex
25e70 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20  t *pNC;         
25e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e90 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78  /* Naming contex
25ea0 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20  t */.    int n; 
25eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ed0 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20     /* A counter 
25ee0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b  */.    int iCur;
25ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f10 20 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d   /* A cursor num
25f20 62 65 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69  ber */.    SrcLi
25f30 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
25f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f50 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61       /* FROM cla
25f60 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  use */.    struc
25f70 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63  t SrcCount *pSrc
25f80 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20  Count;          
25f90 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67       /* Counting
25fa0 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63   column referenc
25fb0 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  es */.    struct
25fc0 20 43 43 75 72 48 69 6e 74 20 2a 70 43 43 75 72   CCurHint *pCCur
25fd0 48 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  Hint;           
25fe0 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 63      /* Used by c
25ff0 6f 64 65 43 75 72 73 6f 72 48 69 6e 74 28 29 20  odeCursorHint() 
26000 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f  */.    int *aiCo
26010 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
26020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26030 20 2f 2a 20 61 72 72 61 79 20 6f 66 20 63 6f 6c   /* array of col
26040 75 6d 6e 20 69 6e 64 65 78 65 73 20 2a 2f 0a 20  umn indexes */. 
26050 20 20 20 73 74 72 75 63 74 20 49 64 78 43 6f 76     struct IdxCov
26060 65 72 20 2a 70 49 64 78 43 6f 76 65 72 3b 20 20  er *pIdxCover;  
26070 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26080 43 68 65 63 6b 20 66 6f 72 20 69 6e 64 65 78 20  Check for index 
26090 63 6f 76 65 72 61 67 65 20 2a 2f 0a 20 20 20 20  coverage */.    
260a0 73 74 72 75 63 74 20 49 64 78 45 78 70 72 54 72  struct IdxExprTr
260b0 61 6e 73 20 2a 70 49 64 78 54 72 61 6e 73 3b 20  ans *pIdxTrans; 
260c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
260d0 76 65 72 74 20 69 64 78 65 64 20 65 78 70 72 20  vert idxed expr 
260e0 74 6f 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20  to column */.   
260f0 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
26100 70 42 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  pBy;            
26110 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 52             /* GR
26120 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  OUP BY clause */
26130 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
26140 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lect;           
26150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26160 2a 20 48 41 56 49 4e 47 20 74 6f 20 57 48 45 52  * HAVING to WHER
26170 45 20 63 6c 61 75 73 65 20 63 74 78 20 2a 2f 0a  E clause ctx */.
26180 20 20 20 20 73 74 72 75 63 74 20 57 69 6e 64 6f      struct Windo
26190 77 52 65 77 72 69 74 65 20 2a 70 52 65 77 72 69  wRewrite *pRewri
261a0 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  te;           /*
261b0 20 57 69 6e 64 6f 77 20 72 65 77 72 69 74 65 20   Window rewrite 
261c0 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 73  context */.    s
261d0 74 72 75 63 74 20 57 68 65 72 65 43 6f 6e 73 74  truct WhereConst
261e0 20 2a 70 43 6f 6e 73 74 3b 20 20 20 20 20 20 20   *pConst;       
261f0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52           /* WHER
26200 45 20 63 6c 61 75 73 65 20 63 6f 6e 73 74 61 6e  E clause constan
26210 74 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  ts */.    struct
26220 20 52 65 6e 61 6d 65 43 74 78 20 2a 70 52 65 6e   RenameCtx *pRen
26230 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
26240 20 20 20 20 2f 2a 20 52 45 4e 41 4d 45 20 43 4f      /* RENAME CO
26250 4c 55 4d 4e 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  LUMN context */.
26260 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f    } u;.};../* Fo
26270 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f  rward declaratio
26280 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ns */.int sqlite
26290 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72  3WalkExpr(Walker
262a0 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
262b0 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69  qlite3WalkExprLi
262c0 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  st(Walker*, Expr
262d0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
262e0 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61  te3WalkSelect(Wa
262f0 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
26300 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
26310 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65  SelectExpr(Walke
26320 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
26330 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
26340 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c  ectFrom(Walker*,
26350 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
26360 71 6c 69 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f  qlite3ExprWalkNo
26370 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  op(Walker*, Expr
26380 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
26390 65 6c 65 63 74 57 61 6c 6b 4e 6f 6f 70 28 57 61  electWalkNoop(Wa
263a0 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
263b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65  .int sqlite3Sele
263c0 63 74 57 61 6c 6b 46 61 69 6c 28 57 61 6c 6b 65  ctWalkFail(Walke
263d0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 69  r*, Select*);.#i
263e0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
263f0 47 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  G.void sqlite3Se
26400 6c 65 63 74 57 61 6c 6b 41 73 73 65 72 74 32 28  lectWalkAssert2(
26410 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
26420 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
26430 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
26440 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65  m the parse-tree
26450 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69   walking primiti
26460 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a  ves and their.**
26470 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23   callbacks..*/.#
26480 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69  define WRC_Conti
26490 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f  nue    0   /* Co
264a0 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f  ntinue down into
264b0 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65   children */.#de
264c0 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20  fine WRC_Prune  
264d0 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74       1   /* Omit
264e0 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f   children but co
264f0 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73  ntinue walking s
26500 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69  iblings */.#defi
26510 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20  ne WRC_Abort    
26520 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f     2   /* Abando
26530 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20  n the tree walk 
26540 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
26550 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
26560 72 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e  ructure represen
26570 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20  ts a set of one 
26580 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20  or more CTEs.** 
26590 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  (common table ex
265a0 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74  pressions) creat
265b0 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57  ed by a single W
265c0 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73  ITH clause..*/.s
265d0 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69  truct With {.  i
265e0 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20  nt nCte;        
265f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26600 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73  * Number of CTEs
26610 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
26620 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  use */.  With *p
26630 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20  Outer;          
26640 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74           /* Cont
26650 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75  aining WITH clau
26660 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  se, or NULL */. 
26670 20 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20   struct Cte {   
26680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26690 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45   /* For each CTE
266a0 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
266b0 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63  use.... */.    c
266c0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
266d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
266e0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43  * Name of this C
266f0 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69  TE */.    ExprLi
26700 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20  st *pCols;      
26710 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
26720 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f  t of explicit co
26730 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e  lumn names, or N
26740 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ULL */.    Selec
26750 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
26760 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
26770 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
26780 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20  this CTE */.    
26790 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 65  const char *zCte
267a0 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
267b0 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
267c0 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65   for circular re
267d0 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20  ferences */.  } 
267e0 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66  a[1];.};..#ifdef
267f0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
26800 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
26810 6f 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20  of the TreeView 
26820 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66  object is used f
26830 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20  or printing the 
26840 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61  content of.** da
26850 74 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e  ta structures on
26860 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
26870 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72  ntf() using a tr
26880 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f  ee-like view..*/
26890 0a 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77  .struct TreeView
268a0 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b   {.  int iLevel;
268b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
268c0 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74  Which level of t
268d0 68 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f  he tree we are o
268e0 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65  n */.  u8  bLine
268f0 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f  [100];         /
26900 2a 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20  * Draw vertical 
26910 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62  in column i if b
26920 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20  Line[i] is true 
26930 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  */.};.#endif /* 
26940 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
26950 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65  ./*.** This obje
26960 63 74 20 69 73 20 75 73 65 64 20 69 6e 20 76 61  ct is used in va
26970 72 69 6f 75 73 20 77 61 79 73 2c 20 6d 6f 73 74  rious ways, most
26980 20 28 62 75 74 20 6e 6f 74 20 61 6c 6c 29 20 72   (but not all) r
26990 65 6c 61 74 65 64 20 74 6f 20 77 69 6e 64 6f 77  elated to window
269a0 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  .** functions..*
269b0 2a 0a 2a 2a 20 20 20 28 31 29 20 41 20 73 69 6e  *.**   (1) A sin
269c0 67 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  gle instance of 
269d0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
269e0 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
269f0 65 0a 2a 2a 20 20 20 20 20 20 20 74 68 65 20 45  e.**       the E
26a00 78 70 72 2e 79 2e 70 57 69 6e 20 66 69 65 6c 64  xpr.y.pWin field
26a10 20 66 6f 72 20 65 61 63 68 20 77 69 6e 64 6f 77   for each window
26a20 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20 61 6e 20   function in an 
26a30 65 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 2e  expression tree.
26a40 0a 2a 2a 20 20 20 20 20 20 20 54 68 69 73 20 6f  .**       This o
26a50 62 6a 65 63 74 20 68 6f 6c 64 73 20 74 68 65 20  bject holds the 
26a60 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 6f 6e 74  information cont
26a70 61 69 6e 65 64 20 69 6e 20 74 68 65 20 4f 56 45  ained in the OVE
26a80 52 20 63 6c 61 75 73 65 2c 0a 2a 2a 20 20 20 20  R clause,.**    
26a90 20 20 20 70 6c 75 73 20 61 64 64 69 74 69 6f 6e     plus addition
26aa0 61 6c 20 66 69 65 6c 64 73 20 75 73 65 64 20 64  al fields used d
26ab0 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72  uring code gener
26ac0 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28  ation..**.**   (
26ad0 32 29 20 41 6c 6c 20 77 69 6e 64 6f 77 20 66 75  2) All window fu
26ae0 6e 63 74 69 6f 6e 73 20 69 6e 20 61 20 73 69 6e  nctions in a sin
26af0 67 6c 65 20 53 45 4c 45 43 54 20 66 6f 72 6d 20  gle SELECT form 
26b00 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 0a 2a 2a  a linked-list.**
26b10 20 20 20 20 20 20 20 61 74 74 61 63 68 65 64 20         attached 
26b20 74 6f 20 53 65 6c 65 63 74 2e 70 57 69 6e 2e 20  to Select.pWin. 
26b30 20 54 68 65 20 57 69 6e 64 6f 77 2e 70 46 75 6e   The Window.pFun
26b40 63 20 61 6e 64 20 57 69 6e 64 6f 77 2e 70 45 78  c and Window.pEx
26b50 70 72 0a 2a 2a 20 20 20 20 20 20 20 66 69 65 6c  pr.**       fiel
26b60 64 73 20 70 6f 69 6e 74 20 62 61 63 6b 20 74 6f  ds point back to
26b70 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
26b80 74 68 61 74 20 69 73 20 74 68 65 20 77 69 6e 64  that is the wind
26b90 6f 77 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a  ow function..**.
26ba0 2a 2a 20 20 20 28 33 29 20 54 68 65 20 74 65 72  **   (3) The ter
26bb0 6d 73 20 6f 66 20 74 68 65 20 57 49 4e 44 4f 57  ms of the WINDOW
26bc0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
26bd0 45 43 54 20 61 72 65 20 69 6e 73 74 61 6e 63 65  ECT are instance
26be0 73 20 6f 66 20 74 68 69 73 0a 2a 2a 20 20 20 20  s of this.**    
26bf0 20 20 20 6f 62 6a 65 63 74 20 6f 6e 20 61 20 6c     object on a l
26c00 69 6e 6b 65 64 20 6c 69 73 74 20 61 74 74 61 63  inked list attac
26c10 68 65 64 20 74 6f 20 53 65 6c 65 63 74 2e 70 57  hed to Select.pW
26c20 69 6e 44 65 66 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20  inDefn..**.**   
26c30 28 34 29 20 46 6f 72 20 61 6e 20 61 67 67 72 65  (4) For an aggre
26c40 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69  gate function wi
26c50 74 68 20 61 20 46 49 4c 54 45 52 20 63 6c 61 75  th a FILTER clau
26c60 73 65 2c 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a  se, an instance.
26c70 2a 2a 20 20 20 20 20 20 20 6f 66 20 74 68 69 73  **       of this
26c80 20 6f 62 6a 65 63 74 20 69 73 20 73 74 6f 72 65   object is store
26c90 64 20 69 6e 20 45 78 70 72 2e 79 2e 70 57 69 6e  d in Expr.y.pWin
26ca0 20 77 69 74 68 20 65 46 72 6d 54 79 70 65 20 73   with eFrmType s
26cb0 65 74 20 74 6f 0a 2a 2a 20 20 20 20 20 20 20 54  et to.**       T
26cc0 4b 5f 46 49 4c 54 45 52 2e 20 49 6e 20 74 68 69  K_FILTER. In thi
26cd0 73 20 63 61 73 65 20 74 68 65 20 6f 6e 6c 79 20  s case the only 
26ce0 66 69 65 6c 64 20 75 73 65 64 20 69 73 20 57 69  field used is Wi
26cf0 6e 64 6f 77 2e 70 46 69 6c 74 65 72 2e 0a 2a 2a  ndow.pFilter..**
26d00 0a 2a 2a 20 54 68 65 20 75 73 65 73 20 28 31 29  .** The uses (1)
26d10 20 61 6e 64 20 28 32 29 20 61 72 65 20 72 65 61   and (2) are rea
26d20 6c 6c 79 20 74 68 65 20 73 61 6d 65 20 57 69 6e  lly the same Win
26d30 64 6f 77 20 6f 62 6a 65 63 74 20 74 68 61 74 20  dow object that 
26d40 6a 75 73 74 20 68 61 70 70 65 6e 73 0a 2a 2a 20  just happens.** 
26d50 74 6f 20 62 65 20 61 63 63 65 73 73 69 62 6c 65  to be accessible
26d60 20 69 6e 20 74 77 6f 20 64 69 66 66 65 72 65 6e   in two differen
26d70 74 20 77 61 79 73 2e 20 20 55 73 65 20 63 61 73  t ways.  Use cas
26d80 65 20 28 33 29 20 61 72 65 20 73 65 70 61 72 61  e (3) are separa
26d90 74 65 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73  te objects..*/.s
26da0 74 72 75 63 74 20 57 69 6e 64 6f 77 20 7b 0a 20  truct Window {. 
26db0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
26dc0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
26dd0 20 6f 66 20 77 69 6e 64 6f 77 20 28 6d 61 79 20   of window (may 
26de0 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 63 68  be NULL) */.  ch
26df0 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20  ar *zBase;      
26e00 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
26e10 20 62 61 73 65 20 77 69 6e 64 6f 77 20 66 6f 72   base window for
26e20 20 63 68 61 69 6e 69 6e 67 20 28 6d 61 79 20 62   chaining (may b
26e30 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45 78 70  e NULL) */.  Exp
26e40 72 4c 69 73 74 20 2a 70 50 61 72 74 69 74 69 6f  rList *pPartitio
26e50 6e 3b 20 20 20 2f 2a 20 50 41 52 54 49 54 49 4f  n;   /* PARTITIO
26e60 4e 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  N BY clause */. 
26e70 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65   ExprList *pOrde
26e80 72 42 79 3b 20 20 20 20 20 2f 2a 20 4f 52 44 45  rBy;     /* ORDE
26e90 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  R BY clause */. 
26ea0 20 75 38 20 65 46 72 6d 54 79 70 65 3b 20 20 20   u8 eFrmType;   
26eb0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52           /* TK_R
26ec0 41 4e 47 45 2c 20 54 4b 5f 47 52 4f 55 50 53 2c  ANGE, TK_GROUPS,
26ed0 20 54 4b 5f 52 4f 57 53 2c 20 6f 72 20 30 20 2a   TK_ROWS, or 0 *
26ee0 2f 0a 20 20 75 38 20 65 53 74 61 72 74 3b 20 20  /.  u8 eStart;  
26ef0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
26f00 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52 52 45 4e  NBOUNDED, CURREN
26f10 54 2c 20 50 52 45 43 45 44 49 4e 47 20 6f 72 20  T, PRECEDING or 
26f20 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 75  FOLLOWING */.  u
26f30 38 20 65 45 6e 64 3b 20 20 20 20 20 20 20 20 20  8 eEnd;         
26f40 20 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e         /* UNBOUN
26f50 44 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50 52  DED, CURRENT, PR
26f60 45 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f  ECEDING or FOLLO
26f70 57 49 4e 47 20 2a 2f 0a 20 20 75 38 20 62 49 6d  WING */.  u8 bIm
26f80 70 6c 69 63 69 74 46 72 61 6d 65 3b 20 20 20 20  plicitFrame;    
26f90 20 20 2f 2a 20 54 72 75 65 20 69 66 20 66 72 61    /* True if fra
26fa0 6d 65 20 77 61 73 20 69 6d 70 6c 69 63 69 74 6c  me was implicitl
26fb0 79 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a 20  y specified */. 
26fc0 20 75 38 20 65 45 78 63 6c 75 64 65 3b 20 20 20   u8 eExclude;   
26fd0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 4e           /* TK_N
26fe0 4f 2c 20 54 4b 5f 43 55 52 52 45 4e 54 2c 20 54  O, TK_CURRENT, T
26ff0 4b 5f 54 49 45 53 2c 20 54 4b 5f 47 52 4f 55 50  K_TIES, TK_GROUP
27000 2c 20 6f 72 20 30 20 2a 2f 0a 20 20 45 78 70 72  , or 0 */.  Expr
27010 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
27020 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
27030 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 50 52  n for "<expr> PR
27040 45 43 45 44 49 4e 47 22 20 2a 2f 0a 20 20 45 78  ECEDING" */.  Ex
27050 70 72 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  pr *pEnd;       
27060 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
27070 69 6f 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20  ion for "<expr> 
27080 46 4f 4c 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20 20  FOLLOWING" */.  
27090 57 69 6e 64 6f 77 20 2a 2a 70 70 54 68 69 73 3b  Window **ppThis;
270a0 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
270b0 65 72 20 74 6f 20 74 68 69 73 20 6f 62 6a 65 63  er to this objec
270c0 74 20 69 6e 20 53 65 6c 65 63 74 2e 70 57 69 6e  t in Select.pWin
270d0 20 6c 69 73 74 20 2a 2f 0a 20 20 57 69 6e 64 6f   list */.  Windo
270e0 77 20 2a 70 4e 65 78 74 57 69 6e 3b 20 20 20 20  w *pNextWin;    
270f0 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 6e 64 6f     /* Next windo
27100 77 20 66 75 6e 63 74 69 6f 6e 20 62 65 6c 6f 6e  w function belon
27110 67 69 6e 67 20 74 6f 20 74 68 69 73 20 53 45 4c  ging to this SEL
27120 45 43 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ECT */.  Expr *p
27130 46 69 6c 74 65 72 3b 20 20 20 20 20 20 20 20 20  Filter;         
27140 20 2f 2a 20 54 68 65 20 46 49 4c 54 45 52 20 65   /* The FILTER e
27150 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 46  xpression */.  F
27160 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
27170 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 75         /* The fu
27180 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  nction */.  int 
27190 69 45 70 68 43 73 72 3b 20 20 20 20 20 20 20 20  iEphCsr;        
271a0 20 20 20 20 2f 2a 20 50 61 72 74 69 74 69 6f 6e      /* Partition
271b0 20 62 75 66 66 65 72 20 6f 72 20 50 65 65 72 20   buffer or Peer 
271c0 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20  buffer */.  int 
271d0 72 65 67 41 63 63 75 6d 3b 0a 20 20 69 6e 74 20  regAccum;.  int 
271e0 72 65 67 52 65 73 75 6c 74 3b 0a 20 20 69 6e 74  regResult;.  int
271f0 20 63 73 72 41 70 70 3b 20 20 20 20 20 20 20 20   csrApp;        
27200 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e       /* Function
27210 20 63 75 72 73 6f 72 20 28 75 73 65 64 20 62 79   cursor (used by
27220 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69   min/max) */.  i
27230 6e 74 20 72 65 67 41 70 70 3b 20 20 20 20 20 20  nt regApp;      
27240 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69         /* Functi
27250 6f 6e 20 72 65 67 69 73 74 65 72 20 28 61 6c 73  on register (als
27260 6f 20 75 73 65 64 20 62 79 20 6d 69 6e 2f 6d 61  o used by min/ma
27270 78 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 50  x) */.  int regP
27280 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  art;            
27290 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 65 67 69  /* Array of regi
272a0 73 74 65 72 73 20 66 6f 72 20 50 41 52 54 49 54  sters for PARTIT
272b0 49 4f 4e 20 42 59 20 76 61 6c 75 65 73 20 2a 2f  ION BY values */
272c0 0a 20 20 45 78 70 72 20 2a 70 4f 77 6e 65 72 3b  .  Expr *pOwner;
272d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
272e0 70 72 65 73 73 69 6f 6e 20 6f 62 6a 65 63 74 20  pression object 
272f0 74 68 69 73 20 77 69 6e 64 6f 77 20 69 73 20 61  this window is a
27300 74 74 61 63 68 65 64 20 74 6f 20 2a 2f 0a 20 20  ttached to */.  
27310 69 6e 74 20 6e 42 75 66 66 65 72 43 6f 6c 3b 20  int nBufferCol; 
27320 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
27330 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
27340 62 75 66 66 65 72 20 74 61 62 6c 65 20 2a 2f 0a  buffer table */.
27350 20 20 69 6e 74 20 69 41 72 67 43 6f 6c 3b 20 20    int iArgCol;  
27360 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66            /* Off
27370 73 65 74 20 6f 66 20 66 69 72 73 74 20 61 72 67  set of first arg
27380 75 6d 65 6e 74 20 66 6f 72 20 74 68 69 73 20 66  ument for this f
27390 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  unction */.  int
273a0 20 72 65 67 4f 6e 65 3b 20 20 20 20 20 20 20 20   regOne;        
273b0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
273c0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 63 6f 6e 73   containing cons
273d0 74 61 6e 74 20 76 61 6c 75 65 20 31 20 2a 2f 0a  tant value 1 */.
273e0 20 20 69 6e 74 20 72 65 67 53 74 61 72 74 52 6f    int regStartRo
273f0 77 69 64 3b 0a 20 20 69 6e 74 20 72 65 67 45 6e  wid;.  int regEn
27400 64 52 6f 77 69 64 3b 0a 7d 3b 0a 0a 23 69 66 6e  dRowid;.};..#ifn
27410 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27420 57 49 4e 44 4f 57 46 55 4e 43 0a 76 6f 69 64 20  WINDOWFUNC.void 
27430 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 44 65 6c  sqlite3WindowDel
27440 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 57 69  ete(sqlite3*, Wi
27450 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndow*);.void sql
27460 69 74 65 33 57 69 6e 64 6f 77 55 6e 6c 69 6e 6b  ite3WindowUnlink
27470 46 72 6f 6d 53 65 6c 65 63 74 28 57 69 6e 64 6f  FromSelect(Windo
27480 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  w*);.void sqlite
27490 33 57 69 6e 64 6f 77 4c 69 73 74 44 65 6c 65 74  3WindowListDelet
274a0 65 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57  e(sqlite3 *db, W
274b0 69 6e 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64 6f  indow *p);.Windo
274c0 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  w *sqlite3Window
274d0 41 6c 6c 6f 63 28 50 61 72 73 65 2a 2c 20 69 6e  Alloc(Parse*, in
274e0 74 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 69  t, int, Expr*, i
274f0 6e 74 20 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b  nt , Expr*, u8);
27500 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
27510 64 6f 77 41 74 74 61 63 68 28 50 61 72 73 65 2a  dowAttach(Parse*
27520 2c 20 45 78 70 72 2a 2c 20 57 69 6e 64 6f 77 2a  , Expr*, Window*
27530 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
27540 69 6e 64 6f 77 4c 69 6e 6b 28 53 65 6c 65 63 74  indowLink(Select
27550 20 2a 70 53 65 6c 2c 20 57 69 6e 64 6f 77 20 2a   *pSel, Window *
27560 70 57 69 6e 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pWin);.int sqlit
27570 65 33 57 69 6e 64 6f 77 43 6f 6d 70 61 72 65 28  e3WindowCompare(
27580 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c  Parse*, Window*,
27590 20 57 69 6e 64 6f 77 2a 2c 20 69 6e 74 29 3b 0a   Window*, int);.
275a0 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64  void sqlite3Wind
275b0 6f 77 43 6f 64 65 49 6e 69 74 28 50 61 72 73 65  owCodeInit(Parse
275c0 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69  *, Window*);.voi
275d0 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43  d sqlite3WindowC
275e0 6f 64 65 53 74 65 70 28 50 61 72 73 65 2a 2c 20  odeStep(Parse*, 
275f0 53 65 6c 65 63 74 2a 2c 20 57 68 65 72 65 49 6e  Select*, WhereIn
27600 66 6f 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  fo*, int, int);.
27610 69 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  int sqlite3Windo
27620 77 52 65 77 72 69 74 65 28 50 61 72 73 65 2a 2c  wRewrite(Parse*,
27630 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
27640 71 6c 69 74 65 33 45 78 70 61 6e 64 53 75 62 71  qlite3ExpandSubq
27650 75 65 72 79 28 50 61 72 73 65 2a 2c 20 73 74 72  uery(Parse*, str
27660 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
27670 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27680 57 69 6e 64 6f 77 55 70 64 61 74 65 28 50 61 72  WindowUpdate(Par
27690 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69  se*, Window*, Wi
276a0 6e 64 6f 77 2a 2c 20 46 75 6e 63 44 65 66 2a 29  ndow*, FuncDef*)
276b0 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65  ;.Window *sqlite
276c0 33 57 69 6e 64 6f 77 44 75 70 28 73 71 6c 69 74  3WindowDup(sqlit
276d0 65 33 20 2a 64 62 2c 20 45 78 70 72 20 2a 70 4f  e3 *db, Expr *pO
276e0 77 6e 65 72 2c 20 57 69 6e 64 6f 77 20 2a 70 29  wner, Window *p)
276f0 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65  ;.Window *sqlite
27700 33 57 69 6e 64 6f 77 4c 69 73 74 44 75 70 28 73  3WindowListDup(s
27710 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e 64  qlite3 *db, Wind
27720 6f 77 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c  ow *p);.void sql
27730 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69  ite3WindowFuncti
27740 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
27750 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 68 61  sqlite3WindowCha
27760 69 6e 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f  in(Parse*, Windo
27770 77 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 57 69  w*, Window*);.Wi
27780 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e  ndow *sqlite3Win
27790 64 6f 77 41 73 73 65 6d 62 6c 65 28 50 61 72 73  dowAssemble(Pars
277a0 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 45 78 70  e*, Window*, Exp
277b0 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  rList*, ExprList
277c0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 23 65 6c 73  *, Token*);.#els
277d0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
277e0 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 61  e3WindowDelete(a
277f0 2c 62 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,b).# define sql
27800 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69  ite3WindowFuncti
27810 6f 6e 73 28 29 0a 23 20 64 65 66 69 6e 65 20 73  ons().# define s
27820 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61  qlite3WindowAtta
27830 63 68 28 61 2c 62 2c 63 29 0a 23 65 6e 64 69 66  ch(a,b,c).#endif
27840 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67  ../*.** Assuming
27850 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74   zIn points to t
27860 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
27870 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74   a UTF-8 charact
27880 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a  er,.** advance z
27890 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  In to point to t
278a0 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
278b0 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20   the next UTF-8 
278c0 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64  character..*/.#d
278d0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49  efine SQLITE_SKI
278e0 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20  P_UTF8(zIn) {   
278f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27900 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28       \.  if( (*(
27910 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b  zIn++))>=0xc0 ){
27920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
27940 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e      while( (*zIn
27950 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29   & 0xc0)==0x80 )
27960 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20  { zIn++; }      
27970 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20         \.  }    
27980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279b0 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  \.}../*.** The S
279c0 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63  QLITE_*_BKPT mac
279d0 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75  ros are substitu
279e0 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f  tes for the erro
279f0 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20  r codes with.** 
27a00 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75  the same name bu
27a10 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42  t without the _B
27a20 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65  KPT suffix.  The
27a30 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65  se macros invoke
27a40 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61  .** routines tha
27a50 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e  t report the lin
27a60 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63  e-number on whic
27a70 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67  h the error orig
27a80 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  inated.** using 
27a90 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20  sqlite3_log().  
27aa0 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73  The routines als
27ab0 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76  o provide a conv
27ac0 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20  enient place.** 
27ad0 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65  to set a debugge
27ae0 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f  r breakpoint..*/
27af0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 6f  .int sqlite3Repo
27b00 72 74 45 72 72 6f 72 28 69 6e 74 20 69 45 72 72  rtError(int iErr
27b10 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f  , int lineno, co
27b20 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 29  nst char *zType)
27b30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  ;.int sqlite3Cor
27b40 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a  ruptError(int);.
27b50 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73  int sqlite3Misus
27b60 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  eError(int);.int
27b70 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
27b80 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66  Error(int);.#def
27b90 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
27ba0 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  PT_BKPT sqlite3C
27bb0 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
27bc0 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
27bd0 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
27be0 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
27bf0 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
27c00 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e  efine SQLITE_CAN
27c10 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74  TOPEN_BKPT sqlit
27c20 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
27c30 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66  __LINE__).#ifdef
27c40 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
27c50 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d  int sqlite3Nomem
27c60 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e  Error(int);.  in
27c70 74 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f  t sqlite3Ioerrno
27c80 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20  memError(int);. 
27c90 20 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72   int sqlite3Corr
27ca0 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74  uptPgnoError(int
27cb0 2c 50 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65  ,Pgno);.# define
27cc0 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
27cd0 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45  PT sqlite3NomemE
27ce0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
27cf0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
27d00 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  OERR_NOMEM_BKPT 
27d10 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65  sqlite3Ioerrnome
27d20 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  mError(__LINE__)
27d30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
27d40 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29  _CORRUPT_PGNO(P)
27d50 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50   sqlite3CorruptP
27d60 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  gnoError(__LINE_
27d70 5f 2c 28 50 29 29 0a 23 65 6c 73 65 0a 23 20 64  _,(P)).#else.# d
27d80 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d  efine SQLITE_NOM
27d90 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e  EM_BKPT SQLITE_N
27da0 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51  OMEM.# define SQ
27db0 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
27dc0 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45  _BKPT SQLITE_IOE
27dd0 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e  RR_NOMEM.# defin
27de0 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
27df0 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33  _PGNO(P) sqlite3
27e00 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c  CorruptError(__L
27e10 49 4e 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f  INE__).#endif../
27e20 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54  *.** FTS3 and FT
27e30 53 34 20 62 6f 74 68 20 72 65 71 75 69 72 65 20  S4 both require 
27e40 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75  virtual table su
27e50 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66  pport.*/.#if def
27e60 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
27e70 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23  _VIRTUALTABLE).#
27e80 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
27e90 41 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65  ABLE_FTS3.# unde
27ea0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
27eb0 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  FTS4.#endif../*.
27ec0 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c  ** FTS4 is reall
27ed0 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66  y an extension f
27ee0 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20  or FTS3.  It is 
27ef0 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  enabled using th
27f00 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  e.** SQLITE_ENAB
27f10 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20  LE_FTS3 macro.  
27f20 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e  But to avoid con
27f30 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63  fusion we also c
27f40 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54  all.** the SQLIT
27f50 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61  E_ENABLE_FTS4 ma
27f60 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20  cro to serve as 
27f70 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c  an alias for SQL
27f80 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e  ITE_ENABLE_FTS3.
27f90 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
27fa0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
27fb0 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  S4) && !defined(
27fc0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
27fd0 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  S3).# define SQL
27fe0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
27ff0 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
28000 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64  The ctype.h head
28010 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72  er is needed for
28020 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65   non-ASCII syste
28030 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a  ms.  It is also.
28040 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53  ** needed by FTS
28050 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69  3 when FTS3 is i
28060 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61  ncluded in the a
28070 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  malgamation..*/.
28080 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
28090 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a  ITE_ASCII) || \.
280a0 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c      (defined(SQL
280b0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
280c0 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
280d0 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29  TE_AMALGAMATION)
280e0 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79  ).# include <cty
280f0 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  pe.h>.#endif../*
28100 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
28110 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74  g macros mimic t
28120 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72  he standard libr
28130 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ary functions to
28140 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70  upper(),.** issp
28150 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29  ace(), isalnum()
28160 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20  , isdigit() and 
28170 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70  isxdigit(), resp
28180 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a  ectively. The.**
28190 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73   sqlite versions
281a0 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41   only work for A
281b0 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c  SCII characters,
281c0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c   regardless of l
281d0 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ocale..*/.#ifdef
281e0 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20   SQLITE_ASCII.# 
281f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
28200 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e  upper(x)  ((x)&~
28210 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
28220 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
28230 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65  (x)]&0x20)).# de
28240 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
28250 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ace(x)   (sqlite
28260 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
28270 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
28280 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  01).# define sql
28290 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
282a0 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
282b0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
282c0 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65  )(x)]&0x06).# de
282d0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
282e0 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65  pha(x)   (sqlite
282f0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
28300 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
28310 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  02).# define sql
28320 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
28330 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
28340 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
28350 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65  )(x)]&0x04).# de
28360 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
28370 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65  igit(x)  (sqlite
28380 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
28390 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
283a0 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  08).# define sql
283b0 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
283c0 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f   (sqlite3UpperTo
283d0 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20  Lower[(unsigned 
283e0 63 68 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66  char)(x)]).# def
283f0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f  ine sqlite3Isquo
28400 74 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  te(x)   (sqlite3
28410 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
28420 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 38  ed char)(x)]&0x8
28430 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
28440 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
28450 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75  (x)   toupper((u
28460 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
28470 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
28480 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69  e3Isspace(x)   i
28490 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64  sspace((unsigned
284a0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
284b0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e  ine sqlite3Isaln
284c0 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28  um(x)   isalnum(
284d0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
284e0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
284f0 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20  ite3Isalpha(x)  
28500 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e   isalpha((unsign
28510 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
28520 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64  efine sqlite3Isd
28530 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69  igit(x)   isdigi
28540 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
28550 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
28560 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
28570 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73  )  isxdigit((uns
28580 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
28590 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
285a0 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c  Tolower(x)   tol
285b0 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  ower((unsigned c
285c0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
285d0 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65  e sqlite3Isquote
285e0 28 78 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c  (x)   ((x)=='"'|
285f0 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d  |(x)=='\''||(x)=
28600 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a  ='['||(x)=='`').
28610 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
28620 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a  e3IsIdChar(u8);.
28630 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20  ./*.** Internal 
28640 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79  function prototy
28650 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  pes.*/.int sqlit
28660 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20  e3StrICmp(const 
28670 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
28680 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
28690 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68  trlen30(const ch
286a0 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71  ar*);.#define sq
286b0 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 4e 4e 28  lite3Strlen30NN(
286c0 43 29 20 28 73 74 72 6c 65 6e 28 43 29 26 30 78  C) (strlen(C)&0x
286d0 33 66 66 66 66 66 66 66 29 0a 63 68 61 72 20 2a  3fffffff).char *
286e0 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70  sqlite3ColumnTyp
286f0 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29  e(Column*,char*)
28700 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ;.#define sqlite
28710 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65  3StrNICmp sqlite
28720 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20  3_strnicmp..int 
28730 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69  sqlite3MallocIni
28740 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  t(void);.void sq
28750 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76  lite3MallocEnd(v
28760 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  oid);.void *sqli
28770 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a  te3Malloc(u64);.
28780 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
28790 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f  locZero(u64);.vo
287a0 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
287b0 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a  locZero(sqlite3*
287c0 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
287d0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
287e0 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
287f0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
28800 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69  MallocRawNN(sqli
28810 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72  te3*, u64);.char
28820 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75   *sqlite3DbStrDu
28830 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
28840 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73   char*);.char *s
28850 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28  qlite3DbStrNDup(
28860 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
28870 68 61 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72  har*, u64);.char
28880 20 2a 73 71 6c 69 74 65 33 44 62 53 70 61 6e 44   *sqlite3DbSpanD
28890 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
288a0 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
288b0 61 72 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  ar*);.void *sqli
288c0 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a  te3Realloc(void*
288d0 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
288e0 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72  lite3DbReallocOr
288f0 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Free(sqlite3 *, 
28900 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f  void *, u64);.vo
28910 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
28920 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  lloc(sqlite3 *, 
28930 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f  void *, u64);.vo
28940 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  id sqlite3DbFree
28950 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
28960 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
28970 62 46 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a  bFreeNN(sqlite3*
28980 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  , void*);.int sq
28990 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28  lite3MallocSize(
289a0 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
289b0 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28  te3DbMallocSize(
289c0 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
289d0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  ;.void *sqlite3P
289e0 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  ageMalloc(int);.
289f0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65  void sqlite3Page
28a00 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
28a10 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44  d sqlite3MemSetD
28a20 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69  efault(void);.#i
28a30 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
28a40 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c  ESTABLE.void sql
28a50 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  ite3BenignMalloc
28a60 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76  Hooks(void (*)(v
28a70 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76  oid), void (*)(v
28a80 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  oid));.#endif.in
28a90 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61  t sqlite3HeapNea
28aa0 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a  rlyFull(void);..
28ab0 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73  /*.** On systems
28ac0 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63   with ample stac
28ad0 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74  k space and that
28ae0 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28   support alloca(
28af0 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f  ), make.** use o
28b00 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62  f alloca() to ob
28b10 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c  tain space for l
28b20 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f  arge automatic o
28b30 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61  bjects.  By defa
28b40 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73  ult,.** obtain s
28b50 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  pace from malloc
28b60 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c  ()..**.** The al
28b70 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e  loca() routine n
28b80 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c  ever returns NUL
28b90 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  L.  This will ca
28ba0 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a  use code paths.*
28bb0 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68  * that deal with
28bc0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
28bd0 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f  oc() failures to
28be0 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e   be unreachable.
28bf0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
28c00 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64  E_USE_ALLOCA.# d
28c10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
28c20 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
28c30 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65    alloca(N).# de
28c40 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
28c50 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
28c60 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e   memset(alloca(N
28c70 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e  ), 0, N).# defin
28c80 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
28c90 65 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20  ee(D,P).#else.# 
28ca0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
28cb0 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
28cc0 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c     sqlite3DbMall
28cd0 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66  ocRaw(D,N).# def
28ce0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
28cf0 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
28d00 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
28d10 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  ero(D,N).# defin
28d20 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
28d30 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71  ee(D,P)       sq
28d40 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29  lite3DbFree(D,P)
28d50 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e  .#endif../* Do n
28d60 6f 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45  ot allow both ME
28d70 4d 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53  MSYS5 and MEMSYS
28d80 33 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20  3 to be defined 
28d90 74 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74 68  together.  If th
28da0 65 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62  ey.** are, disab
28db0 6c 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69  le MEMSYS3.*/.#i
28dc0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
28dd0 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74  LE_MEMSYS5.const
28de0 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
28df0 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
28e00 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29  GetMemsys5(void)
28e10 3b 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  ;.#undef SQLITE_
28e20 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23  ENABLE_MEMSYS3.#
28e30 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
28e40 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
28e50 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S3.const sqlite3
28e60 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
28e70 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
28e80 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s3(void);.#endif
28e90 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
28ea0 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73  E_MUTEX_OMIT.  s
28eb0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
28ec0 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
28ed0 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28  te3DefaultMutex(
28ee0 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
28ef0 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
28f00 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f  onst *sqlite3Noo
28f10 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  pMutex(void);.  
28f20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
28f30 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63  qlite3MutexAlloc
28f40 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
28f50 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f  ite3MutexInit(vo
28f60 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  id);.  int sqlit
28f70 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29  e3MutexEnd(void)
28f80 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ;.#endif.#if !de
28f90 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
28fa0 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66  EX_OMIT) && !def
28fb0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
28fc0 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73  X_NOOP).  void s
28fd0 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72  qlite3MemoryBarr
28fe0 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65  ier(void);.#else
28ff0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29000 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29  3MemoryBarrier()
29010 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33  .#endif..sqlite3
29020 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
29030 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a  atusValue(int);.
29040 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
29050 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  usUp(int, int);.
29060 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
29070 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29  usDown(int, int)
29080 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
29090 61 74 75 73 48 69 67 68 77 61 74 65 72 28 69 6e  atusHighwater(in
290a0 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
290b0 69 74 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65  ite3LookasideUse
290c0 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29  d(sqlite3*,int*)
290d0 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20  ;../* Access to 
290e0 6d 75 74 65 78 65 73 20 75 73 65 64 20 62 79 20  mutexes used by 
290f0 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29  sqlite3_status()
29100 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65   */.sqlite3_mute
29110 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65  x *sqlite3Pcache
29120 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71  1Mutex(void);.sq
29130 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
29140 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28  ite3MallocMutex(
29150 76 6f 69 64 29 3b 0a 0a 23 69 66 20 64 65 66 69  void);..#if defi
29160 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
29170 45 5f 4d 55 4c 54 49 54 48 52 45 41 44 45 44 5f  E_MULTITHREADED_
29180 43 48 45 43 4b 53 29 20 26 26 20 21 64 65 66 69  CHECKS) && !defi
29190 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
291a0 5f 4f 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c 69  _OMIT).void sqli
291b0 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f  te3MutexWarnOnCo
291c0 6e 74 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33  ntention(sqlite3
291d0 5f 6d 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a  _mutex*);.#else.
291e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
291f0 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65  MutexWarnOnConte
29200 6e 74 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a  ntion(x).#endif.
29210 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29220 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
29230 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 45 58 50  INT.# define EXP
29240 37 35 34 20 28 28 28 75 36 34 29 30 78 37 66 66  754 (((u64)0x7ff
29250 29 3c 3c 35 32 29 0a 23 20 64 65 66 69 6e 65 20  )<<52).# define 
29260 4d 41 4e 37 35 34 20 28 28 28 28 75 36 34 29 31  MAN754 ((((u64)1
29270 29 3c 3c 35 32 29 2d 31 29 0a 23 20 64 65 66 69  )<<52)-1).# defi
29280 6e 65 20 49 73 4e 61 4e 28 58 29 20 28 28 28 58  ne IsNaN(X) (((X
29290 29 26 45 58 50 37 35 34 29 3d 3d 45 58 50 37 35  )&EXP754)==EXP75
292a0 34 20 26 26 20 28 28 58 29 26 4d 41 4e 37 35 34  4 && ((X)&MAN754
292b0 29 21 3d 30 29 0a 20 20 69 6e 74 20 73 71 6c 69  )!=0).  int sqli
292c0 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29  te3IsNaN(double)
292d0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
292e0 20 49 73 4e 61 4e 28 58 29 20 20 20 20 20 20 20   IsNaN(X)       
292f0 20 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c    0.# define sql
29300 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a  ite3IsNaN(X)  0.
29310 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
29320 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
29330 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
29340 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
29350 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c  mation about SQL
29360 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  .** functions ar
29370 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65  guments that are
29380 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
29390 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20  to the printf() 
293a0 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  function..*/.str
293b0 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65  uct PrintfArgume
293c0 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67  nts {.  int nArg
293d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
293e0 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72   /* Total number
293f0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
29400 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20  .  int nUsed;   
29410 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
29420 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
29430 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
29440 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  /.  sqlite3_valu
29450 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20  e **apArg;   /* 
29460 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c  The argument val
29470 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72 20  ues */.};..char 
29480 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28  *sqlite3MPrintf(
29490 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
294a0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72  har*, ...);.char
294b0 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74   *sqlite3VMPrint
294c0 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
294d0 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
294e0 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
294f0 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
29500 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
29510 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76  VE_OS_TRACE).  v
29520 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67  oid sqlite3Debug
29530 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61  Printf(const cha
29540 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66  r*, ...);.#endif
29550 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
29560 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64  ITE_TEST).  void
29570 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78   *sqlite3TestTex
29580 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61  tToPtr(const cha
29590 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
295a0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
295b0 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71  DEBUG).  void sq
295c0 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70  lite3TreeViewExp
295d0 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  r(TreeView*, con
295e0 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  st Expr*, u8);. 
295f0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
29600 65 56 69 65 77 42 61 72 65 45 78 70 72 4c 69 73  eViewBareExprLis
29610 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
29620 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  st ExprList*, co
29630 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
29640 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
29650 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56  ewExprList(TreeV
29660 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
29670 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74  List*, u8, const
29680 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
29690 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53  sqlite3TreeViewS
296a0 72 63 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a  rcList(TreeView*
296b0 2c 20 63 6f 6e 73 74 20 53 72 63 4c 69 73 74 2a  , const SrcList*
296c0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
296d0 33 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28  3TreeViewSelect(
296e0 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
296f0 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20   Select*, u8);. 
29700 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
29710 65 56 69 65 77 57 69 74 68 28 54 72 65 65 56 69  eViewWith(TreeVi
29720 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a  ew*, const With*
29730 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53  , u8);.#ifndef S
29740 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f  QLITE_OMIT_WINDO
29750 57 46 55 4e 43 0a 20 20 76 6f 69 64 20 73 71 6c  WFUNC.  void sql
29760 69 74 65 33 54 72 65 65 56 69 65 77 57 69 6e 64  ite3TreeViewWind
29770 6f 77 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  ow(TreeView*, co
29780 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29  nst Window*, u8)
29790 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
297a0 54 72 65 65 56 69 65 77 57 69 6e 46 75 6e 63 28  TreeViewWinFunc(
297b0 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
297c0 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a 23   Window*, u8);.#
297d0 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 0a 76  endif.#endif...v
297e0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74  oid sqlite3SetSt
297f0 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71  ring(char **, sq
29800 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
29810 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
29820 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65  e3ErrorMsg(Parse
29830 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
29840 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ...);.int sqlite
29850 33 45 72 72 6f 72 54 6f 50 61 72 73 65 72 28 73  3ErrorToParser(s
29860 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
29870 69 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74  id sqlite3Dequot
29880 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  e(char*);.void s
29890 71 6c 69 74 65 33 44 65 71 75 6f 74 65 45 78 70  qlite3DequoteExp
298a0 72 28 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  r(Expr*);.void s
298b0 71 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28  qlite3TokenInit(
298c0 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69  Token*,char*);.i
298d0 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72  nt sqlite3Keywor
298e0 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69  dCode(const unsi
298f0 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29  gned char*, int)
29900 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
29910 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63  Parser(Parse*, c
29920 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
29930 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
29940 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50  e3FinishCoding(P
29950 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
29960 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61  te3GetTempReg(Pa
29970 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
29980 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65  te3ReleaseTempRe
29990 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69  g(Parse*,int);.i
299a0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
299b0 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
299c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
299d0 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65  ReleaseTempRange
299e0 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29  (Parse*,int,int)
299f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c  ;.void sqlite3Cl
29a00 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28  earTempRegCache(
29a10 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20  Parse*);.#ifdef 
29a20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74  SQLITE_DEBUG.int
29a30 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49   sqlite3NoTempsI
29a40 6e 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  nRange(Parse*,in
29a50 74 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45  t,int);.#endif.E
29a60 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
29a70 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
29a80 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c  nt,const Token*,
29a90 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
29aa0 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a  te3Expr(sqlite3*
29ab0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
29ac0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
29ad0 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65  xprAttachSubtree
29ae0 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  s(sqlite3*,Expr*
29af0 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45  ,Expr*,Expr*);.E
29b00 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70  xpr *sqlite3PExp
29b10 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45  r(Parse*, int, E
29b20 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  xpr*, Expr*);.vo
29b30 69 64 20 73 71 6c 69 74 65 33 50 45 78 70 72 41  id sqlite3PExprA
29b40 64 64 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  ddSelect(Parse*,
29b50 20 45 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29   Expr*, Select*)
29b60 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
29b70 78 70 72 41 6e 64 28 50 61 72 73 65 2a 2c 45 78  xprAnd(Parse*,Ex
29b80 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
29b90 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 69  r *sqlite3ExprSi
29ba0 6d 70 6c 69 66 69 65 64 41 6e 64 4f 72 28 45 78  mplifiedAndOr(Ex
29bb0 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
29bc0 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28  te3ExprFunction(
29bd0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
29be0 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  , Token*, int);.
29bf0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
29c00 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28  AssignVarNumber(
29c10 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75  Parse*, Expr*, u
29c20 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
29c30 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69  3ExprDelete(sqli
29c40 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  te3*, Expr*);.vo
29c50 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 55 6e  id sqlite3ExprUn
29c60 6d 61 70 41 6e 64 44 65 6c 65 74 65 28 50 61 72  mapAndDelete(Par
29c70 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  se*, Expr*);.Exp
29c80 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
29c90 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72  prListAppend(Par
29ca0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  se*,ExprList*,Ex
29cb0 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  pr*);.ExprList *
29cc0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41  sqlite3ExprListA
29cd0 70 70 65 6e 64 56 65 63 74 6f 72 28 50 61 72 73  ppendVector(Pars
29ce0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 49 64 4c  e*,ExprList*,IdL
29cf0 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  ist*,Expr*);.voi
29d00 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
29d10 74 53 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78  tSetSortOrder(Ex
29d20 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f  prList*,int);.vo
29d30 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
29d40 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a  stSetName(Parse*
29d50 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e  ,ExprList*,Token
29d60 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
29d70 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53  ite3ExprListSetS
29d80 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  pan(Parse*,ExprL
29d90 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
29da0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
29db0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
29dc0 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
29dd0 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  3*, ExprList*);.
29de0 75 33 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c  u32 sqlite3ExprL
29df0 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45  istFlags(const E
29e00 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
29e10 71 6c 69 74 65 33 49 6e 64 65 78 48 61 73 44 75  qlite3IndexHasDu
29e20 70 6c 69 63 61 74 65 52 6f 6f 74 50 61 67 65 28  plicateRootPage(
29e30 49 6e 64 65 78 2a 29 3b 0a 69 6e 74 20 73 71 6c  Index*);.int sql
29e40 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33  ite3Init(sqlite3
29e50 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20  *, char**);.int 
29e60 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
29e70 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  ack(void*, int, 
29e80 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b  char**, char**);
29e90 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
29ea0 4f 6e 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  One(sqlite3*, in
29eb0 74 2c 20 63 68 61 72 2a 2a 2c 20 75 33 32 29 3b  t, char**, u32);
29ec0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61  .void sqlite3Pra
29ed0 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  gma(Parse*,Token
29ee0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
29ef0 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
29f00 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
29f10 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73  LTABLE.Module *s
29f20 71 6c 69 74 65 33 50 72 61 67 6d 61 56 74 61 62  qlite3PragmaVtab
29f30 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33  Register(sqlite3
29f40 2a 2c 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  *,const char *zN
29f50 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ame);.#endif.voi
29f60 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c  d sqlite3ResetAl
29f70 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63  lSchemasOfConnec
29f80 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a  tion(sqlite3*);.
29f90 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65  void sqlite3Rese
29fa0 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74  tOneSchema(sqlit
29fb0 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
29fc0 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61  qlite3CollapseDa
29fd0 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c 69  tabaseArray(sqli
29fe0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
29ff0 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61  te3CommitInterna
2a000 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  lChanges(sqlite3
2a010 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a020 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65  DeleteColumnName
2a030 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65  s(sqlite3*,Table
2a040 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
2a050 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69  olumnsFromExprLi
2a060 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  st(Parse*,ExprLi
2a070 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a  st*,i16*,Column*
2a080 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a090 53 65 6c 65 63 74 41 64 64 43 6f 6c 75 6d 6e 54  SelectAddColumnT
2a0a0 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28  ypeAndCollation(
2a0b0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 53 65  Parse*,Table*,Se
2a0c0 6c 65 63 74 2a 2c 63 68 61 72 29 3b 0a 54 61 62  lect*,char);.Tab
2a0d0 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c  le *sqlite3Resul
2a0e0 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72  tSetOfSelect(Par
2a0f0 73 65 2a 2c 53 65 6c 65 63 74 2a 2c 63 68 61 72  se*,Select*,char
2a100 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
2a110 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50  penMasterTable(P
2a120 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e  arse *, int);.In
2a130 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d  dex *sqlite3Prim
2a140 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c  aryKeyIndex(Tabl
2a150 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33  e*);.i16 sqlite3
2a160 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e  ColumnOfIndex(In
2a170 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64  dex*, i16);.void
2a180 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62   sqlite3StartTab
2a190 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
2a1a0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
2a1b0 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51  int,int);.#if SQ
2a1c0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
2a1d0 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69  EN_COLUMNS.  voi
2a1e0 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50  d sqlite3ColumnP
2a1f0 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d  ropertiesFromNam
2a200 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e  e(Table*, Column
2a210 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2a220 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  ne sqlite3Column
2a230 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61  PropertiesFromNa
2a240 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70  me(T,C) /* no-op
2a250 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20   */.#endif.void 
2a260 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e  sqlite3AddColumn
2a270 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
2a280 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2a290 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50  ite3AddNotNull(P
2a2a0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
2a2b0 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d  d sqlite3AddPrim
2a2c0 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45  aryKey(Parse*, E
2a2d0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
2a2e0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2a2f0 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f  qlite3AddCheckCo
2a300 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
2a310 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
2a320 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56  lite3AddDefaultV
2a330 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72  alue(Parse*,Expr
2a340 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
2a350 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
2a360 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61   sqlite3AddColla
2a370 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  teType(Parse*, T
2a380 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2a390 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72  ite3EndTable(Par
2a3a0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
2a3b0 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69  *,u8,Select*);.i
2a3c0 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55  nt sqlite3ParseU
2a3d0 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  ri(const char*,c
2a3e0 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67  onst char*,unsig
2a3f0 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20  ned int*,.      
2a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
2a410 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72  lite3_vfs**,char
2a420 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 23 69 66  **,char **);.#if
2a430 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43  def SQLITE_HAS_C
2a440 4f 44 45 43 0a 20 20 69 6e 74 20 73 71 6c 69 74  ODEC.  int sqlit
2a450 65 33 43 6f 64 65 63 51 75 65 72 79 50 61 72 61  e3CodecQueryPara
2a460 6d 65 74 65 72 73 28 73 71 6c 69 74 65 33 2a 2c  meters(sqlite3*,
2a470 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
2a480 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  t char*);.#else.
2a490 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2a4a0 43 6f 64 65 63 51 75 65 72 79 50 61 72 61 6d 65  CodecQueryParame
2a4b0 74 65 72 73 28 41 2c 42 2c 43 29 20 30 0a 23 65  ters(A,B,C) 0.#e
2a4c0 6e 64 69 66 0a 42 74 72 65 65 20 2a 73 71 6c 69  ndif.Btree *sqli
2a4d0 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65  te3DbNameToBtree
2a4e0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
2a4f0 63 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65 66 20  char*);..#ifdef 
2a500 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
2a510 45 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  E.# define sqlit
2a520 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51  e3FaultSim(X) SQ
2a530 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20  LITE_OK.#else.  
2a540 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74  int sqlite3Fault
2a550 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66  Sim(int);.#endif
2a560 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65  ..Bitvec *sqlite
2a570 33 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33  3BitvecCreate(u3
2a580 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
2a590 69 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63  itvecTest(Bitvec
2a5a0 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  *, u32);.int sql
2a5b0 69 74 65 33 42 69 74 76 65 63 54 65 73 74 4e 6f  ite3BitvecTestNo
2a5c0 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75  tNull(Bitvec*, u
2a5d0 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
2a5e0 42 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63  BitvecSet(Bitvec
2a5f0 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71  *, u32);.void sq
2a600 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72  lite3BitvecClear
2a610 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76  (Bitvec*, u32, v
2a620 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
2a630 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79  te3BitvecDestroy
2a640 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73  (Bitvec*);.u32 s
2a650 71 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65  qlite3BitvecSize
2a660 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64  (Bitvec*);.#ifnd
2a670 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
2a680 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74 65 33  ABLE.int sqlite3
2a690 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73  BitvecBuiltinTes
2a6a0 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e  t(int,int*);.#en
2a6b0 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c  dif..RowSet *sql
2a6c0 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73  ite3RowSetInit(s
2a6d0 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
2a6e0 71 6c 69 74 65 33 52 6f 77 53 65 74 44 65 6c 65  qlite3RowSetDele
2a6f0 74 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  te(void*);.void 
2a700 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65  sqlite3RowSetCle
2a710 61 72 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ar(void*);.void 
2a720 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
2a730 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ert(RowSet*, i64
2a740 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
2a750 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a  wSetTest(RowSet*
2a760 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36  , int iBatch, i6
2a770 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
2a780 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74  owSetNext(RowSet
2a790 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20  *, i64*);..void 
2a7a0 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65  sqlite3CreateVie
2a7b0 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  w(Parse*,Token*,
2a7c0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  Token*,Token*,Ex
2a7d0 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c  prList*,Select*,
2a7e0 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21  int,int);..#if !
2a7f0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2a800 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65  MIT_VIEW) || !de
2a810 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2a820 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
2a830 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65    int sqlite3Vie
2a840 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
2a850 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
2a860 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2a870 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
2a880 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a  umnNames(A,B) 0.
2a890 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49  #endif..#if SQLI
2a8a0 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
2a8b0 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  30.  int sqlite3
2a8c0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44  DbMaskAllZero(yD
2a8d0 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76  bMask);.#endif.v
2a8e0 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
2a8f0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
2a900 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
2a910 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
2a920 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  deDropTable(Pars
2a930 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
2a940 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2a950 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73  te3DeleteTable(s
2a960 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
2a970 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 72  ;.void sqlite3Fr
2a980 65 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  eeIndex(sqlite3*
2a990 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 6e 64  , Index*);.#ifnd
2a9a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
2a9b0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76  UTOINCREMENT.  v
2a9c0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
2a9d0 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61  ncrementBegin(Pa
2a9e0 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20  rse *pParse);.  
2a9f0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
2aa00 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72  incrementEnd(Par
2aa10 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c  se *pParse);.#el
2aa20 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2aa30 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
2aa40 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e  Begin(X).# defin
2aa50 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
2aa60 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e  rementEnd(X).#en
2aa70 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2aa80 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53  Insert(Parse*, S
2aa90 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a  rcList*, Select*
2aaa0 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  , IdList*, int, 
2aab0 55 70 73 65 72 74 2a 29 3b 0a 76 6f 69 64 20 2a  Upsert*);.void *
2aac0 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f  sqlite3ArrayAllo
2aad0 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f  cate(sqlite3*,vo
2aae0 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  id*,int,int*,int
2aaf0 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69  *);.IdList *sqli
2ab00 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28  te3IdListAppend(
2ab10 50 61 72 73 65 2a 2c 20 49 64 4c 69 73 74 2a 2c  Parse*, IdList*,
2ab20 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2ab30 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78  lite3IdListIndex
2ab40 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  (IdList*,const c
2ab50 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  har*);.SrcList *
2ab60 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e  sqlite3SrcListEn
2ab70 6c 61 72 67 65 28 50 61 72 73 65 2a 2c 20 53 72  large(Parse*, Sr
2ab80 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
2ab90 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
2aba0 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
2abb0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2abc0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2abd0 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
2abe0 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
2abf0 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a  dFromTerm(Parse*
2ac00 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
2ac10 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  n*, Token*,.    
2ac20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac40 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74    Token*, Select
2ac50 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74  *, Expr*, IdList
2ac60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ac70 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79  SrcListIndexedBy
2ac80 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
2ac90 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76  t *, Token *);.v
2aca0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
2acb0 73 74 46 75 6e 63 41 72 67 73 28 50 61 72 73 65  stFuncArgs(Parse
2acc0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
2acd0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
2ace0 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f  ite3IndexedByLoo
2acf0 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72  kup(Parse *, str
2ad00 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
2ad10 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2ad20 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
2ad30 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b  nType(SrcList*);
2ad40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
2ad50 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72  ListAssignCursor
2ad60 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  s(Parse*, SrcLis
2ad70 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
2ad80 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71  3IdListDelete(sq
2ad90 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29  lite3*, IdList*)
2ada0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
2adb0 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  cListDelete(sqli
2adc0 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  te3*, SrcList*);
2add0 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41  .Index *sqlite3A
2ade0 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65  llocateIndexObje
2adf0 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c  ct(sqlite3*,i16,
2ae00 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f 69  int,char**);.voi
2ae10 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 49  d sqlite3CreateI
2ae20 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65  ndex(Parse*,Toke
2ae30 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73  n*,Token*,SrcLis
2ae40 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  t*,ExprList*,int
2ae50 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20  ,Token*,.       
2ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae70 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69     Expr*, int, i
2ae80 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  nt, u8);.void sq
2ae90 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50  lite3DropIndex(P
2aea0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2aeb0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2aec0 65 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  e3Select(Parse*,
2aed0 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74   Select*, Select
2aee0 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  Dest*);.Select *
2aef0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77  sqlite3SelectNew
2af00 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
2af10 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
2af20 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20  ,ExprList*,.    
2af30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af40 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c       Expr*,ExprL
2af50 69 73 74 2a 2c 75 33 32 2c 45 78 70 72 2a 29 3b  ist*,u32,Expr*);
2af60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
2af70 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  ectDelete(sqlite
2af80 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61  3*, Select*);.Ta
2af90 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ble *sqlite3SrcL
2afa0 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a  istLookup(Parse*
2afb0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74  , SrcList*);.int
2afc0 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e   sqlite3IsReadOn
2afd0 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ly(Parse*, Table
2afe0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2aff0 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50  lite3OpenTable(P
2b000 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c  arse*, int iCur,
2b010 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a   int iDb, Table*
2b020 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69  , int);.#if defi
2b030 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
2b040 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f  E_UPDATE_DELETE_
2b050 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e  LIMIT) && !defin
2b060 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ed(SQLITE_OMIT_S
2b070 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73  UBQUERY).Expr *s
2b080 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65  qlite3LimitWhere
2b090 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
2b0a0 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
2b0b0 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23  ,Expr*,char*);.#
2b0c0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2b0d0 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72  e3DeleteFrom(Par
2b0e0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
2b0f0 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  xpr*, ExprList*,
2b100 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
2b110 6c 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73  lite3Update(Pars
2b120 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
2b130 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e  prList*,Expr*,in
2b140 74 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  t,ExprList*,Expr
2b150 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2b160 20 20 20 20 20 20 55 70 73 65 72 74 2a 29 3b 0a        Upsert*);.
2b170 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74  WhereInfo *sqlit
2b180 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61 72  e3WhereBegin(Par
2b190 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
2b1a0 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
2b1b0 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b  rList*,u16,int);
2b1c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65  .void sqlite3Whe
2b1d0 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a  reEnd(WhereInfo*
2b1e0 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
2b1f0 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43  3WhereOutputRowC
2b200 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  ount(WhereInfo*)
2b210 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
2b220 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65  reIsDistinct(Whe
2b230 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
2b240 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65  lite3WhereIsOrde
2b250 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  red(WhereInfo*);
2b260 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
2b270 65 4f 72 64 65 72 42 79 4c 69 6d 69 74 4f 70 74  eOrderByLimitOpt
2b280 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
2b290 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
2b2a0 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72  ereIsSorted(Wher
2b2b0 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
2b2c0 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75  ite3WhereContinu
2b2d0 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  eLabel(WhereInfo
2b2e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
2b2f0 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57  hereBreakLabel(W
2b300 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
2b310 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e  sqlite3WhereOkOn
2b320 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a  ePass(WhereInfo*
2b330 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65  , int*);.#define
2b340 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20 20 20   ONEPASS_OFF    
2b350 20 20 30 20 20 20 20 20 20 20 20 2f 2a 20 55 73    0        /* Us
2b360 65 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74  e of ONEPASS not
2b370 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66   allowed */.#def
2b380 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47  ine ONEPASS_SING
2b390 4c 45 20 20 20 31 20 20 20 20 20 20 20 20 2f 2a  LE   1        /*
2b3a0 20 4f 4e 45 50 41 53 53 20 76 61 6c 69 64 20 66   ONEPASS valid f
2b3b0 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  or a single row 
2b3c0 75 70 64 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e  update */.#defin
2b3d0 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20  e ONEPASS_MULTI 
2b3e0 20 20 20 32 20 20 20 20 20 20 20 20 2f 2a 20 4f     2        /* O
2b3f0 4e 45 50 41 53 53 20 69 73 20 76 61 6c 69 64 20  NEPASS is valid 
2b400 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  for multiple row
2b410 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  s */.void sqlite
2b420 33 45 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64  3ExprCodeLoadInd
2b430 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  exColumn(Parse*,
2b440 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e   Index*, int, in
2b450 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
2b460 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
2b470 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61  olumn(Parse*, Ta
2b480 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
2b490 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
2b4a0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
2b4b0 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56  tColumnOfTable(V
2b4c0 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
2b4d0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
2b4e0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
2b4f0 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69  deMove(Parse*, i
2b500 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
2b510 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
2b520 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ode(Parse*, Expr
2b530 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2b540 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43 6f 70  lite3ExprCodeCop
2b550 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  y(Parse*, Expr*,
2b560 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2b570 74 65 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f  te3ExprCodeFacto
2b580 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78  rable(Parse*, Ex
2b590 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
2b5a0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 74  qlite3ExprCodeAt
2b5b0 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70  Init(Parse*, Exp
2b5c0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
2b5d0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d  lite3ExprCodeTem
2b5e0 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  p(Parse*, Expr*,
2b5f0 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
2b600 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67 65  te3ExprCodeTarge
2b610 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
2b620 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2b630 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61  te3ExprCodeAndCa
2b640 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  che(Parse*, Expr
2b650 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2b660 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70 72  ite3ExprCodeExpr
2b670 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70  List(Parse*, Exp
2b680 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
2b690 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20 53  , u8);.#define S
2b6a0 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20 20  QLITE_ECEL_DUP  
2b6b0 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65 65      0x01  /* Dee
2b6c0 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63  p, not shallow c
2b6d0 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  opies */.#define
2b6e0 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43   SQLITE_ECEL_FAC
2b6f0 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20 46  TOR   0x02  /* F
2b700 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61  actor out consta
2b710 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66  nt terms */.#def
2b720 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
2b730 52 45 46 20 20 20 20 20 20 30 78 30 34 20 20 2f  REF      0x04  /
2b740 2a 20 55 73 65 20 45 78 70 72 4c 69 73 74 2e 75  * Use ExprList.u
2b750 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a  .x.iOrderByCol *
2b760 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
2b770 5f 45 43 45 4c 5f 4f 4d 49 54 52 45 46 20 20 30  _ECEL_OMITREF  0
2b780 78 30 38 20 20 2f 2a 20 4f 6d 69 74 20 69 66 20  x08  /* Omit if 
2b790 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72  ExprList.u.x.iOr
2b7a0 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64  derByCol */.void
2b7b0 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72   sqlite3ExprIfTr
2b7c0 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ue(Parse*, Expr*
2b7d0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2b7e0 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
2b7f0 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70  alse(Parse*, Exp
2b800 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
2b810 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
2b820 66 46 61 6c 73 65 44 75 70 28 50 61 72 73 65 2a  fFalseDup(Parse*
2b830 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
2b840 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  t);.Table *sqlit
2b850 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69  e3FindTable(sqli
2b860 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
2b870 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2b880 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 56  #define LOCATE_V
2b890 49 45 57 20 20 20 20 30 78 30 31 0a 23 64 65 66  IEW    0x01.#def
2b8a0 69 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f 45 52 52  ine LOCATE_NOERR
2b8b0 20 20 20 30 78 30 32 0a 54 61 62 6c 65 20 2a 73     0x02.Table *s
2b8c0 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
2b8d0 65 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61  e(Parse*,u32 fla
2b8e0 67 73 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  gs,const char*, 
2b8f0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
2b900 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
2b910 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73  teTableItem(Pars
2b920 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 73 74 72  e*,u32 flags,str
2b930 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
2b940 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69   *);.Index *sqli
2b950 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c  te3FindIndex(sql
2b960 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
2b970 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2b980 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c  .void sqlite3Unl
2b990 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c  inkAndDeleteTabl
2b9a0 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  e(sqlite3*,int,c
2b9b0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2b9c0 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
2b9d0 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71  ndDeleteIndex(sq
2b9e0 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
2b9f0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2ba00 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72 73  lite3Vacuum(Pars
2ba10 65 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 2a 29  e*,Token*,Expr*)
2ba20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
2ba30 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73  Vacuum(char**, s
2ba40 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 73 71  qlite3*, int, sq
2ba50 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 63  lite3_value*);.c
2ba60 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65  har *sqlite3Name
2ba70 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65  FromToken(sqlite
2ba80 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
2ba90 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70   sqlite3ExprComp
2baa0 61 72 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  are(Parse*,Expr*
2bab0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
2bac0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2bad0 6d 70 61 72 65 53 6b 69 70 28 45 78 70 72 2a 2c  mpareSkip(Expr*,
2bae0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
2baf0 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  t sqlite3ExprLis
2bb00 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73  tCompare(ExprLis
2bb10 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  t*, ExprList*, i
2bb20 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2bb30 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28  ExprImpliesExpr(
2bb40 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78  Parse*,Expr*, Ex
2bb50 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
2bb60 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65  qlite3ExprImplie
2bb70 73 4e 6f 6e 4e 75 6c 6c 52 6f 77 28 45 78 70 72  sNonNullRow(Expr
2bb80 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2bb90 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
2bba0 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f  ggregates(NameCo
2bbb0 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  ntext*, Expr*);.
2bbc0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2bbd0 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e  AnalyzeAggList(N
2bbe0 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72  ameContext*,Expr
2bbf0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2bc00 74 65 33 45 78 70 72 43 6f 76 65 72 65 64 42 79  te3ExprCoveredBy
2bc10 49 6e 64 65 78 28 45 78 70 72 2a 2c 20 69 6e 74  Index(Expr*, int
2bc20 20 69 43 75 72 2c 20 49 6e 64 65 78 20 2a 70 49   iCur, Index *pI
2bc30 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  dx);.int sqlite3
2bc40 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73  FunctionUsesThis
2bc50 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69  Src(Expr*, SrcLi
2bc60 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
2bc70 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
2bc80 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2bc90 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f  TE_UNTESTABLE.vo
2bca0 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61  id sqlite3PrngSa
2bcb0 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76  veState(void);.v
2bcc0 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52  oid sqlite3PrngR
2bcd0 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64  estoreState(void
2bce0 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
2bcf0 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
2bd00 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  l(sqlite3*,int);
2bd10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
2bd20 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61  eVerifySchema(Pa
2bd30 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
2bd40 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
2bd50 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61  fyNamedSchema(Pa
2bd60 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
2bd70 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c   *zDb);.void sql
2bd80 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63  ite3BeginTransac
2bd90 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
2bda0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2bdb0 6e 64 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  ndTransaction(Pa
2bdc0 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
2bdd0 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
2bde0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f  (Parse*, int, To
2bdf0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2be00 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
2be10 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76  ts(sqlite3 *);.v
2be20 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65  oid sqlite3Leave
2be30 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d  MutexAndCloseZom
2be40 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  bie(sqlite3*);.i
2be50 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 64  nt sqlite3ExprId
2be60 54 6f 54 72 75 65 46 61 6c 73 65 28 45 78 70 72  ToTrueFalse(Expr
2be70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2be80 78 70 72 54 72 75 74 68 56 61 6c 75 65 28 63 6f  xprTruthValue(co
2be90 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  nst Expr*);.int 
2bea0 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
2beb0 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e  stant(Expr*);.in
2bec0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
2bed0 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45  onstantNotJoin(E
2bee0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2bef0 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
2bf00 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a  OrFunction(Expr*
2bf10 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
2bf20 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
2bf30 4f 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a  OrGroupBy(Parse*
2bf40 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73  , Expr*, ExprLis
2bf50 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2bf60 45 78 70 72 49 73 54 61 62 6c 65 43 6f 6e 73 74  ExprIsTableConst
2bf70 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  ant(Expr*,int);.
2bf80 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2bf90 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54  ABLE_CURSOR_HINT
2bfa0 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  S.int sqlite3Exp
2bfb0 72 43 6f 6e 74 61 69 6e 73 53 75 62 71 75 65 72  rContainsSubquer
2bfc0 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66  y(Expr*);.#endif
2bfd0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2bfe0 49 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c  IsInteger(Expr*,
2bff0 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
2c000 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c  te3ExprCanBeNull
2c010 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69  (const Expr*);.i
2c020 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65  nt sqlite3ExprNe
2c030 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61  edsNoAffinityCha
2c040 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c  nge(const Expr*,
2c050 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69   char);.int sqli
2c060 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74  te3IsRowid(const
2c070 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2c080 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77  lite3GenerateRow
2c090 44 65 6c 65 74 65 28 0a 20 20 20 20 50 61 72 73  Delete(.    Pars
2c0a0 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65  e*,Table*,Trigge
2c0b0 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  r*,int,int,int,i
2c0c0 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29  16,u8,u8,u8,int)
2c0d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
2c0e0 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65  nerateRowIndexDe
2c0f0 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62  lete(Parse*, Tab
2c100 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
2c110 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  nt*, int);.int s
2c120 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e  qlite3GenerateIn
2c130 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49  dexKey(Parse*, I
2c140 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ndex*, int, int,
2c150 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78   int, int*,Index
2c160 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2c170 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49  ite3ResolvePartI
2c180 64 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69  dxLabel(Parse*,i
2c190 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2c1a0 45 78 70 72 52 65 66 65 72 65 6e 63 65 73 55 70  ExprReferencesUp
2c1b0 64 61 74 65 64 43 6f 6c 75 6d 6e 28 45 78 70 72  datedColumn(Expr
2c1c0 2a 2c 69 6e 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69  *,int*,int);.voi
2c1d0 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
2c1e0 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b  eConstraintCheck
2c1f0 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  s(Parse*,Table*,
2c200 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
2c210 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20  ,int,.          
2c220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c230 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75 38             u8,u8
2c240 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 2c 55  ,int,int*,int*,U
2c250 70 73 65 72 74 2a 29 3b 0a 23 69 66 64 65 66 20  psert*);.#ifdef 
2c260 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55  SQLITE_ENABLE_NU
2c270 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f 69 64 20 73  LL_TRIM.  void s
2c280 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63  qlite3SetMakeRec
2c290 6f 72 64 50 35 28 56 64 62 65 2a 2c 54 61 62 6c  ordP5(Vdbe*,Tabl
2c2a0 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  e*);.#else.# def
2c2b0 69 6e 65 20 73 71 6c 69 74 65 33 53 65 74 4d 61  ine sqlite3SetMa
2c2c0 6b 65 52 65 63 6f 72 64 50 35 28 41 2c 42 29 0a  keRecordP5(A,B).
2c2d0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2c2e0 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72  te3CompleteInser
2c2f0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c  tion(Parse*,Tabl
2c300 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  e*,int,int,int,i
2c310 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  nt*,int,int,int)
2c320 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
2c330 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73  nTableAndIndices
2c340 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2c350 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75   int, u8, int, u
2c360 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  8*, int*, int*);
2c370 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
2c380 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
2c390 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
2c3a0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2c3b0 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65  MultiWrite(Parse
2c3c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c3d0 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29  MayAbort(Parse*)
2c3e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61  ;.void sqlite3Ha
2c3f0 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ltConstraint(Par
2c400 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63  se*, int, int, c
2c410 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76  har*, i8, u8);.v
2c420 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75  oid sqlite3Uniqu
2c430 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  eConstraint(Pars
2c440 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29  e*, int, Index*)
2c450 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
2c460 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  widConstraint(Pa
2c470 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  rse*, int, Table
2c480 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
2c490 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33  3ExprDup(sqlite3
2c4a0 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78  *,Expr*,int);.Ex
2c4b0 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
2c4c0 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74  xprListDup(sqlit
2c4d0 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  e3*,ExprList*,in
2c4e0 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
2c4f0 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73  ite3SrcListDup(s
2c500 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a  qlite3*,SrcList*
2c510 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73  ,int);.IdList *s
2c520 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28  qlite3IdListDup(
2c530 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a  sqlite3*,IdList*
2c540 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
2c550 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69  e3SelectDup(sqli
2c560 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  te3*,Select*,int
2c570 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
2c580 74 65 33 46 75 6e 63 74 69 6f 6e 53 65 61 72 63  te3FunctionSearc
2c590 68 28 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  h(int,const char
2c5a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c5b0 49 6e 73 65 72 74 42 75 69 6c 74 69 6e 46 75 6e  InsertBuiltinFun
2c5c0 63 73 28 46 75 6e 63 44 65 66 2a 2c 69 6e 74 29  cs(FuncDef*,int)
2c5d0 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  ;.FuncDef *sqlit
2c5e0 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73  e3FindFunction(s
2c5f0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
2c600 61 72 2a 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a  ar*,int,u8,u8);.
2c610 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
2c620 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74  sterBuiltinFunct
2c630 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
2c640 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
2c650 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e  DateTimeFunction
2c660 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
2c670 6c 69 74 65 33 52 65 67 69 73 74 65 72 50 65 72  lite3RegisterPer
2c680 43 6f 6e 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69  ConnectionBuilti
2c690 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  nFunctions(sqlit
2c6a0 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
2c6b0 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73  3SafetyCheckOk(s
2c6c0 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
2c6d0 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
2c6e0 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33  SickOrOk(sqlite3
2c6f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c700 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72  ChangeCookie(Par
2c710 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20  se*, int);..#if 
2c720 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2c730 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64  OMIT_VIEW) && !d
2c740 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2c750 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64  IT_TRIGGER).void
2c760 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c   sqlite3Material
2c770 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20  izeView(Parse*, 
2c780 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 45  Table*, Expr*, E
2c790 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 69  xprList*,Expr*,i
2c7a0 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  nt);.#endif..#if
2c7b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2c7c0 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20  _TRIGGER.  void 
2c7d0 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67  sqlite3BeginTrig
2c7e0 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ger(Parse*, Toke
2c7f0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
2c800 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73  t,IdList*,SrcLis
2c810 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
2c820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
2c830 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a  xpr*,int, int);.
2c840 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69    void sqlite3Fi
2c850 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73  nishTrigger(Pars
2c860 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  e*, TriggerStep*
2c870 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69  , Token*);.  voi
2c880 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
2c890 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63  gger(Parse*, Src
2c8a0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  List*, int);.  v
2c8b0 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
2c8c0 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a  riggerPtr(Parse*
2c8d0 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54  , Trigger*);.  T
2c8e0 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54  rigger *sqlite3T
2c8f0 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72  riggersExist(Par
2c900 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  se *, Table*, in
2c910 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  t, ExprList*, in
2c920 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69  t *pMask);.  Tri
2c930 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
2c940 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a  ggerList(Parse *
2c950 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f  , Table *);.  vo
2c960 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
2c970 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  wTrigger(Parse*,
2c980 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c   Trigger *, int,
2c990 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
2c9a0 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20   Table *,.      
2c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9c0 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20        int, int, 
2c9d0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
2c9e0 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
2c9f0 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a  erDirect(Parse *
2ca00 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62  , Trigger *, Tab
2ca10 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  le *, int, int, 
2ca20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
2ca30 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28  iteViewTriggers(
2ca40 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2ca50 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72  Expr*, int, Expr
2ca60 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  List*);.  void s
2ca70 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
2ca80 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a  gerStep(sqlite3*
2ca90 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b  , TriggerStep*);
2caa0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
2cab0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65  sqlite3TriggerSe
2cac0 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33  lectStep(sqlite3
2cad0 2a 2c 53 65 6c 65 63 74 2a 2c 0a 20 20 20 20 20  *,Select*,.     
2cae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2caf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb00 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63     const char*,c
2cb10 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54  onst char*);.  T
2cb20 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
2cb30 74 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74  te3TriggerInsert
2cb40 53 74 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b 65  Step(Parse*,Toke
2cb50 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20  n*, IdList*,.   
2cb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb80 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 2c       Select*,u8,
2cb90 55 70 73 65 72 74 2a 2c 0a 20 20 20 20 20 20 20  Upsert*,.       
2cba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbc0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
2cbd0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72 69  st char*);.  Tri
2cbe0 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
2cbf0 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74  3TriggerUpdateSt
2cc00 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ep(Parse*,Token*
2cc10 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72  ,ExprList*, Expr
2cc20 2a 2c 20 75 38 2c 0a 20 20 20 20 20 20 20 20 20  *, u8,.         
2cc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2cc50 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
2cc60 20 63 68 61 72 2a 29 3b 0a 20 20 54 72 69 67 67   char*);.  Trigg
2cc70 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
2cc80 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65 70  riggerDeleteStep
2cc90 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 20  (Parse*,Token*, 
2cca0 45 78 70 72 2a 2c 0a 20 20 20 20 20 20 20 20 20  Expr*,.         
2ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2ccd0 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
2cce0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
2ccf0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
2cd00 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54  gger(sqlite3*, T
2cd10 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64  rigger*);.  void
2cd20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
2cd30 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  dDeleteTrigger(s
2cd40 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
2cd50 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20  t char*);.  u32 
2cd60 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
2cd70 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69  lmask(Parse*,Tri
2cd80 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  gger*,ExprList*,
2cd90 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69  int,int,Table*,i
2cda0 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71  nt);.# define sq
2cdb0 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
2cdc0 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70  el(p) ((p)->pTop
2cdd0 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f  level ? (p)->pTo
2cde0 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 20  plevel : (p)).# 
2cdf0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
2ce00 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29  Toplevel(p) ((p)
2ce10 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a  ->pToplevel==0).
2ce20 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2ce30 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
2ce40 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30  ist(B,C,D,E,F) 0
2ce50 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2ce60 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41  3DeleteTrigger(A
2ce70 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
2ce80 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
2ce90 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  tr(A,B).# define
2cea0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
2ceb0 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41  dDeleteTrigger(A
2cec0 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73  ,B,C).# define s
2ced0 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
2cee0 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  gger(A,B,C,D,E,F
2cef0 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65  ,G,H,I).# define
2cf00 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
2cf10 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c 42  riggerDirect(A,B
2cf20 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69  ,C,D,E,F).# defi
2cf30 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
2cf40 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20  rList(X, Y) 0.# 
2cf50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
2cf60 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70  rseToplevel(p) p
2cf70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2cf80 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 31  3IsToplevel(p) 1
2cf90 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2cfa0 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
2cfb0 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30  A,B,C,D,E,F,G) 0
2cfc0 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c  .#endif..int sql
2cfd0 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72  ite3JoinType(Par
2cfe0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
2cff0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
2d000 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  id sqlite3Create
2d010 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
2d020 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f  *, ExprList*, To
2d030 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ken*, ExprList*,
2d040 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2d050 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b  te3DeferForeignK
2d060 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ey(Parse*, int);
2d070 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2d080 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49  OMIT_AUTHORIZATI
2d090 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
2d0a0 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65 2a  3AuthRead(Parse*
2d0b0 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53  ,Expr*,Schema*,S
2d0c0 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20  rcList*);.  int 
2d0d0 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
2d0e0 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e  (Parse*,int, con
2d0f0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2d100 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2d110 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
2d120 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75  te3AuthContextPu
2d130 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43  sh(Parse*, AuthC
2d140 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63  ontext*, const c
2d150 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
2d160 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
2d170 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a  Pop(AuthContext*
2d180 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2d190 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73  AuthReadCol(Pars
2d1a0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
2d1b0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
2d1c0 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  int);.#else.# de
2d1d0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
2d1e0 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20  Read(a,b,c,d).# 
2d1f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
2d200 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  thCheck(a,b,c,d,
2d210 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a  e)    SQLITE_OK.
2d220 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2d230 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
2d240 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20  a,b,c).# define 
2d250 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
2d260 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64  xtPop(a)  ((void
2d270 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69  )(a)).#endif.voi
2d280 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68 28  d sqlite3Attach(
2d290 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45  Parse*, Expr*, E
2d2a0 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  xpr*, Expr*);.vo
2d2b0 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63 68  id sqlite3Detach
2d2c0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
2d2d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78  .void sqlite3Fix
2d2e0 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50  Init(DbFixer*, P
2d2f0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  arse*, int, cons
2d300 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54  t char*, const T
2d310 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2d320 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62  te3FixSrcList(Db
2d330 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a  Fixer*, SrcList*
2d340 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2d350 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a  xSelect(DbFixer*
2d360 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
2d370 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44  sqlite3FixExpr(D
2d380 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b  bFixer*, Expr*);
2d390 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
2d3a0 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a  xprList(DbFixer*
2d3b0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
2d3c0 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67  t sqlite3FixTrig
2d3d0 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a  gerStep(DbFixer*
2d3e0 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b  , TriggerStep*);
2d3f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 6c  .int sqlite3Real
2d400 53 61 6d 65 41 73 49 6e 74 28 64 6f 75 62 6c 65  SameAsInt(double
2d410 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 3b  ,sqlite3_int64);
2d420 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46  .int sqlite3AtoF
2d430 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
2d440 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38  double*, int, u8
2d450 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
2d460 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61  tInt32(const cha
2d470 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  r *, int*);.int 
2d480 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73  sqlite3Atoi(cons
2d490 74 20 63 68 61 72 2a 29 3b 0a 23 69 66 6e 64 65  t char*);.#ifnde
2d4a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
2d4b0 46 31 36 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  F16.int sqlite3U
2d4c0 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73  tf16ByteLen(cons
2d4d0 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69  t void *pData, i
2d4e0 6e 74 20 6e 43 68 61 72 29 3b 0a 23 65 6e 64 69  nt nChar);.#endi
2d4f0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66  f.int sqlite3Utf
2d500 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63  8CharLen(const c
2d510 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  har *pData, int 
2d520 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69  nByte);.u32 sqli
2d530 74 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73  te3Utf8Read(cons
2d540 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20  t u8**);.LogEst 
2d550 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36  sqlite3LogEst(u6
2d560 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  4);.LogEst sqlit
2d570 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45  e3LogEstAdd(LogE
2d580 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e  st,LogEst);.#ifn
2d590 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2d5a0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67  VIRTUALTABLE.Log
2d5b0 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
2d5c0 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62  tFromDouble(doub
2d5d0 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  le);.#endif.#if 
2d5e0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
2d5f0 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53  NABLE_STMT_SCANS
2d600 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20  TATUS) || \.    
2d610 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
2d620 4e 41 42 4c 45 5f 53 54 41 54 34 29 20 7c 7c 20  NABLE_STAT4) || 
2d630 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51  \.    defined(SQ
2d640 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54  LITE_EXPLAIN_EST
2d650 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34  IMATED_ROWS).u64
2d660 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f   sqlite3LogEstTo
2d670 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e  Int(LogEst);.#en
2d680 64 69 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74  dif.VList *sqlit
2d690 65 33 56 4c 69 73 74 41 64 64 28 73 71 6c 69 74  e3VListAdd(sqlit
2d6a0 65 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74  e3*,VList*,const
2d6b0 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b   char*,int,int);
2d6c0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2d6d0 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61  ite3VListNumToNa
2d6e0 6d 65 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  me(VList*,int);.
2d6f0 69 6e 74 20 73 71 6c 69 74 65 33 56 4c 69 73 74  int sqlite3VList
2d700 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a  NameToNum(VList*
2d710 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2d720 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e  );../*.** Routin
2d730 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77  es to read and w
2d740 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65  rite variable-le
2d750 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20  ngth integers.  
2d760 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a  These used to.**
2d770 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61   be defined loca
2d780 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20  lly, but now we 
2d790 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72  use the varint r
2d7a0 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75  outines in the u
2d7b0 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  til.c.** file..*
2d7c0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74  /.int sqlite3Put
2d7d0 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20  Varint(unsigned 
2d7e0 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20  char*, u64);.u8 
2d7f0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2d800 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
2d810 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a  char *, u64 *);.
2d820 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
2d830 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69  int32(const unsi
2d840 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32  gned char *, u32
2d850 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2d860 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29  VarintLen(u64 v)
2d870 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  ;../*.** The com
2d880 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20  mon case is for 
2d890 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61  a varint to be a
2d8a0 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54   single byte.  T
2d8b0 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  hey following.**
2d8c0 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74   macros handle t
2d8d0 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77  he common case w
2d8e0 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75  ithout a procedu
2d8f0 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65  re call, but the
2d900 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72  n call.** the pr
2d910 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67  ocedure for larg
2d920 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23  er varints..*/.#
2d930 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
2d940 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
2d950 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30  )((*(A)<(u8)0x80
2d960 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29  )?((B)=(u32)*(A)
2d970 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61  ),1:sqlite3GetVa
2d980 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20  rint32((A),(u32 
2d990 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65  *)&(B))).#define
2d9a0 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42   putVarint32(A,B
2d9b0 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33  )  \.  (u8)(((u3
2d9c0 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29  2)(B)<(u32)0x80)
2d9d0 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64  ?(*(A)=(unsigned
2d9e0 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20   char)(B)),1:\. 
2d9f0 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
2da00 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66  t((A),(B))).#def
2da10 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20  ine getVarint   
2da20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
2da30 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  t.#define putVar
2da40 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75  int    sqlite3Pu
2da50 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20  tVarint...const 
2da60 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64  char *sqlite3Ind
2da70 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 73 71  exAffinityStr(sq
2da80 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b  lite3*, Index*);
2da90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62  .void sqlite3Tab
2daa0 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a  leAffinity(Vdbe*
2dab0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
2dac0 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70  char sqlite3Comp
2dad0 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72  areAffinity(Expr
2dae0 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66   *pExpr, char af
2daf0 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  f2);.int sqlite3
2db00 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28  IndexAffinityOk(
2db10 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
2db20 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b  r idx_affinity);
2db30 0a 63 68 61 72 20 73 71 6c 69 74 65 33 54 61 62  .char sqlite3Tab
2db40 6c 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  leColumnAffinity
2db50 28 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68  (Table*,int);.ch
2db60 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66  ar sqlite3ExprAf
2db70 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
2db80 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
2db90 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61  Atoi64(const cha
2dba0 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75  r*, i64*, int, u
2dbb0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  8);.int sqlite3D
2dbc0 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e  ecOrHexToI64(con
2dbd0 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b  st char*, i64*);
2dbe0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
2dbf0 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65  orWithMsg(sqlite
2dc00 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
2dc10 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20  har*,...);.void 
2dc20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c  sqlite3Error(sql
2dc30 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
2dc40 20 73 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72   sqlite3SystemEr
2dc50 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ror(sqlite3*,int
2dc60 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
2dc70 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65  HexToBlob(sqlite
2dc80 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  3*, const char *
2dc90 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71  z, int n);.u8 sq
2dca0 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e  lite3HexToInt(in
2dcb0 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t h);.int sqlite
2dcc0 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72  3TwoPartName(Par
2dcd0 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  se *, Token *, T
2dce0 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a  oken *, Token **
2dcf0 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  );..#if defined(
2dd00 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f  SQLITE_NEED_ERR_
2dd10 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72  NAME).const char
2dd20 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65   *sqlite3ErrName
2dd30 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  (int);.#endif..#
2dd40 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2dd50 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a  BLE_DESERIALIZE.
2dd60 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 62  int sqlite3Memdb
2dd70 49 6e 69 74 28 76 6f 69 64 29 3b 0a 23 65 6e 64  Init(void);.#end
2dd80 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  if..const char *
2dd90 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e  sqlite3ErrStr(in
2dda0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  t);.int sqlite3R
2ddb0 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20  eadSchema(Parse 
2ddc0 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65  *pParse);.CollSe
2ddd0 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f  q *sqlite3FindCo
2dde0 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75  llSeq(sqlite3*,u
2ddf0 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61  8 enc, const cha
2de00 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  r*,int);.int sql
2de10 69 74 65 33 49 73 42 69 6e 61 72 79 28 63 6f 6e  ite3IsBinary(con
2de20 73 74 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a 43 6f  st CollSeq*);.Co
2de30 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f  llSeq *sqlite3Lo
2de40 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  cateCollSeq(Pars
2de50 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74  e *pParse, const
2de60 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f   char*zName);.Co
2de70 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78  llSeq *sqlite3Ex
2de80 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  prCollSeq(Parse 
2de90 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
2dea0 45 78 70 72 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  Expr);.CollSeq *
2deb0 73 71 6c 69 74 65 33 45 78 70 72 4e 4e 43 6f 6c  sqlite3ExprNNCol
2dec0 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
2ded0 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29  se, Expr *pExpr)
2dee0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2def0 72 43 6f 6c 6c 53 65 71 4d 61 74 63 68 28 50 61  rCollSeqMatch(Pa
2df00 72 73 65 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  rse*,Expr*,Expr*
2df10 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2df20 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f  ExprAddCollateTo
2df30 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  ken(Parse *pPars
2df40 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20  e, Expr*, const 
2df50 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78  Token*, int);.Ex
2df60 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
2df70 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28  ddCollateString(
2df80 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e  Parse*,Expr*,con
2df90 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20  st char*);.Expr 
2dfa0 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70  *sqlite3ExprSkip
2dfb0 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a  Collate(Expr*);.
2dfc0 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
2dfd0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
2dfe0 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74   CollSeq *);.int
2dff0 20 73 71 6c 69 74 65 33 57 72 69 74 61 62 6c 65   sqlite3Writable
2e000 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 29  Schema(sqlite3*)
2e010 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
2e020 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72  ckObjectName(Par
2e030 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
2e040 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
2e050 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2e060 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
2e070 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c  anges(sqlite3 *,
2e080 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2e090 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c  e3AddInt64(i64*,
2e0a0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
2e0b0 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69  3SubInt64(i64*,i
2e0c0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
2e0d0 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  MulInt64(i64*,i6
2e0e0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  4);.int sqlite3A
2e0f0 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69  bsInt32(int);.#i
2e100 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2e110 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69  LE_8_3_NAMES.voi
2e120 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  d sqlite3FileSuf
2e130 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a  fix3(const char*
2e140 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  , char*);.#else.
2e150 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2e160 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29  FileSuffix3(X,Y)
2e170 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74  .#endif.u8 sqlit
2e180 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
2e190 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a  st char *z,u8);.
2e1a0 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
2e1b0 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71  ite3ValueText(sq
2e1c0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
2e1d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
2e1e0 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33  lueBytes(sqlite3
2e1f0 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f  _value*, u8);.vo
2e200 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  id sqlite3ValueS
2e210 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61  etStr(sqlite3_va
2e220 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  lue*, int, const
2e230 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20 20   void *,u8,.    
2e240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e250 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64      void(*)(void
2e260 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *));.void sqlite
2e270 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71  3ValueSetNull(sq
2e280 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76  lite3_value*);.v
2e290 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2e2a0 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  Free(sqlite3_val
2e2b0 75 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  ue*);.#ifndef SQ
2e2c0 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
2e2d0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 75  void sqlite3Resu
2e2e0 6c 74 49 6e 74 52 65 61 6c 28 73 71 6c 69 74 65  ltIntReal(sqlite
2e2f0 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 23 65 6e  3_context*);.#en
2e300 64 69 66 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75  dif.sqlite3_valu
2e310 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e  e *sqlite3ValueN
2e320 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 23  ew(sqlite3 *);.#
2e330 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2e340 49 54 5f 55 54 46 31 36 0a 63 68 61 72 20 2a 73  IT_UTF16.char *s
2e350 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73  qlite3Utf16to8(s
2e360 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
2e370 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  void*, int, u8);
2e380 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2e390 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  te3ValueFromExpr
2e3a0 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72  (sqlite3 *, Expr
2e3b0 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69   *, u8, u8, sqli
2e3c0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76  te3_value **);.v
2e3d0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2e3e0 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71  ApplyAffinity(sq
2e3f0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75  lite3_value *, u
2e400 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  8, u8);.#ifndef 
2e410 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
2e420 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  ION.extern const
2e430 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
2e440 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
2e450 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  erty[];.extern c
2e460 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65  onst char sqlite
2e470 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78  3StrBINARY[];.ex
2e480 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
2e490 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
2e4a0 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a  UpperToLower[];.
2e4b0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
2e4c0 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
2e4d0 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78  e3CtypeMap[];.ex
2e4e0 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  tern const Token
2e4f0 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e   sqlite3IntToken
2e500 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49  s[];.extern SQLI
2e510 54 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71  TE_WSD struct Sq
2e520 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69  lite3Config sqli
2e530 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72  te3Config;.exter
2e540 6e 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71  n FuncDefHash sq
2e550 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63  lite3BuiltinFunc
2e560 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53  tions;.#ifndef S
2e570 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65  QLITE_OMIT_WSD.e
2e580 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
2e590 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65  3PendingByte;.#e
2e5a0 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 64  ndif.#endif.#ifd
2e5b0 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
2e5c0 65 78 74 65 72 6e 20 73 71 6c 69 74 65 33 5f 75  extern sqlite3_u
2e5d0 69 6e 74 36 34 20 73 71 6c 69 74 65 33 4e 50 72  int64 sqlite3NPr
2e5e0 6f 66 69 6c 65 43 6e 74 3b 0a 23 65 6e 64 69 66  ofileCnt;.#endif
2e5f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f  .void sqlite3Roo
2e600 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74  tPageMoved(sqlit
2e610 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
2e620 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2e630 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c  3Reindex(Parse*,
2e640 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
2e650 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
2e660 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  terFunctions(voi
2e670 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
2e680 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65  AlterRenameTable
2e690 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2e6a0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
2e6b0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e   sqlite3AlterRen
2e6c0 61 6d 65 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  ameColumn(Parse*
2e6d0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
2e6e0 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  n*, Token*);.int
2e6f0 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e   sqlite3GetToken
2e700 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
2e710 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a  char *, int *);.
2e720 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74  void sqlite3Nest
2e730 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  edParse(Parse*, 
2e740 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
2e750 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2e760 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
2e770 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a  tements(sqlite3*
2e780 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2e790 69 74 65 33 43 6f 64 65 52 68 73 4f 66 49 4e 28  ite3CodeRhsOfIN(
2e7a0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2e7b0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2e7c0 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61  CodeSubselect(Pa
2e7d0 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
2e7e0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
2e7f0 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c  Prep(Parse*, Sel
2e800 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
2e810 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
2e820 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54  3SelectWrongNumT
2e830 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65 20  ermsError(Parse 
2e840 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74 20  *pParse, Select 
2e850 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  *p);.int sqlite3
2e860 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f  MatchSpanName(co
2e870 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2e880 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2e890 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2e8a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2e8b0 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e  solveExprNames(N
2e8c0 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
2e8d0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2e8e0 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e  ResolveExprListN
2e8f0 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
2e900 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76  *, ExprList*);.v
2e910 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
2e920 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61  veSelectNames(Pa
2e930 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
2e940 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  ameContext*);.in
2e950 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
2e960 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61  SelfReference(Pa
2e970 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
2e980 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29  Expr*,ExprList*)
2e990 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
2e9a0 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79  olveOrderGroupBy
2e9b0 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
2e9c0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
2e9d0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2e9e0 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66  sqlite3ColumnDef
2e9f0 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62  ault(Vdbe *, Tab
2ea00 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
2ea10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
2ea20 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d  erFinishAddColum
2ea30 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e  n(Parse *, Token
2ea40 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2ea50 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f  3AlterBeginAddCo
2ea60 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72  lumn(Parse *, Sr
2ea70 63 4c 69 73 74 20 2a 29 3b 0a 76 6f 69 64 20 2a  cList *);.void *
2ea80 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 54 6f 6b  sqlite3RenameTok
2ea90 65 6e 4d 61 70 28 50 61 72 73 65 2a 2c 20 76 6f  enMap(Parse*, vo
2eaa0 69 64 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  id*, Token*);.vo
2eab0 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65  id sqlite3Rename
2eac0 54 6f 6b 65 6e 52 65 6d 61 70 28 50 61 72 73 65  TokenRemap(Parse
2ead0 2a 2c 20 76 6f 69 64 20 2a 70 54 6f 2c 20 76 6f  *, void *pTo, vo
2eae0 69 64 20 2a 70 46 72 6f 6d 29 3b 0a 76 6f 69 64  id *pFrom);.void
2eaf0 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 45 78   sqlite3RenameEx
2eb00 70 72 55 6e 6d 61 70 28 50 61 72 73 65 2a 2c 20  prUnmap(Parse*, 
2eb10 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2eb20 69 74 65 33 52 65 6e 61 6d 65 45 78 70 72 6c 69  ite3RenameExprli
2eb30 73 74 55 6e 6d 61 70 28 50 61 72 73 65 2a 2c 20  stUnmap(Parse*, 
2eb40 45 78 70 72 4c 69 73 74 2a 29 3b 0a 43 6f 6c 6c  ExprList*);.Coll
2eb50 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43  Seq *sqlite3GetC
2eb60 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75  ollSeq(Parse*, u
2eb70 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f  8, CollSeq *, co
2eb80 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
2eb90 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79   sqlite3Affinity
2eba0 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Type(const char*
2ebb0 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 76 6f 69 64  , Column*);.void
2ebc0 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28   sqlite3Analyze(
2ebd0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
2ebe0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2ebf0 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61  ite3InvokeBusyHa
2ec00 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65  ndler(BusyHandle
2ec10 72 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  r*, sqlite3_file
2ec20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2ec30 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20  indDb(sqlite3*, 
2ec40 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2ec50 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73  ite3FindDbName(s
2ec60 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
2ec70 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
2ec80 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
2ec90 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44  (sqlite3*,int iD
2eca0 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  B);.void sqlite3
2ecb0 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c  DeleteIndexSampl
2ecc0 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65  es(sqlite3*,Inde
2ecd0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
2ece0 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49  3DefaultRowEst(I
2ecf0 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
2ed00 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65  ite3RegisterLike
2ed10 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
2ed20 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  3*, int);.int sq
2ed30 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74  lite3IsLikeFunct
2ed40 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ion(sqlite3*,Exp
2ed50 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a  r*,int*,char*);.
2ed60 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65  void sqlite3Sche
2ed70 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b  maClear(void *);
2ed80 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33  .Schema *sqlite3
2ed90 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65  SchemaGet(sqlite
2eda0 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69  3 *, Btree *);.i
2edb0 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  nt sqlite3Schema
2edc0 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20  ToIndex(sqlite3 
2edd0 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a  *db, Schema *);.
2ede0 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
2edf0 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c  KeyInfoAlloc(sql
2ee00 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  ite3*,int,int);.
2ee10 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49  void sqlite3KeyI
2ee20 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f  nfoUnref(KeyInfo
2ee30 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
2ee40 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b  ite3KeyInfoRef(K
2ee50 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
2ee60 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
2ee70 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  oOfIndex(Parse*,
2ee80 20 49 6e 64 65 78 2a 29 3b 0a 4b 65 79 49 6e 66   Index*);.KeyInf
2ee90 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
2eea0 6f 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50 61  oFromExprList(Pa
2eeb0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2eec0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66   int, int);..#if
2eed0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2eee0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49  .int sqlite3KeyI
2eef0 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b  nfoIsWriteable(K
2ef00 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66  eyInfo*);.#endif
2ef10 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61  .int sqlite3Crea
2ef20 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a  teFunc(sqlite3 *
2ef30 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
2ef40 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a  int, int, void *
2ef50 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  ,.  void (*)(sql
2ef60 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
2ef70 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
2ef80 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28  **),.  void (*)(
2ef90 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
2efa0 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
2efb0 75 65 20 2a 2a 29 2c 20 0a 20 20 76 6f 69 64 20  ue **), .  void 
2efc0 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2efd0 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  ext*),.  void (*
2efe0 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2eff0 74 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28  t*),.  void (*)(
2f000 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
2f010 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
2f020 75 65 20 2a 2a 29 2c 20 0a 20 20 46 75 6e 63 44  ue **), .  FuncD
2f030 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74  estructor *pDest
2f040 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20 73  ructor.);.void s
2f050 71 6c 69 74 65 33 4e 6f 6f 70 44 65 73 74 72 75  qlite3NoopDestru
2f060 63 74 6f 72 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  ctor(void*);.voi
2f070 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c  d sqlite3OomFaul
2f080 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  t(sqlite3*);.voi
2f090 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65 61  d sqlite3OomClea
2f0a0 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  r(sqlite3*);.int
2f0b0 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
2f0c0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74  sqlite3 *db, int
2f0d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
2f0e0 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 50  enTempDatabase(P
2f0f0 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73  arse *);..void s
2f100 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e  qlite3StrAccumIn
2f110 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73 71  it(StrAccum*, sq
2f120 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20 69  lite3*, char*, i
2f130 6e 74 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a  nt, int);.char *
2f140 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46  sqlite3StrAccumF
2f150 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29  inish(StrAccum*)
2f160 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
2f170 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c  lectDestInit(Sel
2f180 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74  ectDest*,int,int
2f190 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2f1a0 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72  CreateColumnExpr
2f1b0 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c  (sqlite3 *, SrcL
2f1c0 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ist *, int, int)
2f1d0 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  ;..void sqlite3B
2f1e0 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c  ackupRestart(sql
2f1f0 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a  ite3_backup *);.
2f200 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
2f210 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33  upUpdate(sqlite3
2f220 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c  _backup *, Pgno,
2f230 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23   const u8 *);..#
2f240 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2f250 49 54 5f 53 55 42 51 55 45 52 59 0a 69 6e 74 20  IT_SUBQUERY.int 
2f260 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
2f270 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  IN(Parse*, Expr*
2f280 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2f290 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  e sqlite3ExprChe
2f2a0 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49 54 45  ckIN(x,y) SQLITE
2f2b0 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  _OK.#endif..#ifd
2f2c0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2f2d0 5f 53 54 41 54 34 0a 69 6e 74 20 73 71 6c 69 74  _STAT4.int sqlit
2f2e0 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56  e3Stat4ProbeSetV
2f2f0 61 6c 75 65 28 0a 20 20 20 20 50 61 72 73 65 2a  alue(.    Parse*
2f300 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64  ,Index*,Unpacked
2f310 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69  Record**,Expr*,i
2f320 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e  nt,int,int*);.in
2f330 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61  t sqlite3Stat4Va
2f340 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73  lueFromExpr(Pars
2f350 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73  e*, Expr*, u8, s
2f360 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
2f370 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
2f380 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61  t4ProbeFree(Unpa
2f390 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e  ckedRecord*);.in
2f3a0 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f  t sqlite3Stat4Co
2f3b0 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63  lumn(sqlite3*, c
2f3c0 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
2f3d0 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61   int, sqlite3_va
2f3e0 6c 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c  lue**);.char sql
2f3f0 69 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41  ite3IndexColumnA
2f400 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 2a  ffinity(sqlite3*
2f410 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a  , Index*, int);.
2f420 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
2f430 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
2f440 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74  he LEMON-generat
2f450 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69 66  ed parser.*/.#if
2f460 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  ndef SQLITE_AMAL
2f470 47 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20  GAMATION.  void 
2f480 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c  *sqlite3ParserAl
2f490 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34  loc(void*(*)(u64
2f4a0 29 2c 20 50 61 72 73 65 2a 29 3b 0a 20 20 76 6f  ), Parse*);.  vo
2f4b0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
2f4c0 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64  Free(void*, void
2f4d0 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65 6e  (*)(void*));.#en
2f4e0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2f4f0 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e  Parser(void*, in
2f500 74 2c 20 54 6f 6b 65 6e 29 3b 0a 69 6e 74 20 73  t, Token);.int s
2f510 71 6c 69 74 65 33 50 61 72 73 65 72 46 61 6c 6c  qlite3ParserFall
2f520 62 61 63 6b 28 69 6e 74 29 3b 0a 23 69 66 64 65  back(int);.#ifde
2f530 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43  f YYTRACKMAXSTAC
2f540 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c  KDEPTH.  int sql
2f550 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50  ite3ParserStackP
2f560 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64  eak(void*);.#end
2f570 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
2f580 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f  AutoLoadExtensio
2f590 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69  ns(sqlite3*);.#i
2f5a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2f5b0 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
2f5c0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
2f5d0 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73  loseExtensions(s
2f5e0 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a  qlite3*);.#else.
2f5f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2f600 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
2f610 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  X).#endif..#ifnd
2f620 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
2f630 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f  HARED_CACHE.  vo
2f640 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  id sqlite3TableL
2f650 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74  ock(Parse *, int
2f660 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74  , int, u8, const
2f670 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a   char *);.#else.
2f680 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2f690 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78  3TableLock(v,w,x
2f6a0 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ,y,z).#endif..#i
2f6b0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
2f6c0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74  .  int sqlite3Ut
2f6d0 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63  f8To8(unsigned c
2f6e0 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
2f6f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
2f700 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
2f710 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2f720 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20  VtabClear(Y).#  
2f730 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2f740 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49  abSync(X,Y) SQLI
2f750 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20  TE_OK.#  define 
2f760 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
2f770 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ack(X).#  define
2f780 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d   sqlite3VtabComm
2f790 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  it(X).#  define 
2f7a0 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
2f7b0 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e  c(db) 0.#  defin
2f7c0 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  e sqlite3VtabLoc
2f7d0 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
2f7e0 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2f7f0 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2f800 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
2f810 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ist(X).#  define
2f820 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
2f830 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53  point(X, Y, Z) S
2f840 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
2f850 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61  ne sqlite3GetVTa
2f860 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62  ble(X,Y)  ((VTab
2f870 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20  le*)0).#else.   
2f880 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2f890 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64  Clear(sqlite3 *d
2f8a0 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76  b, Table*);.   v
2f8b0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44  oid sqlite3VtabD
2f8c0 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65  isconnect(sqlite
2f8d0 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29  3 *db, Table *p)
2f8e0 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
2f8f0 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33  VtabSync(sqlite3
2f900 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20   *db, Vdbe*);.  
2f910 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
2f920 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33  Rollback(sqlite3
2f930 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71   *db);.   int sq
2f940 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28  lite3VtabCommit(
2f950 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
2f960 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2f970 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b  bLock(VTable *);
2f980 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
2f990 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c  VtabUnlock(VTabl
2f9a0 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
2f9b0 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
2f9c0 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20  ist(sqlite3*);. 
2f9d0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2f9e0 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74  bSavepoint(sqlit
2f9f0 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  e3 *, int, int);
2fa00 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
2fa10 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
2fa20 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f  (Vdbe*, sqlite3_
2fa30 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c  vtab*);.   VTabl
2fa40 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61  e *sqlite3GetVTa
2fa50 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61  ble(sqlite3*, Ta
2fa60 62 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65  ble*);.   Module
2fa70 20 2a 73 71 6c 69 74 65 33 56 74 61 62 43 72 65   *sqlite3VtabCre
2fa80 61 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20  ateModule(.     
2fa90 73 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20 63  sqlite3*,.     c
2faa0 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20  onst char*,.    
2fab0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
2fac0 6f 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69  odule*,.     voi
2fad0 64 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a 29  d*,.     void(*)
2fae0 28 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20  (void*).   );.# 
2faf0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2fb00 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28  tabInSync(db) ((
2fb10 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26  db)->nVTrans>0 &
2fb20 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d  & (db)->aVTrans=
2fb30 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  =0).#endif.int s
2fb40 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d  qlite3VtabEponym
2fb50 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72  ousTableInit(Par
2fb60 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f  se*,Module*);.vo
2fb70 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 45 70  id sqlite3VtabEp
2fb80 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61  onymousTableClea
2fb90 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c  r(sqlite3*,Modul
2fba0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2fbb0 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c  3VtabMakeWritabl
2fbc0 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  e(Parse*,Table*)
2fbd0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2fbe0 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  abBeginParse(Par
2fbf0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
2fc00 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  en*, Token*, int
2fc10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2fc20 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50  tabFinishParse(P
2fc30 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
2fc40 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2fc50 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b  ArgInit(Parse*);
2fc60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2fc70 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65  bArgExtend(Parse
2fc80 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
2fc90 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
2fca0 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  reate(sqlite3*, 
2fcb0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
2fcc0 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74  *, char **);.int
2fcd0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
2fce0 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20  Connect(Parse*, 
2fcf0 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
2fd00 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
2fd10 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  roy(sqlite3*, in
2fd20 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  t, const char *)
2fd30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
2fd40 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a  bBegin(sqlite3 *
2fd50 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e  , VTable *);.Fun
2fd60 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61  cDef *sqlite3Vta
2fd70 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f  bOverloadFunctio
2fd80 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63  n(sqlite3 *,Func
2fd90 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20  Def*, int nArg, 
2fda0 45 78 70 72 2a 29 3b 0a 73 71 6c 69 74 65 33 5f  Expr*);.sqlite3_
2fdb0 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d  int64 sqlite3Stm
2fdc0 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c  tCurrentTime(sql
2fdd0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a  ite3_context*);.
2fde0 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50  int sqlite3VdbeP
2fdf0 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64  arameterIndex(Vd
2fe00 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  be*, const char*
2fe10 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2fe20 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69  te3TransferBindi
2fe30 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ngs(sqlite3_stmt
2fe40 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74   *, sqlite3_stmt
2fe50 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2fe60 33 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72  3ParserReset(Par
2fe70 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  se*);.#ifdef SQL
2fe80 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 4f 52 4d 41  ITE_ENABLE_NORMA
2fe90 4c 49 5a 45 0a 63 68 61 72 20 2a 73 71 6c 69 74  LIZE.char *sqlit
2fea0 65 33 4e 6f 72 6d 61 6c 69 7a 65 28 56 64 62 65  e3Normalize(Vdbe
2feb0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2fec0 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2fed0 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62  te3Reprepare(Vdb
2fee0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2fef0 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65  3ExprListCheckLe
2ff00 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70  ngth(Parse*, Exp
2ff10 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
2ff20 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ar*);.CollSeq *s
2ff30 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70  qlite3BinaryComp
2ff40 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  areCollSeq(Parse
2ff50 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72   *, Expr *, Expr
2ff60 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2ff70 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e  TempInMemory(con
2ff80 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f  st sqlite3*);.co
2ff90 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2ffa0 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
2ffb0 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  (int);.#ifndef S
2ffc0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
2ffd0 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63   int sqlite3Chec
2ffe0 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c  kpoint(sqlite3*,
2fff0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
30000 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71   int*);.  int sq
30010 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48  lite3WalDefaultH
30020 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ook(void*,sqlite
30030 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
30040 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e  nt);.#endif.#ifn
30050 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
30060 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69  CTE.  With *sqli
30070 74 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65  te3WithAdd(Parse
30080 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45  *,With*,Token*,E
30090 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a  xprList*,Select*
300a0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
300b0 33 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69  3WithDelete(sqli
300c0 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76  te3*,With*);.  v
300d0 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50  oid sqlite3WithP
300e0 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68  ush(Parse*, With
300f0 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64  *, u8);.#else.#d
30100 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74  efine sqlite3Wit
30110 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65  hPush(x,y,z).#de
30120 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
30130 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64  Delete(x,y).#end
30140 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
30150 45 5f 4f 4d 49 54 5f 55 50 53 45 52 54 0a 20 20  E_OMIT_UPSERT.  
30160 55 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33 55  Upsert *sqlite3U
30170 70 73 65 72 74 4e 65 77 28 73 71 6c 69 74 65 33  psertNew(sqlite3
30180 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
30190 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
301a0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
301b0 65 33 55 70 73 65 72 74 44 65 6c 65 74 65 28 73  e3UpsertDelete(s
301c0 71 6c 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29  qlite3*,Upsert*)
301d0 3b 0a 20 20 55 70 73 65 72 74 20 2a 73 71 6c 69  ;.  Upsert *sqli
301e0 74 65 33 55 70 73 65 72 74 44 75 70 28 73 71 6c  te3UpsertDup(sql
301f0 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a  ite3*,Upsert*);.
30200 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 70 73    int sqlite3Ups
30210 65 72 74 41 6e 61 6c 79 7a 65 54 61 72 67 65 74  ertAnalyzeTarget
30220 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
30230 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 76 6f 69  ,Upsert*);.  voi
30240 64 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  d sqlite3UpsertD
30250 6f 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 55  oUpdate(Parse*,U
30260 70 73 65 72 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e  psert*,Table*,In
30270 64 65 78 2a 2c 69 6e 74 29 3b 0a 23 65 6c 73 65  dex*,int);.#else
30280 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
30290 55 70 73 65 72 74 4e 65 77 28 76 2c 77 2c 78 2c  UpsertNew(v,w,x,
302a0 79 2c 7a 29 20 28 28 55 70 73 65 72 74 2a 29 30  y,z) ((Upsert*)0
302b0 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ).#define sqlite
302c0 33 55 70 73 65 72 74 44 65 6c 65 74 65 28 78 2c  3UpsertDelete(x,
302d0 79 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  y).#define sqlit
302e0 65 33 55 70 73 65 72 74 44 75 70 28 78 2c 79 29  e3UpsertDup(x,y)
302f0 20 20 20 20 20 20 20 28 28 55 70 73 65 72 74 2a         ((Upsert*
30300 29 30 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20  )0).#endif.../* 
30310 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72  Declarations for
30320 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b   functions in fk
30330 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65  ey.c. All of the
30340 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  se are replaced 
30350 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72  by.** no-op macr
30360 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49  os if OMIT_FOREI
30370 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65  GN_KEY is define
30380 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
30390 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  no foreign.** ke
303a0 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  y functionality 
303b0 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66  is available. If
303c0 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73   OMIT_TRIGGER is
303d0 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20   defined but.** 
303e0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
303f0 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f   is not, only so
30400 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
30410 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e  ons are no-oped.
30420 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65   In.** this case
30430 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72   foreign keys ar
30440 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f  e parsed, but no
30450 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61   other functiona
30460 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69  lity is.** provi
30470 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74  ded (enforcement
30480 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e   of FK constrain
30490 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20  ts requires the 
304a0 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73  triggers sub-sys
304b0 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tem)..*/.#if !de
304c0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
304d0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26  T_FOREIGN_KEY) &
304e0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
304f0 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
30500 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
30510 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61  Check(Parse*, Ta
30520 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
30530 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  int*, int);.  vo
30540 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  id sqlite3FkDrop
30550 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
30560 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29  cList *, Table*)
30570 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
30580 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a  FkActions(Parse*
30590 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69  , Table*, ExprLi
305a0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  st*, int, int*, 
305b0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
305c0 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61  te3FkRequired(Pa
305d0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
305e0 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20  t*, int);.  u32 
305f0 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
30600 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
30610 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65  ;.  FKey *sqlite
30620 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61  3FkReferences(Ta
30630 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  ble *);.#else.  
30640 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
30650 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64  kActions(a,b,c,d
30660 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
30670 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61  sqlite3FkCheck(a
30680 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
30690 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
306a0 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a  ropTable(a,b,c).
306b0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
306c0 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20  3FkOldmask(a,b) 
306d0 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66          0.  #def
306e0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71  ine sqlite3FkReq
306f0 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20  uired(a,b,c,d)  
30700 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71    0.  #define sq
30710 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65  lite3FkReference
30720 73 28 61 29 20 20 20 20 20 20 20 20 30 0a 23 65  s(a)        0.#e
30730 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
30740 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
30750 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  _KEY.  void sqli
30760 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69  te3FkDelete(sqli
30770 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  te3 *, Table*);.
30780 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c    int sqlite3FkL
30790 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  ocateIndex(Parse
307a0 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49  *,Table*,FKey*,I
307b0 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23  ndex**,int**);.#
307c0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
307d0 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61  qlite3FkDelete(a
307e0 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,b).  #define sq
307f0 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
30800 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65  ex(a,b,c,d,e).#e
30810 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61  ndif.../*.** Ava
30820 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a  ilable fault inj
30830 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20  ectors.  Should 
30840 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69  be numbered begi
30850 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f  nning with 0..*/
30860 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
30870 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41  FAULTINJECTOR_MA
30880 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69  LLOC     0.#defi
30890 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
308a0 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20  NJECTOR_COUNT   
308b0 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
308c0 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
308d0 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63   code in fault.c
308e0 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69   used for identi
308f0 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a  fying "benign".*
30900 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  * malloc failure
30910 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20  s. This is only 
30920 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54  present if SQLIT
30930 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20  E_UNTESTABLE.** 
30940 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a  is not defined..
30950 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
30960 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 76  E_UNTESTABLE.  v
30970 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
30980 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
30990 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  d);.  void sqlit
309a0 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
309b0 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20  c(void);.#else. 
309c0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
309d0 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
309e0 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  c().  #define sq
309f0 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
30a00 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f  lloc().#endif../
30a10 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  *.** Allowed ret
30a20 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
30a30 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
30a40 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ex().*/.#define 
30a50 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20  IN_INDEX_ROWID  
30a60 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61        1   /* Sea
30a70 72 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66  rch the rowid of
30a80 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64   the table */.#d
30a90 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45  efine IN_INDEX_E
30aa0 50 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20  PH          2   
30ab0 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68  /* Search an eph
30ac0 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f  emeral b-tree */
30ad0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
30ae0 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33  X_INDEX_ASC    3
30af0 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
30b00 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a  ndex ASCENDING *
30b10 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
30b20 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20  EX_INDEX_DESC   
30b30 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20  4   /* Existing 
30b40 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47  index DESCENDING
30b50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
30b60 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20  NDEX_NOOP       
30b70 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c    5   /* No tabl
30b80 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65  e available. Use
30b90 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a   comparisons */.
30ba0 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c  /*.** Allowed fl
30bb0 61 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20  ags for the 3rd 
30bc0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
30bd0 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
30be0 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  )..*/.#define IN
30bf0 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20  _INDEX_NOOP_OK  
30c00 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b     0x0001  /* OK
30c10 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e   to return IN_IN
30c20 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66  DEX_NOOP */.#def
30c30 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d  ine IN_INDEX_MEM
30c40 42 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20  BERSHIP  0x0002 
30c50 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
30c60 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73  used for members
30c70 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66  hip test */.#def
30c80 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f  ine IN_INDEX_LOO
30c90 50 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20  P        0x0004 
30ca0 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
30cb0 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a  used as a loop *
30cc0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  /.int sqlite3Fin
30cd0 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a  dInIndex(Parse *
30ce0 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69  , Expr *, u32, i
30cf0 6e 74 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  nt*, int*, int*)
30d00 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  ;..int sqlite3Jo
30d10 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
30d20 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63  3_vfs *, const c
30d30 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66  har *, sqlite3_f
30d40 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ile *, int, int)
30d50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75  ;.int sqlite3Jou
30d60 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33  rnalSize(sqlite3
30d70 5f 76 66 73 20 2a 29 3b 0a 23 69 66 20 64 65 66  _vfs *);.#if def
30d80 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
30d90 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29  LE_ATOMIC_WRITE)
30da0 20 5c 0a 20 7c 7c 20 64 65 66 69 6e 65 64 28 53   \. || defined(S
30db0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54  QLITE_ENABLE_BAT
30dc0 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29  CH_ATOMIC_WRITE)
30dd0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
30de0 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69  urnalCreate(sqli
30df0 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6e  te3_file *);.#en
30e00 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
30e10 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72  JournalIsInMemor
30e20 79 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  y(sqlite3_file *
30e30 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  p);.void sqlite3
30e40 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  MemJournalOpen(s
30e50 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
30e60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
30e70 72 53 65 74 48 65 69 67 68 74 41 6e 64 46 6c 61  rSetHeightAndFla
30e80 67 73 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  gs(Parse *pParse
30e90 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69 66 20  , Expr *p);.#if 
30ea0 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
30eb0 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 73 71  DEPTH>0.  int sq
30ec0 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
30ed0 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b  eight(Select *);
30ee0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78  .  int sqlite3Ex
30ef0 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50 61  prCheckHeight(Pa
30f00 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  rse*, int);.#els
30f10 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
30f20 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69  te3SelectExprHei
30f30 67 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69  ght(x) 0.  #defi
30f40 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  ne sqlite3ExprCh
30f50 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23  eckHeight(x,y).#
30f60 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74  endif..u32 sqlit
30f70 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74  e3Get4byte(const
30f80 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u8*);.void sqli
30f90 74 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c  te3Put4byte(u8*,
30fa0 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53   u32);..#ifdef S
30fb0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c  QLITE_ENABLE_UNL
30fc0 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69  OCK_NOTIFY.  voi
30fd0 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
30fe0 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74  ionBlocked(sqlit
30ff0 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29  e3 *, sqlite3 *)
31000 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
31010 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b  ConnectionUnlock
31020 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ed(sqlite3 *db);
31030 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
31040 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28  onnectionClosed(
31050 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65  sqlite3 *db);.#e
31060 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
31070 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42  lite3ConnectionB
31080 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64  locked(x,y).  #d
31090 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
310a0 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
310b0 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  x).  #define sql
310c0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
310d0 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a  osed(x).#endif..
310e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
310f0 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BUG.  void sqlit
31100 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49  e3ParserTrace(FI
31110 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65  LE*, char *);.#e
31120 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
31130 28 59 59 43 4f 56 45 52 41 47 45 29 0a 20 20 69  (YYCOVERAGE).  i
31140 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  nt sqlite3Parser
31150 43 6f 76 65 72 61 67 65 28 46 49 4c 45 2a 29 3b  Coverage(FILE*);
31160 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
31170 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  f the SQLITE_ENA
31180 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73  BLE IOTRACE exis
31190 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62  ts then the glob
311a0 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73  al variable.** s
311b0 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73  qlite3IoTrace is
311c0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
311d0 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74  printf-like rout
311e0 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70  ine used to.** p
311f0 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67  rint I/O tracing
31200 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69   messages..*/.#i
31210 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
31220 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66  LE_IOTRACE.# def
31230 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20  ine IOTRACE(A)  
31240 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61  if( sqlite3IoTra
31250 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54  ce ){ sqlite3IoT
31260 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64  race A; }.  void
31270 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
31280 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53  aceSql(Vdbe*);.S
31290 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45  QLITE_API SQLITE
312a0 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51  _EXTERN void (SQ
312b0 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69  LITE_CDECL *sqli
312c0 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73  te3IoTrace)(cons
312d0 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65  t char*,...);.#e
312e0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  lse.# define IOT
312f0 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65  RACE(A).# define
31300 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
31310 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66  aceSql(X).#endif
31320 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f  ../*.** These ro
31330 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c  utines are avail
31340 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d  able for the mem
31350 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65  2.c debugging me
31360 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a  mory allocator.*
31370 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72  * only.  They ar
31380 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79  e used to verify
31390 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20   that different 
313a0 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72  "types" of memor
313b0 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  y.** allocations
313c0 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72   are properly tr
313d0 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73  acked by the sys
313e0 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  tem..**.** sqlit
313f0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
31400 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79  e() sets the "ty
31410 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61  pe" of an alloca
31420 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a  tion to one of.*
31430 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20  * the MEMTYPE_* 
31440 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62  macros defined b
31450 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20  elow.  The type 
31460 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73  must be a bitmas
31470 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67  k with.** a sing
31480 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a  le bit set..**.*
31490 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
314a0 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72  gHasType() retur
314b0 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f  ns true if any o
314c0 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
314d0 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
314e0 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
314f0 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
31500 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
31510 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
31520 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  ..** sqlite3Memd
31530 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73  ebugHasType() is
31540 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73   intended for us
31550 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28  e inside assert(
31560 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  ) statements..**
31570 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
31580 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75  bugNoType() retu
31590 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65  rns true if none
315a0 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20   of the bits in 
315b0 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72  its second.** ar
315c0 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65  gument match the
315d0 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65   type set by the
315e0 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65   previous sqlite
315f0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
31600 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70  ()..**.** Perhap
31610 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72  s the most impor
31620 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68  tant point is th
31630 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
31640 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41  ween MEMTYPE_HEA
31650 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45  P.** and MEMTYPE
31660 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20  _LOOKASIDE.  If 
31670 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73  an allocation is
31680 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
31690 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a  DE, that means.*
316a0 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20  * it might have 
316b0 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62  been allocated b
316c0 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63  y lookaside, exc
316d0 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69  ept the allocati
316e0 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61  on was.** too la
316f0 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  rge or lookaside
31700 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c   was already ful
31710 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74  l.  It is import
31720 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  ant to verify.**
31730 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e   that allocation
31740 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  s that might hav
31750 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64  e been satisfied
31760 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72   by lookaside ar
31770 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20  e not.** passed 
31780 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b  back to non-look
31790 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
317a0 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20  tines.  Asserts 
317b0 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65  such as the.** e
317c0 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65  xample above are
317d0 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e   placed on the n
317e0 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
317f0 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20  e() routines to 
31800 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63  verify.** this c
31810 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a  onstraint..**.**
31820 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20   All of this is 
31830 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64  no-op for a prod
31840 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49  uction build.  I
31850 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74  t only comes int
31860 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74  o.** play when t
31870 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  he SQLITE_MEMDEB
31880 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  UG compile-time 
31890 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  option is used..
318a0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
318b0 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64  _MEMDEBUG.  void
318c0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
318d0 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  SetType(void*,u8
318e0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
318f0 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
31900 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74  void*,u8);.  int
31910 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
31920 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  NoType(void*,u8)
31930 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
31940 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
31950 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a  SetType(X,Y)  /*
31960 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69   no-op */.# defi
31970 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
31980 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20  ugHasType(X,Y)  
31990 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  1.# define sqlit
319a0 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
319b0 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66  (X,Y)   1.#endif
319c0 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
319d0 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31  _HEAP       0x01
319e0 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61    /* General hea
319f0 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  p allocations */
31a00 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
31a10 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32  _LOOKASIDE  0x02
31a20 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d    /* Heap that m
31a30 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c  ight have been l
31a40 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66  ookaside */.#def
31a50 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43  ine MEMTYPE_PCAC
31a60 48 45 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20  HE     0x04  /* 
31a70 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63  Page cache alloc
31a80 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
31a90 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72   Threading inter
31aa0 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  face.*/.#if SQLI
31ab0 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
31ac0 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69  READS>0.int sqli
31ad0 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65 28  te3ThreadCreate(
31ae0 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76  SQLiteThread**,v
31af0 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76  oid*(*)(void*),v
31b00 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
31b10 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c  e3ThreadJoin(SQL
31b20 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64  iteThread*, void
31b30 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  **);.#endif..#if
31b40 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
31b50 45 4e 41 42 4c 45 5f 44 42 50 41 47 45 5f 56 54  ENABLE_DBPAGE_VT
31b60 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  AB) || defined(S
31b70 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20  QLITE_TEST).int 
31b80 73 71 6c 69 74 65 33 44 62 70 61 67 65 52 65 67  sqlite3DbpageReg
31b90 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b  ister(sqlite3*);
31ba0 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
31bb0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
31bc0 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20 7c  E_DBSTAT_VTAB) |
31bd0 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
31be0 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74  _TEST).int sqlit
31bf0 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65 72  e3DbstatRegister
31c00 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64  (sqlite3*);.#end
31c10 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  if..int sqlite3E
31c20 78 70 72 56 65 63 74 6f 72 53 69 7a 65 28 45 78  xprVectorSize(Ex
31c30 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
31c40 73 71 6c 69 74 65 33 45 78 70 72 49 73 56 65 63  sqlite3ExprIsVec
31c50 74 6f 72 28 45 78 70 72 20 2a 70 45 78 70 72 29  tor(Expr *pExpr)
31c60 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 56  ;.Expr *sqlite3V
31c70 65 63 74 6f 72 46 69 65 6c 64 53 75 62 65 78 70  ectorFieldSubexp
31c80 72 28 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 45  r(Expr*, int);.E
31c90 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
31ca0 46 6f 72 56 65 63 74 6f 72 46 69 65 6c 64 28 50  ForVectorField(P
31cb0 61 72 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74 29  arse*,Expr*,int)
31cc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 65  ;.void sqlite3Ve
31cd0 63 74 6f 72 45 72 72 6f 72 4d 73 67 28 50 61 72  ctorErrorMsg(Par
31ce0 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 23 69  se*, Expr*);..#i
31cf0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
31d00 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f  T_COMPILEOPTION_
31d10 44 49 41 47 53 0a 63 6f 6e 73 74 20 63 68 61 72  DIAGS.const char
31d20 20 2a 2a 73 71 6c 69 74 65 33 43 6f 6d 70 69 6c   **sqlite3Compil
31d30 65 4f 70 74 69 6f 6e 73 28 69 6e 74 20 2a 70 6e  eOptions(int *pn
31d40 4f 70 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65  Opt);.#endif..#e
31d50 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 49 4e  ndif /* SQLITEIN
31d60 54 5f 48 20 2a 2f 0a                             T_H */.