/ Hex Artifact Content
Login

Artifact 214e56845ff775d1b53529d3d9488afa12d190d4b5ae56abd0a04ecfcf5f9097:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  ed(__PTRDIFF_TYP
1f20: 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61  E__)  /* This ca
1f30: 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66  se should work f
1f40: 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69  or GCC */.# defi
1f50: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
1f60: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
1f70: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1f80: 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  __)(X)).# define
1f90: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
1fa0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f  NT(X)  ((int)(__
1fb0: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
1fc0: 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  X)).#elif !defin
1fd0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20  ed(__GNUC__)    
1fe0: 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20     /* Works for 
1ff0: 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20  compilers other 
2000: 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64  than LLVM */.# d
2010: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2020: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2030: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
2040: 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X]).# define SQL
2050: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2060: 29 20 20 28 28 69 6e 74 29 28 28 28 63 68 61 72  )  ((int)(((char
2070: 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a  *)X)-(char*)0)).
2080: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41  #elif defined(HA
2090: 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f  VE_STDINT_H)   /
20a0: 2a 20 55 73 65 20 74 68 69 73 20 63 61 73 65 20  * Use this case 
20b0: 69 66 20 77 65 20 68 61 76 65 20 41 4e 53 49 20  if we have ANSI 
20c0: 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66  headers */.# def
20d0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
20e0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
20f0: 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  *)(intptr_t)(X))
2100: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2110: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2120: 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29  ((int)(intptr_t)
2130: 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  (X)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
6950: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 28 64 65  |    \.      (de
6960: 66 69 6e 65 64 28 5f 5f 54 4f 53 5f 41 49 58 5f  fined(__TOS_AIX_
6970: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
6980: 5f 36 34 42 49 54 5f 5f 29 29 0a 23 20 20 20 64  _64BIT__)).#   d
6990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
69a0: 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20  SIZE 4.# else.# 
69b0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
69c0: 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69  PTRSIZE 8.# endi
69d0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  f.#endif../* The
69e0: 20 75 70 74 72 20 74 79 70 65 20 69 73 20 61 6e   uptr type is an
69f0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6a00: 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
6a10: 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72  o hold a pointer
6a20: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6a30: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20  HAVE_STDINT_H). 
6a40: 20 74 79 70 65 64 65 66 20 75 69 6e 74 70 74 72   typedef uintptr
6a50: 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53  _t uptr;.#elif S
6a60: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34  QLITE_PTRSIZE==4
6a70: 0a 20 20 74 79 70 65 64 65 66 20 75 33 32 20 75  .  typedef u32 u
6a80: 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ptr;.#else.  typ
6a90: 65 64 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23  edef u64 uptr;.#
6aa0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6ab0: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6ac0: 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63  ,S,E) macro chec
6ad0: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69  ks to see if poi
6ae0: 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f  nter P points to
6af0: 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65  .** something be
6b00: 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69  tween S (inclusi
6b10: 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75  ve) and E (exclu
6b20: 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  sive)..**.** In 
6b30: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69  other words, S i
6b40: 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 45  s a buffer and E
6b50: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6b60: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
6b70: 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64  after.** the end
6b80: 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20 54   of buffer S.  T
6b90: 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e  his macro return
6ba0: 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e  s true if P poin
6bb0: 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a  ts to something.
6bc0: 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  ** contained wit
6bd0: 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 53  hin the buffer S
6be0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
6bf0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
6c00: 29 20 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28  ) (((uptr)(P)>=(
6c10: 75 70 74 72 29 28 53 29 29 26 26 28 28 75 70 74  uptr)(S))&&((upt
6c20: 72 29 28 50 29 3c 28 75 70 74 72 29 28 45 29 29  r)(P)<(uptr)(E))
6c30: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  ).../*.** Macros
6c40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
6c50: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
6c60: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
6c70: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
6c80: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
6c90: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
6ca0: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
6cb0: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
6cc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
6cd0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
6ce0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
6cf0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
6d00: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
6d10: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
6d20: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
6d30: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
6d40: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
6d50: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6d60: 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  =0 is set, then 
6d70: 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65  byte-order is de
6d80: 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72  termined.** at r
6d90: 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e  un-time..*/.#ifn
6da0: 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  def SQLITE_BYTEO
6db0: 52 44 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65  RDER.# if define
6dc0: 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64  d(i386)     || d
6dd0: 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29  efined(__i386__)
6de0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d     || defined(_M
6df0: 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20  _IX86) ||    \. 
6e00: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38      defined(__x8
6e10: 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64  6_64) || defined
6e20: 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20  (__x86_64__) || 
6e30: 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20  defined(_M_X64) 
6e40: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
6e50: 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20  fined(_M_AMD64) 
6e60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52  || defined(_M_AR
6e70: 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  M)     || define
6e80: 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20  d(__x86)   ||   
6e90: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6ea0: 5f 5f 61 72 6d 5f 5f 29 20 20 7c 7c 20 64 65 66  __arm__)  || def
6eb0: 69 6e 65 64 28 5f 4d 5f 41 52 4d 36 34 29 0a 23  ined(_M_ARM64).#
6ec0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6ed0: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32  _BYTEORDER    12
6ee0: 33 34 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65  34.# elif define
6ef0: 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64  d(sparc)    || d
6f00: 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a  efined(__ppc__).
6f10: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6f20: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34  E_BYTEORDER    4
6f30: 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  321.# else.#   d
6f40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
6f50: 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66  EORDER 0.# endif
6f60: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
6f70: 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33  TE_BYTEORDER==43
6f80: 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  21.# define SQLI
6f90: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
6fa0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
6fb0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30  E_LITTLEENDIAN 0
6fc0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6fd0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
6fe0: 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c  LITE_UTF16BE.#el
6ff0: 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  if SQLITE_BYTEOR
7000: 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69  DER==1234.# defi
7010: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
7020: 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e  IAN    0.# defin
7030: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7040: 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65  NDIAN 1.# define
7050: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
7060: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
7070: 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65  6LE.#else.# ifde
7080: 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
7090: 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e  ATION.  const in
70a0: 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31  t sqlite3one = 1
70b0: 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72  ;.# else.  exter
70c0: 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69  n const int sqli
70d0: 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a  te3one;.# endif.
70e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
70f0: 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28  BIGENDIAN    (*(
7100: 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33  char *)(&sqlite3
7110: 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e  one)==0).# defin
7120: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7130: 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29  NDIAN (*(char *)
7140: 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31  (&sqlite3one)==1
7150: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
7160: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 28  E_UTF16NATIVE  (
7170: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
7180: 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a  ?SQLITE_UTF16BE:
7190: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a  SQLITE_UTF16LE).
71a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f  #endif../*.** Co
71b0: 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20  nstants for the 
71c0: 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c  largest and smal
71d0: 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34  lest possible 64
71e0: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
71f0: 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d  gers..** These m
7200: 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e  acros are design
7210: 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65  ed to work corre
7220: 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d  ctly on both 32-
7230: 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a  bit and 64-bit.*
7240: 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a  * compilers..*/.
7250: 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f  #define LARGEST_
7260: 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66 66  INT64  (0xffffff
7270: 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66 66  ff|(((i64)0x7fff
7280: 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66  ffff)<<32)).#def
7290: 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  ine SMALLEST_INT
72a0: 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20  64 (((i64)-1) - 
72b0: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a  LARGEST_INT64)..
72c0: 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61  /*.** Round up a
72d0: 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e   number to the n
72e0: 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69  ext larger multi
72f0: 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20  ple of 8.  This 
7300: 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f  is used.** to fo
7310: 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e  rce 8-byte align
7320: 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61  ment on 64-bit a
7330: 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f  rchitectures..*/
7340: 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28  .#define ROUND8(
7350: 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26  x)     (((x)+7)&
7360: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64  ~7)../*.** Round
7370: 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61   down to the nea
7380: 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66  rest multiple of
7390: 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f   8.*/.#define RO
73a0: 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29  UNDDOWN8(x) ((x)
73b0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65  &~7)../*.** Asse
73c0: 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e  rt that the poin
73d0: 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64  ter X is aligned
73e0: 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f   to an 8-byte bo
73f0: 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a  undary.  This.**
7400: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f   macro is used o
7410: 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72  nly within asser
7420: 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68  t() to verify th
7430: 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73  at the code gets
7440: 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e  .** all alignmen
7450: 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63  t restrictions c
7460: 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78  orrect..**.** Ex
7470: 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f  cept, if SQLITE_
7480: 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d  4_BYTE_ALIGNED_M
7490: 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64  ALLOC is defined
74a0: 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e  , then the.** un
74b0: 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28  derlying malloc(
74c0: 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  ) implementation
74d0: 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73   might return us
74e0: 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a   4-byte aligned.
74f0: 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e  ** pointers.  In
7500: 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79   that case, only
7510: 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61   verify 4-byte a
7520: 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66  lignment..*/.#if
7530: 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54  def SQLITE_4_BYT
7540: 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43  E_ALIGNED_MALLOC
7550: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
7560: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
7570: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
7580: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29  ) - (char*)0)&3)
7590: 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
75a0: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
75b0: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
75c0: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
75d0: 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23  har*)0)&7)==0).#
75e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73  endif../*.** Dis
75f0: 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61  able MMAP on pla
7600: 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20  tforms where it 
7610: 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20  is known to not 
7620: 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69  work.*/.#if defi
7630: 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29  ned(__OpenBSD__)
7640: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e   || defined(__QN
7650: 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20  XNTO__).# undef 
7660: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
7670: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7680: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7690: 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ZE 0.#endif../*.
76a0: 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d  ** Default maxim
76b0: 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72  um size of memor
76c0: 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79  y used by memory
76d0: 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74  -mapped I/O in t
76e0: 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66  he VFS.*/.#ifdef
76f0: 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63   __APPLE__.# inc
7700: 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64  lude <TargetCond
7710: 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64  itionals.h>.#end
7720: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
7730: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
7740: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
7750: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
7760: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
7770: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
7780: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
7790: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
77a0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
77b0: 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66  _sun) \.  || def
77c0: 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f  ined(__FreeBSD__
77d0: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
77e0: 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a  (__DragonFly__).
77f0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
7800: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
7810: 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32  0x7fff0000  /* 2
7820: 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65  147418112 */.# e
7830: 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53  lse.#   define S
7840: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
7850: 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 0.# endif.#e
7860: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
7870: 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a  default MMAP_SIZ
7880: 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c  E is zero on all
7890: 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c   platforms.  Or,
78a0: 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65   even if a large
78b0: 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41  r.** default MMA
78c0: 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66  P_SIZE is specif
78d0: 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ied at compile-t
78e0: 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74  ime, make sure t
78f0: 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e  hat it does.** n
7900: 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61  ot exceed the ma
7910: 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e  ximum mmap size.
7920: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
7930: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7940: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7950: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
7960: 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a  P_SIZE 0.#endif.
7970: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
7980: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
7990: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
79a0: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
79b0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
79c0: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
79d0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
79e0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
79f0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
7a00: 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65  ../*.** Only one
7a10: 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   of SQLITE_ENABL
7a20: 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54  E_STAT3 or SQLIT
7a30: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63  E_ENABLE_STAT4 c
7a40: 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a  an be defined..*
7a50: 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69  * Priority is gi
7a60: 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e  ven to SQLITE_EN
7a70: 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20  ABLE_STAT4.  If 
7a80: 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e  either are defin
7a90: 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69  ed, also.** defi
7aa0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7ab0: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
7ac0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
7ad0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20  _ENABLE_STAT4.# 
7ae0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
7af0: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
7b00: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7b10: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
7b20: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
7b30: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
7b40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
7b50: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
7b60: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
7b70: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
7b80: 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53  _STAT4.# undef S
7b90: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7ba0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64  T3_OR_STAT4.#end
7bb0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54  if../*.** SELECT
7bc0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69  TRACE_ENABLED wi
7bd0: 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f  ll be either 1 o
7be0: 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  r 0 depending on
7bf0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a   whether or not.
7c00: 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75  ** the Select qu
7c10: 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72  ery generator tr
7c20: 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74  acing logic is t
7c30: 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66  urned on..*/.#if
7c40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
7c50: 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41  ENABLE_SELECTTRA
7c60: 43 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c  CE).# define SEL
7c70: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
7c80: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
7c90: 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  e SELECTTRACE_EN
7ca0: 41 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a  ABLED 0.#endif..
7cb0: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
7cc0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
7cd0: 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
7ce0: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
7cf0: 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a  e busy-handler.*
7d00: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  * callback for a
7d10: 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61   given sqlite ha
7d20: 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndle..**.** The 
7d30: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
7d40: 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  er member of the
7d50: 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63   sqlite struct c
7d60: 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79  ontains the busy
7d70: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
7d80: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
7d90: 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72  ndle. Each pager
7da0: 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20   opened via the 
7db0: 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65  sqlite.** handle
7dc0: 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69   is passed a poi
7dd0: 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62  nter to sqlite.b
7de0: 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20  usyHandler. The 
7df0: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
7e00: 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72  callback is curr
7e10: 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e  ently invoked on
7e20: 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70  ly from within p
7e30: 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64  ager.c..*/.typed
7e40: 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61  ef struct BusyHa
7e50: 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65  ndler BusyHandle
7e60: 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61  r;.struct BusyHa
7e70: 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  ndler {.  int (*
7e80: 78 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f  xBusyHandler)(vo
7e90: 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54  id *,int);  /* T
7ea0: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
7eb0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73   */.  void *pBus
7ec0: 79 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  yArg;           
7ed0: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
7ee0: 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c   arg to busy cal
7ef0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
7f00: 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  Busy;           
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7f20: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
7f30: 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20   each busy call 
7f40: 2a 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69  */.  u8 bExtraFi
7f50: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
7f60: 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64         /* Includ
7f70: 65 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61  e sqlite3_file a
7f80: 73 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a  s callback arg *
7f90: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65  /.};../*.** Name
7fa0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
7fb0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20  atabase table.  
7fc0: 54 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  The master datab
7fd0: 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  ase table.** is 
7fe0: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20  a special table 
7ff0: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e  that holds the n
8000: 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75  ames and attribu
8010: 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73  tes of all.** us
8020: 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  er tables and in
8030: 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  dices..*/.#defin
8040: 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20  e MASTER_NAME   
8050: 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74      "sqlite_mast
8060: 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50  er".#define TEMP
8070: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73  _MASTER_NAME  "s
8080: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
8090: 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f  r"../*.** The ro
80a0: 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d  ot-page of the m
80b0: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
80c0: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
80d0: 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20   MASTER_ROOT    
80e0: 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
80f0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65  name of the sche
8100: 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  ma table..*/.#de
8110: 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c  fine SCHEMA_TABL
8120: 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45  E(x)  ((!OMIT_TE
8130: 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45  MPDB)&&(x==1)?TE
8140: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d  MP_MASTER_NAME:M
8150: 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a  ASTER_NAME)../*.
8160: 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65  ** A convenience
8170: 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75   macro that retu
8180: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
8190: 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a  f elements in.**
81a0: 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64   an array..*/.#d
81b0: 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28  efine ArraySize(
81c0: 58 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a  X)    ((int)(siz
81d0: 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b  eof(X)/sizeof(X[
81e0: 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  0])))../*.** Det
81f0: 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72  ermine if the ar
8200: 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65  gument is a powe
8210: 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66  r of two.*/.#def
8220: 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f  ine IsPowerOfTwo
8230: 28 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31  (X) (((X)&((X)-1
8240: 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  ))==0)../*.** Th
8250: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75  e following valu
8260: 65 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f  e as a destructo
8270: 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73  r means to use s
8280: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a  qlite3DbFree()..
8290: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62  ** The sqlite3Db
82a0: 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72  Free() routine r
82b0: 65 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61  equires two para
82c0: 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f  meters instead o
82d0: 66 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72  f the.** one par
82e0: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
82f0: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
8300: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
8310: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a  ve to introduce.
8320: 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61  ** this magic va
8330: 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64  lue that the cod
8340: 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c  e knows to handl
8350: 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20  e differently.  
8360: 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77  Any.** pointer w
8370: 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73  ill work here as
8380: 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64   long as it is d
8390: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c  istinct from SQL
83a0: 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e  ITE_STATIC.** an
83b0: 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  d SQLITE_TRANSIE
83c0: 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NT..*/.#define S
83d0: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20  QLITE_DYNAMIC   
83e0: 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75  ((sqlite3_destru
83f0: 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65  ctor_type)sqlite
8400: 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a  3MallocSize)../*
8410: 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f  .** When SQLITE_
8420: 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69  OMIT_WSD is defi
8430: 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ned, it means th
8440: 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c  at the target pl
8450: 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e  atform does.** n
8460: 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61  ot support Writa
8470: 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20  ble Static Data 
8480: 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c  (WSD) such as gl
8490: 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20  obal and static 
84a0: 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c  variables..** Al
84b0: 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74  l variables must
84c0: 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68   either be on th
84d0: 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d  e stack or dynam
84e0: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
84f0: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61   from.** the hea
8500: 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20  p.  When WSD is 
8510: 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  unsupported, the
8520: 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72   variable declar
8530: 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64  ations scattered
8540: 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74  .** throughout t
8550: 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d  he SQLite code m
8560: 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ust become const
8570: 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54  ants instead.  T
8580: 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a  he SQLITE_WSD.**
8590: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
85a0: 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e  or this purpose.
85b0: 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66    And instead of
85c0: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65   referencing the
85d0: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72   variable.** dir
85e0: 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74  ectly, we use it
85f0: 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20  s constant as a 
8600: 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68  key to lookup th
8610: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8620: 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74  ated.** buffer t
8630: 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76  hat holds real v
8640: 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f  ariable.  The co
8650: 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74  nstant is also t
8660: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a  he initializer.*
8670: 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69  * for the run-ti
8680: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  me allocated buf
8690: 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  fer..**.** In th
86a0: 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65  e usual case whe
86b0: 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72  re WSD is suppor
86c0: 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  ted, the SQLITE_
86d0: 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a  WSD and GLOBAL.*
86e0: 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20  * macros become 
86f0: 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20  no-ops and have 
8700: 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65  zero performance
8710: 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64   impact..*/.#ifd
8720: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
8730: 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  SD.  #define SQL
8740: 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20  ITE_WSD const.  
8750: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
8760: 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65  ,v) (*(t*)sqlite
8770: 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64  3_wsd_find((void
8780: 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76  *)&(v), sizeof(v
8790: 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ))).  #define sq
87a0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
87b0: 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20  g GLOBAL(struct 
87c0: 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73  Sqlite3Config, s
87d0: 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20  qlite3Config).  
87e0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f  int sqlite3_wsd_
87f0: 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20  init(int N, int 
8800: 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  J);.  void *sqli
8810: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69  te3_wsd_find(voi
8820: 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65  d *K, int L);.#e
8830: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51  lse.  #define SQ
8840: 4c 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69  LITE_WSD.  #defi
8850: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76  ne GLOBAL(t,v) v
8860: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
8870: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73  e3GlobalConfig s
8880: 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e  qlite3Config.#en
8890: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
88a0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
88b0: 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70  are used to supp
88c0: 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61  ress compiler wa
88d0: 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a  rnings and to.**
88e0: 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74   make it clear t
88f0: 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20  o human readers 
8900: 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  when a function 
8910: 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c  parameter is del
8920: 69 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66  iberately.** lef
8930: 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20  t unused within 
8940: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
8950: 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75  nction. This usu
8960: 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65  ally happens whe
8970: 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20  n.** a function 
8980: 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20  is called via a 
8990: 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
89a0: 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  . For example th
89b0: 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
89c0: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
89d0: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
89e0: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
89f0: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
8a00: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
8a10: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
8a20: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
8a30: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
8a40: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
8a50: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
8a60: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
8a70: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
8a80: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
8a90: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
8aa0: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
8ab0: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
8ac0: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
8ad0: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
8ae0: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
8af0: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
8b00: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
8b10: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
8b20: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
8b30: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
8b40: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
8b50: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
8b60: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
8b70: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
8b80: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
8b90: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
8ba0: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
8bb0: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
8bc0: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
8bd0: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
8be0: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
8bf0: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
8c00: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
8c10: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
8c20: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
8c30: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
8c40: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
8c50: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
8c60: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
8c70: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
8c80: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
8c90: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
8ca0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
8cb0: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
8cc0: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
8cd0: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
8ce0: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
8cf0: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
8d00: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
8d10: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8d20: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
8d30: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
8d40: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
8d50: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
8d60: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
8d70: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
8d80: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
8d90: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
8da0: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
8db0: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
8dc0: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
8dd0: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
8de0: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
8df0: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
8e00: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
8e10: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
8e20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e30: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
8e40: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
8e50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e60: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
8e70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e80: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
8e90: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
8ea0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
8eb0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
8ec0: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
8ed0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8ee0: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
8ef0: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
8f00: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
8f10: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
8f20: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
8f30: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
8f40: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
8f50: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
8f60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
8f70: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
8f80: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
8f90: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
8fa0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
8fb0: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
8fc0: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
8fd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8fe0: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
8ff0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55  edef struct PreU
9000: 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b  pdate PreUpdate;
9010: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9020: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
9030: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b  PrintfArguments;
9040: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9050: 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e 61  RenameToken Rena
9060: 6d 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66  meToken;.typedef
9070: 20 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52   struct RowSet R
9080: 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73  owSet;.typedef s
9090: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
90a0: 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64  Savepoint;.typed
90b0: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
90c0: 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66   Select;.typedef
90d0: 20 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68   struct SQLiteTh
90e0: 72 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61  read SQLiteThrea
90f0: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
9100: 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c  t SelectDest Sel
9110: 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66  ectDest;.typedef
9120: 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20   struct SrcList 
9130: 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66  SrcList;.typedef
9140: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f   struct sqlite3_
9150: 73 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f 2a  str StrAccum; /*
9160: 20 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73 20   Internal alias 
9170: 66 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72 20  for sqlite3_str 
9180: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
9190: 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74  t Table Table;.t
91a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
91b0: 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63  bleLock TableLoc
91c0: 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  k;.typedef struc
91d0: 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74  t Token Token;.t
91e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
91f0: 65 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b  eeView TreeView;
9200: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9210: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
9220: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9230: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
9240: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
9250: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
9260: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
9270: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
9280: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
9290: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
92a0: 65 64 65 66 20 73 74 72 75 63 74 20 55 70 73 65  edef struct Upse
92b0: 72 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65 64  rt Upsert;.typed
92c0: 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65  ef struct VTable
92d0: 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66   VTable;.typedef
92e0: 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20   struct VtabCtx 
92f0: 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66  VtabCtx;.typedef
9300: 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57   struct Walker W
9310: 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73  alker;.typedef s
9320: 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20  truct WhereInfo 
9330: 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64  WhereInfo;.typed
9340: 65 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77  ef struct Window
9350: 20 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65 66   Window;.typedef
9360: 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74   struct With Wit
9370: 68 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62  h;.../*.** The b
9380: 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20  itmask datatype 
9390: 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73  defined below is
93a0: 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75   used for variou
93b0: 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
93c0: 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20  .**.** Changing 
93d0: 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62  this from a 64-b
93e0: 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74  it to a 32-bit t
93f0: 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e  ype limits the n
9400: 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c  umber of.** tabl
9410: 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20  es in a join to 
9420: 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34  32 instead of 64
9430: 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72  .  But it also r
9440: 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a  educes the size.
9450: 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  ** of the librar
9460: 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f  y by 738 bytes o
9470: 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65  n ix86..*/.#ifde
9480: 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b  f SQLITE_BITMASK
9490: 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20  _TYPE.  typedef 
94a0: 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54  SQLITE_BITMASK_T
94b0: 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c  YPE Bitmask;.#el
94c0: 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34  se.  typedef u64
94d0: 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66   Bitmask;.#endif
94e0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
94f0: 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20  er of bits in a 
9500: 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20  Bitmask.  "BMS" 
9510: 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53  means "BitMask S
9520: 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ize"..*/.#define
9530: 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a   BMS  ((int)(siz
9540: 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29  eof(Bitmask)*8))
9550: 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e  ../*.** A bit in
9560: 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64   a Bitmask.*/.#d
9570: 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29  efine MASKBIT(n)
9580: 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29     (((Bitmask)1)
9590: 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d  <<(n)).#define M
95a0: 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75  ASKBIT32(n) (((u
95b0: 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c  nsigned int)1)<<
95c0: 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c  (n)).#define ALL
95d0: 42 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d  BITS      ((Bitm
95e0: 61 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56 4c  ask)-1)../* A VL
95f0: 69 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f 72  ist object recor
9600: 64 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65 74  ds a mapping bet
9610: 77 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73 2f  ween parameters/
9620: 76 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63 61  variables/wildca
9630: 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53 51  rds.** in the SQ
9640: 4c 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75 63  L statement (suc
9650: 68 20 61 73 20 24 61 62 63 2c 20 40 70 71 72 2c  h as $abc, @pqr,
9660: 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74 68   or :xyz) and th
9670: 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 72  e integer.** var
9680: 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73 73  iable number ass
9690: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61  ociated with tha
96a0: 74 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53 65  t parameter.  Se
96b0: 65 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65 73  e the format des
96c0: 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74  cription.** on t
96d0: 68 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74 41  he sqlite3VListA
96e0: 64 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72  dd() routine for
96f0: 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f   more informatio
9700: 6e 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20 72  n.  A VList is r
9710: 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61 6e  eally.** just an
9720: 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65   array of intege
9730: 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 69  rs..*/.typedef i
9740: 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a  nt VList;../*.**
9750: 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20   Defer sourcing 
9760: 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65  vdbe.h and btree
9770: 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74  .h until after t
9780: 68 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22  he "u8" and.** "
9790: 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70  BusyHandler" typ
97a0: 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c  edefs. vdbe.h al
97b0: 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65  so requires a fe
97c0: 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a  w of the opaque.
97d0: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73  ** pointer types
97e0: 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20   (i.e. FuncDef) 
97f0: 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a  defined above..*
9800: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65  /.#include "btre
9810: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76  e.h".#include "v
9820: 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  dbe.h".#include 
9830: 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75  "pager.h".#inclu
9840: 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69  de "pcache.h".#i
9850: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
9860: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
9870: 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  ../* The SQLITE_
9880: 45 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f  EXTRA_DURABLE co
9890: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
98a0: 6e 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68  n used to set th
98b0: 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e  e default.** syn
98c0: 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67  chronous setting
98d0: 20 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69   to EXTRA.  It i
98e0: 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70  s no longer supp
98f0: 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  orted..*/.#ifdef
9900: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9910: 52 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20  RABLE.# warning 
9920: 55 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  Use SQLITE_DEFAU
9930: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33  LT_SYNCHRONOUS=3
9940: 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49   instead of SQLI
9950: 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45  TE_EXTRA_DURABLE
9960: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
9970: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
9980: 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f  NOUS 3.#endif../
9990: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e  *.** Default syn
99a0: 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e  chronous levels.
99b0: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
99c0: 20 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20   (for historcal 
99d0: 72 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47  reasons) the PAG
99e0: 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a  ER_SYNCHRONOUS_*
99f0: 20 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a   macros differ.*
9a00: 2a 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54  * from the SQLIT
9a10: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
9a20: 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31  ONOUS value by 1
9a30: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  ..**.**         
9a40: 20 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e    PAGER_SYNCHRON
9a50: 4f 55 53 20 20 20 20 20 20 20 44 45 46 41 55 4c  OUS       DEFAUL
9a60: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a  T_SYNCHRONOUS.**
9a70: 20 20 20 4f 46 46 20 20 20 20 20 20 20 20 20 20     OFF          
9a80: 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
9a90: 20 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20             0.** 
9aa0: 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20    NORMAL        
9ab0: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2               
9ac0: 20 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20            1.**  
9ad0: 20 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33   FULL          3
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9af0: 20 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20           2.**   
9b00: 45 58 54 52 41 20 20 20 20 20 20 20 20 20 34 20  EXTRA         4 
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b20: 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20          3.**.** 
9b30: 54 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63  The "PRAGMA sync
9b40: 68 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65  hronous" stateme
9b50: 6e 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65  nt also uses the
9b60: 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62   zero-based numb
9b70: 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ers..** In other
9b80: 20 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f   words, the zero
9b90: 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61  -based numbers a
9ba0: 72 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20  re used for all 
9bb0: 65 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61  external interfa
9bc0: 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f  ces.** and the o
9bd0: 6e 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20  ne-based values 
9be0: 61 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61  are used interna
9bf0: 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  lly..*/.#ifndef 
9c00: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9c10: 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66  YNCHRONOUS.# def
9c20: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
9c30: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 32  LT_SYNCHRONOUS 2
9c40: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
9c50: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
9c60: 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23  AL_SYNCHRONOUS.#
9c70: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
9c80: 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48  EFAULT_WAL_SYNCH
9c90: 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45  RONOUS SQLITE_DE
9ca0: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
9cb0: 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  S.#endif../*.** 
9cc0: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69  Each database fi
9cd0: 6c 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65  le to be accesse
9ce0: 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20  d by the system 
9cf0: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
9d00: 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * of the followi
9d10: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  ng structure.  T
9d20: 68 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  here are normall
9d30: 79 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73  y two of these s
9d40: 74 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20  tructures.** in 
9d50: 74 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d  the sqlite.aDb[]
9d60: 20 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20   array.  aDb[0] 
9d70: 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
9d80: 62 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a  base file and.**
9d90: 20 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64   aDb[1] is the d
9da0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
9db0: 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72  d to hold tempor
9dc0: 61 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64  ary tables.  Add
9dd0: 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62  itional.** datab
9de0: 61 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61  ases may be atta
9df0: 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ched..*/.struct 
9e00: 44 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62  Db {.  char *zDb
9e10: 53 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  SName;      /* N
9e20: 61 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61  ame of this data
9e30: 62 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e 61  base. (schema na
9e40: 6d 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65  me, not filename
9e50: 29 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  ) */.  Btree *pB
9e60: 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  t;          /* T
9e70: 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74  he B*Tree struct
9e80: 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74  ure for this dat
9e90: 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20  abase file */.  
9ea0: 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b  u8 safety_level;
9eb0: 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72       /* How aggr
9ec0: 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e  essive at syncin
9ed0: 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a  g data to disk *
9ee0: 2f 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b  /.  u8 bSyncSet;
9ef0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
9f00: 20 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63   if "PRAGMA sync
9f10: 68 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62  hronous=N" has b
9f20: 65 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68  een run */.  Sch
9f30: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
9f40: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
9f50: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
9f60: 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64  (possibly shared
9f70: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ) */.};../*.** A
9f80: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
9f90: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
9fa0: 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64  cture stores a d
9fb0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
9fc0: 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d  **.** Most Schem
9fd0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73  a objects are as
9fe0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
9ff0: 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65  Btree.  The exce
a000: 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20  ption is.** the 
a010: 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54  Schema for the T
a020: 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71  EMP databaes (sq
a030: 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68  lite3.aDb[1]) wh
a040: 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e  ich is free-stan
a050: 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72  ding..** In shar
a060: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61  ed cache mode, a
a070: 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f   single Schema o
a080: 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61  bject can be sha
a090: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a  red by multiple.
a0a0: 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72  ** Btrees that r
a0b0: 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65  efer to the same
a0c0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68   underlying BtSh
a0d0: 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a  ared object..**.
a0e0: 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  ** Schema object
a0f0: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
a100: 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20  lly deallocated 
a110: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74  when the last Bt
a120: 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65  ree that.** refe
a130: 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64  rences them is d
a140: 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20  estroyed.   The 
a150: 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d  TEMP Schema is m
a160: 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79  anually freed by
a170: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  .** sqlite3_clos
a180: 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65  e()..*.** A thre
a190: 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69  ad must be holdi
a1a0: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
a1b0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
a1c0: 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a  Btree in order.*
a1d0: 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65  * to access Sche
a1e0: 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69  ma content.  Thi
a1f0: 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74  s implies that t
a200: 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61  he thread must a
a210: 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e  lso be.** holdin
a220: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
a230: 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74   sqlite3 connect
a240: 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ion pointer that
a250: 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e   owns the Btree.
a260: 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53  .** For a TEMP S
a270: 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20  chema, only the 
a280: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  connection mutex
a290: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   is required..*/
a2a0: 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b  .struct Schema {
a2b0: 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f  .  int schema_co
a2c0: 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62  okie;   /* Datab
a2d0: 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  ase schema versi
a2e0: 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  on number for th
a2f0: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74  is file */.  int
a300: 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20   iGeneration;   
a310: 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20    /* Generation 
a320: 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d  counter.  Increm
a330: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
a340: 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68  change */.  Hash
a350: 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20   tblHash;       
a360: 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69   /* All tables i
a370: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
a380: 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68  /.  Hash idxHash
a390: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
a3a0: 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20  (named) indices 
a3b0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
a3c0: 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61  */.  Hash trigHa
a3d0: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
a3e0: 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65   triggers indexe
a3f0: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
a400: 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20  ash fkeyHash;   
a410: 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69      /* All forei
a420: 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72  gn keys by refer
a430: 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65  enced table name
a440: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65   */.  Table *pSe
a450: 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68  qTab;      /* Th
a460: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
a470: 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20  e table used by 
a480: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
a490: 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61  .  u8 file_forma
a4a0: 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  t;      /* Schem
a4b0: 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  a format version
a4c0: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
a4d0: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
a4e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
a4f0: 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62   encoding used b
a500: 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  y this database 
a510: 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46  */.  u16 schemaF
a520: 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61  lags;     /* Fla
a530: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
a540: 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  th this schema *
a550: 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69  /.  int cache_si
a560: 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ze;      /* Numb
a570: 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75  er of pages to u
a580: 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20  se in the cache 
a590: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
a5a0: 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
a5b0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
a5c0: 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
a5d0: 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70  s in the.** Db.p
a5e0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
a5f0: 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
a600: 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c  DbHasProperty(D,
a610: 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e  I,P)     (((D)->
a620: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a630: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
a640: 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44  ==(P)).#define D
a650: 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28  bHasAnyProperty(
a660: 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61  D,I,P)  (((D)->a
a670: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a680: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21  chemaFlags&(P))!
a690: 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65  =0).#define DbSe
a6a0: 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  tProperty(D,I,P)
a6b0: 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d       (D)->aDb[I]
a6c0: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
a6d0: 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  Flags|=(P).#defi
a6e0: 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72  ne DbClearProper
a6f0: 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d  ty(D,I,P)   (D)-
a700: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
a710: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28  >schemaFlags&=~(
a720: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
a730: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
a740: 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   DB.pSchema->fla
a750: 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
a760: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
a770: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
a780: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
a790: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
a7a0: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
a7b0: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
a7c0: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
a7d0: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
a7e0: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
a7f0: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
a800: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
a810: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
a820: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
a830: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
a840: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
a850: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
a860: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
a870: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
a880: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
a890: 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61  define DB_Schema
a8a0: 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31  Loaded    0x0001
a8b0: 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20    /* The schema 
a8c0: 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  has been loaded 
a8d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e  */.#define DB_Un
a8e0: 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78  resetViews    0x
a8f0: 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69  0002  /* Some vi
a900: 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64  ews have defined
a910: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   column names */
a920: 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74  .#define DB_Empt
a930: 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  y           0x00
a940: 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20  04  /* The file 
a950: 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68  is empty (length
a960: 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 23 64 65   0 bytes) */.#de
a970: 66 69 6e 65 20 44 42 5f 52 65 73 65 74 57 61 6e  fine DB_ResetWan
a980: 74 65 64 20 20 20 20 20 30 78 30 30 30 38 20 20  ted     0x0008  
a990: 2f 2a 20 52 65 73 65 74 20 74 68 65 20 73 63 68  /* Reset the sch
a9a0: 65 6d 61 20 77 68 65 6e 20 6e 53 63 68 65 6d 61  ema when nSchema
a9b0: 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a  Lock==0 */../*.*
a9c0: 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
a9d0: 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20  different kinds 
a9e0: 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63  of things that c
a9f0: 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a  an be limited.**
aa00: 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74   using the sqlit
aa10: 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72  e3_limit() inter
aa20: 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  face..*/.#define
aa30: 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20   SQLITE_N_LIMIT 
aa40: 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f  (SQLITE_LIMIT_WO
aa50: 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a  RKER_THREADS+1).
aa60: 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  ./*.** Lookaside
aa70: 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74   malloc is a set
aa80: 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62   of fixed-size b
aa90: 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20  uffers that can 
aaa0: 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  be used.** to sa
aab0: 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e  tisfy small tran
aac0: 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c  sient memory all
aad0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73  ocation requests
aae0: 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20   for objects.** 
aaf0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
ab00: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
ab10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ab20: 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a  .  The use of.**
ab30: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
ab40: 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67  c provides a sig
ab50: 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d  nificant perform
ab60: 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74  ance enhancement
ab70: 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29  .** (approx 10%)
ab80: 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d   by avoiding num
ab90: 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65  erous malloc/fre
aba0: 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65  e requests while
abb0: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20   parsing.** SQL 
abc0: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
abd0: 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20  * The Lookaside 
abe0: 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
abf0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e  configuration in
ac00: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
ac10: 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  the.** lookaside
ac20: 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65   malloc subsyste
ac30: 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62  m.  Each availab
ac40: 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
ac50: 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c  tion in.** the l
ac60: 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74  ookaside subsyst
ac70: 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20  em is stored on 
ac80: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
ac90: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a   LookasideSlot.*
aca0: 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a  * objects..**.**
acb0: 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   Lookaside alloc
acc0: 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20  ations are only 
acd0: 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65  allowed for obje
ace0: 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73  cts that are ass
acf0: 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20  ociated.** with 
ad00: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
ad10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ad20: 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61  .  Hence, schema
ad30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e   information can
ad40: 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64  not.** be stored
ad50: 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65   in lookaside be
ad60: 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20  cause in shared 
ad70: 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73  cache mode the s
ad80: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
ad90: 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62  n.** is shared b
ada0: 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  y multiple datab
adb0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e  ase connections.
adc0: 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69    Therefore, whi
add0: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63  le parsing.** sc
ade0: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
adf0: 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e  , the Lookaside.
ae00: 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73  bEnabled flag is
ae10: 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74   cleared so that
ae20: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** lookaside al
ae30: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f  locations are no
ae40: 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72  t used to constr
ae50: 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f  uct the schema o
ae60: 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63  bjects..*/.struc
ae70: 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20  t Lookaside {.  
ae80: 75 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20  u32 bDisable;   
ae90: 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20          /* Only 
aea0: 6f 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b  operate the look
aeb0: 61 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20  aside when zero 
aec0: 2a 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20  */.  u16 sz;    
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aee0: 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66  Size of each buf
aef0: 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  fer in bytes */.
af00: 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20    u8 bMalloced; 
af10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
af20: 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61  e if pStart obta
af30: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
af40: 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20  3_malloc() */.  
af50: 75 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20 20 20  u32 nSlot;      
af60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
af70: 72 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65 20 73  r of lookaside s
af80: 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  lots allocated *
af90: 2f 0a 20 20 75 33 32 20 61 6e 53 74 61 74 5b 33  /.  u32 anStat[3
afa0: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30  ];          /* 0
afb0: 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65  : hits.  1: size
afc0: 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c   misses.  2: ful
afd0: 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f  l misses */.  Lo
afe0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 49 6e  okasideSlot *pIn
aff0: 69 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  it;   /* List of
b000: 20 62 75 66 66 65 72 73 20 6e 6f 74 20 70 72 65   buffers not pre
b010: 76 69 6f 75 73 6c 79 20 75 73 65 64 20 2a 2f 0a  viously used */.
b020: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
b030: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
b040: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
b050: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
b060: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
b070: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
b080: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
b090: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
b0a0: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
b0b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
b0c0: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
b0d0: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
b0e0: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
b0f0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
b100: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
b110: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
b120: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
b130: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
b140: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
b150: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
b160: 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  for built-in fun
b170: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
b180: 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e  s.  (Application
b190: 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63  -defined.** func
b1a0: 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75  tions use a regu
b1b0: 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20  lar table table 
b1c0: 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a  from hash.h.).**
b1d0: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
b1e0: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
b1f0: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
b200: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
b210: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
b220: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
b230: 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20  FuncDef.u.pHash 
b240: 63 68 61 69 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  chain..*/.#defin
b250: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41  e SQLITE_FUNC_HA
b260: 53 48 5f 53 5a 20 32 33 0a 73 74 72 75 63 74 20  SH_SZ 23.struct 
b270: 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20  FuncDefHash {.  
b280: 46 75 6e 63 44 65 66 20 2a 61 5b 53 51 4c 49 54  FuncDef *a[SQLIT
b290: 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b  E_FUNC_HASH_SZ];
b2a0: 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74         /* Hash t
b2b0: 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f  able for functio
b2c0: 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66  ns */.};..#ifdef
b2d0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b2e0: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a  HENTICATION./*.*
b2f0: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65  * Information he
b300: 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c 69 74  ld in the "sqlit
b310: 65 33 22 20 64 61 74 61 62 61 73 65 20 63 6f 6e  e3" database con
b320: 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61  nection object a
b330: 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61  nd used.** to ma
b340: 6e 61 67 65 20 75 73 65 72 20 61 75 74 68 65 6e  nage user authen
b350: 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70  tication..*/.typ
b360: 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c 69  edef struct sqli
b370: 74 65 33 5f 75 73 65 72 61 75 74 68 20 73 71 6c  te3_userauth sql
b380: 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b 0a 73  ite3_userauth;.s
b390: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
b3a0: 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20 61 75  erauth {.  u8 au
b3b0: 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20  thLevel;        
b3c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
b3d0: 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74 69  ent authenticati
b3e0: 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  on level */.  in
b3f0: 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20 20 20  t nAuthPW;      
b400: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
b410: 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75 74 68  ize of the zAuth
b420: 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  PW in bytes */. 
b430: 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57 3b 20   char *zAuthPW; 
b440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b450: 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65 64 20  * Password used 
b460: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
b470: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68  */.  char *zAuth
b480: 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  User;           
b490: 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20     /* User name 
b4a0: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
b4b0: 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  cate */.};../* A
b4c0: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
b4d0: 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  r sqlite3_userau
b4e0: 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a  th.authLevel */.
b4f0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 6e  #define UAUTH_Un
b500: 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20 20 20  known     0     
b510: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f  /* Authenticatio
b520: 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63 6b 65  n not yet checke
b530: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  d */.#define UAU
b540: 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20 20 31  TH_Fail        1
b550: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74       /* User aut
b560: 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c  hentication fail
b570: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  ed */.#define UA
b580: 55 54 48 5f 55 73 65 72 20 20 20 20 20 20 20 20  UTH_User        
b590: 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  2     /* Authent
b5a0: 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f 72 6d  icated as a norm
b5b0: 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65 66 69  al user */.#defi
b5c0: 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e 20 20  ne UAUTH_Admin  
b5d0: 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20 41 75       3     /* Au
b5e0: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
b5f0: 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 20  n administrator 
b600: 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73  */../* Functions
b610: 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 75 73   used only by us
b620: 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  er authorization
b630: 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71   logic */.int sq
b640: 6c 69 74 65 33 55 73 65 72 41 75 74 68 54 61 62  lite3UserAuthTab
b650: 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  le(const char*);
b660: 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72  .int sqlite3User
b670: 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73  AuthCheckLogin(s
b680: 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
b690: 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73  ar*,u8*);.void s
b6a0: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 49 6e  qlite3UserAuthIn
b6b0: 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  it(sqlite3*);.vo
b6c0: 69 64 20 73 71 6c 69 74 65 33 43 72 79 70 74 46  id sqlite3CryptF
b6d0: 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  unc(sqlite3_cont
b6e0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
b6f0: 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64  _value**);..#end
b700: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45  if /* SQLITE_USE
b710: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
b720: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64   */../*.** typed
b730: 65 66 20 66 6f 72 20 74 68 65 20 61 75 74 68 6f  ef for the autho
b740: 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63  rization callbac
b750: 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  k function..*/.#
b760: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
b770: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
b780: 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28  .  typedef int (
b790: 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28  *sqlite3_xauth)(
b7a0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
b7b0: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
b7c0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20  *,const char*,. 
b7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
b7f0: 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
b800: 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20   char*);.#else. 
b810: 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73   typedef int (*s
b820: 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f  qlite3_xauth)(vo
b830: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
b840: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
b850: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
b860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b870: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
b880: 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
b890: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
b8a0: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
b8b0: 0a 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20 65  ./* This is an e
b8c0: 78 74 72 61 20 53 51 4c 49 54 45 5f 54 52 41 43  xtra SQLITE_TRAC
b8d0: 45 20 6d 61 63 72 6f 20 74 68 61 74 20 69 6e 64  E macro that ind
b8e0: 69 63 61 74 65 73 20 22 6c 65 67 61 63 79 22 20  icates "legacy" 
b8f0: 74 72 61 63 69 6e 67 0a 2a 2a 20 69 6e 20 74 68  tracing.** in th
b900: 65 20 73 74 79 6c 65 20 6f 66 20 73 71 6c 69 74  e style of sqlit
b910: 65 33 5f 74 72 61 63 65 28 29 0a 2a 2f 0a 23 64  e3_trace().*/.#d
b920: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41  efine SQLITE_TRA
b930: 43 45 5f 4c 45 47 41 43 59 20 20 30 78 38 30 0a  CE_LEGACY  0x80.
b940: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51  #else.#define SQ
b950: 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43  LITE_TRACE_LEGAC
b960: 59 20 20 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53  Y  0.#endif /* S
b970: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
b980: 43 41 54 45 44 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  CATED */.../*.**
b990: 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20 63   Each database c
b9a0: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20  onnection is an 
b9b0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
b9c0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
b9d0: 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73  ure..*/.struct s
b9e0: 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74  qlite3 {.  sqlit
b9f0: 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20  e3_vfs *pVfs;   
ba00: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49           /* OS I
ba10: 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74  nterface */.  st
ba20: 72 75 63 74 20 56 64 62 65 20 2a 70 56 64 62 65  ruct Vdbe *pVdbe
ba30: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
ba40: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 76 69  ist of active vi
ba50: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a  rtual machines *
ba60: 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66  /.  CollSeq *pDf
ba70: 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20  ltColl;         
ba80: 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74    /* The default
ba90: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
baa0: 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a  nce (BINARY) */.
bab0: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
bac0: 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  *mutex;         
bad0: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  /* Connection mu
bae0: 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62  tex */.  Db *aDb
baf0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bb00: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61         /* All ba
bb10: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20  ckends */.  int 
bb20: 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  nDb;            
bb30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
bb40: 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20  ber of backends 
bb50: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
bb60: 20 2a 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c 61   */.  u32 mDbFla
bb70: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
bb80: 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 72 65 63      /* flags rec
bb90: 6f 72 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c 20  ording internal 
bba0: 73 74 61 74 65 20 2a 2f 0a 20 20 75 33 32 20 66  state */.  u32 f
bbb0: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
bbc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67           /* flag
bbd0: 73 20 73 65 74 74 61 62 6c 65 20 62 79 20 70 72  s settable by pr
bbe0: 61 67 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f 77  agmas. See below
bbf0: 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f   */.  i64 lastRo
bc00: 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  wid;            
bc10: 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20      /* ROWID of 
bc20: 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65  most recent inse
bc30: 72 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a  rt (see above) *
bc40: 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20  /.  i64 szMmap; 
bc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc60: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61    /* Default mma
bc70: 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a  p_size setting *
bc80: 2f 0a 20 20 75 33 32 20 6e 53 63 68 65 6d 61 4c  /.  u32 nSchemaL
bc90: 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ock;            
bca0: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73 65    /* Do not rese
bcb0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65  t the schema whe
bcc0: 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20  n non-zero */.  
bcd0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65  unsigned int ope
bce0: 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a  nFlags;       /*
bcf0: 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
bd00: 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70   sqlite3_vfs.xOp
bd10: 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72  en() */.  int er
bd20: 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  rCode;          
bd30: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
bd40: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64  recent error cod
bd50: 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a  e (SQLITE_*) */.
bd60: 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20    int errMask;  
bd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd80: 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65  /* & result code
bd90: 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f  s with this befo
bda0: 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a  re returning */.
bdb0: 20 20 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b    int iSysErrno;
bdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdd0: 2f 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66  /* Errno value f
bde0: 72 6f 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20  rom last system 
bdf0: 65 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64  error */.  u16 d
be00: 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20  bOptFlags;      
be10: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67           /* Flag
be20: 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61  s to enable/disa
be30: 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ble optimization
be40: 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  s */.  u8 enc;  
be50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be60: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
be70: 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75  oding */.  u8 au
be80: 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20  toCommit;       
be90: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
bea0: 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
beb0: 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73  . */.  u8 temp_s
bec0: 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20  tore;           
bed0: 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20       /* 1: file 
bee0: 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66  2: memory 0: def
bef0: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c  ault */.  u8 mal
bf00: 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20  locFailed;      
bf10: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
bf20: 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20  if we have seen 
bf30: 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  a malloc failure
bf40: 20 2a 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e   */.  u8 bBenign
bf50: 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  Malloc;         
bf60: 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65      /* Do not re
bf70: 71 75 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72  quire OOMs if tr
bf80: 75 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c  ue */.  u8 dfltL
bf90: 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ockMode;        
bfa0: 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
bfb0: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f   locking-mode fo
bfc0: 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a  r attached dbs *
bfd0: 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20  /.  signed char 
bfe0: 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20  nextAutovac;    
bff0: 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74    /* Autovac set
c000: 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55  ting after VACUU
c010: 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38  M if >=0 */.  u8
c020: 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20   suppressErr;   
c030: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
c040: 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f  o not issue erro
c050: 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72  r messages if tr
c060: 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f  ue */.  u8 vtabO
c070: 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20  nConflict;      
c080: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
c090: 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f  o return for s3_
c0a0: 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74  vtab_on_conflict
c0b0: 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61  () */.  u8 isTra
c0c0: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
c0d0: 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  t;    /* True if
c0e0: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73   the outermost s
c0f0: 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53  avepoint is a TS
c100: 20 2a 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b   */.  u8 mTrace;
c110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c120: 20 20 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d      /* zero or m
c130: 6f 72 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ore SQLITE_TRACE
c140: 20 66 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 6e   flags */.  u8 n
c150: 6f 53 68 61 72 65 64 43 61 63 68 65 3b 20 20 20  oSharedCache;   
c160: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
c170: 65 20 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63  e if no shared-c
c180: 61 63 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f  ache backends */
c190: 0a 20 20 75 38 20 6e 53 71 6c 45 78 65 63 3b 20  .  u8 nSqlExec; 
c1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1b0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 65   /* Number of pe
c1c0: 6e 64 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63  nding OP_SqlExec
c1d0: 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e   opcodes */.  in
c1e0: 74 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20  t nextPagesize; 
c1f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
c200: 61 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41  agesize after VA
c210: 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20  CUUM if >0 */.  
c220: 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20  u32 magic;      
c230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c240: 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f   Magic number fo
c250: 72 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79  r detect library
c260: 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74   misuse */.  int
c270: 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20   nChange;       
c280: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
c290: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
c2a0: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
c2b0: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61  ) */.  int nTota
c2c0: 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  lChange;        
c2d0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
c2e0: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
c2f0: 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  3_total_changes(
c300: 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69  ) */.  int aLimi
c310: 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54  t[SQLITE_N_LIMIT
c320: 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a  ];   /* Limits *
c330: 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74  /.  int nMaxSort
c340: 65 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  erMmap;         
c350: 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a    /* Maximum siz
c360: 65 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70  e of regions map
c370: 70 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f  ped by sorter */
c380: 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  .  struct sqlite
c390: 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20  3InitInfo {     
c3a0: 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
c3b0: 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74  used during init
c3c0: 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20  ialization */.  
c3d0: 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20    int newTnum;  
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c3f0: 20 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62   Rootpage of tab
c400: 6c 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  le being initial
c410: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69  ized */.    u8 i
c420: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
c430: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
c440: 20 64 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e   db file is bein
c450: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
c460: 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20  .    u8 busy;   
c470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c480: 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72   /* TRUE if curr
c490: 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69  ently initializi
c4a0: 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ng */.    unsign
c4b0: 65 64 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72  ed orphanTrigger
c4c0: 20 3a 20 31 3b 20 2f 2a 20 4c 61 73 74 20 73 74   : 1; /* Last st
c4d0: 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61  atement is orpha
c4e0: 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72  ned TEMP trigger
c4f0: 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
c500: 20 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 20 3a   imposterTable :
c510: 20 31 3b 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20   1; /* Building 
c520: 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c  an imposter tabl
c530: 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  e */.    unsigne
c540: 64 20 72 65 6f 70 65 6e 4d 65 6d 64 62 20 3a 20  d reopenMemdb : 
c550: 31 3b 20 20 20 2f 2a 20 41 54 54 41 43 48 20 69  1;   /* ATTACH i
c560: 73 20 72 65 61 6c 6c 79 20 61 20 72 65 6f 70 65  s really a reope
c570: 6e 20 75 73 69 6e 67 20 4d 65 6d 44 42 20 2a 2f  n using MemDB */
c580: 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74  .  } init;.  int
c590: 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20   nVdbeActive;   
c5a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c5b0: 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75  mber of VDBEs cu
c5c0: 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20  rrently running 
c5d0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65  */.  int nVdbeRe
c5e0: 61 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ad;             
c5f0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c600: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
c610: 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  t read or write 
c620: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72  */.  int nVdbeWr
c630: 69 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ite;            
c640: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c650: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
c660: 74 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  t read and write
c670: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45   */.  int nVdbeE
c680: 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  xec;            
c690: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c6a0: 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
c6b0: 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20   VdbeExec() */. 
c6c0: 20 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20   int nVDestroy; 
c6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c6e0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
c6f0: 76 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f  ve OP_VDestroy o
c700: 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69  perations */.  i
c710: 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20  nt nExtension;  
c720: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c730: 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64  Number of loaded
c740: 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20   extensions */. 
c750: 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69   void **aExtensi
c760: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  on;            /
c770: 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65  * Array of share
c780: 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65  d library handle
c790: 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 54 72  s */.  int (*xTr
c7a0: 61 63 65 29 28 75 33 32 2c 76 6f 69 64 2a 2c 76  ace)(u32,void*,v
c7b0: 6f 69 64 2a 2c 76 6f 69 64 2a 29 3b 20 20 20 20  oid*,void*);    
c7c0: 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69   /* Trace functi
c7d0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54  on */.  void *pT
c7e0: 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20  raceArg;        
c7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c800: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
c810: 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74   the trace funct
c820: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ion */.  void (*
c830: 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c  xProfile)(void*,
c840: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29  const char*,u64)
c850: 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20  ;  /* Profiling 
c860: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
c870: 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b  id *pProfileArg;
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c890: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
c8a0: 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66  ent to profile f
c8b0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
c8c0: 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20  d *pCommitArg;  
c8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c8e0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  * Argument to xC
c8f0: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20  ommitCallback() 
c900: 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d  */.  int (*xComm
c910: 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  itCallback)(void
c920: 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65  *);    /* Invoke
c930: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
c940: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52  t. */.  void *pR
c950: 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20  ollbackArg;     
c960: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
c970: 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61  ument to xRollba
c980: 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a  ckCallback() */.
c990: 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61    void (*xRollba
c9a0: 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  ckCallback)(void
c9b0: 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61  *); /* Invoked a
c9c0: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
c9d0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64 61  */.  void *pUpda
c9e0: 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a  teArg;.  void (*
c9f0: 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  xUpdateCallback)
ca00: 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73  (void*,int, cons
ca10: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
ca20: 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34  ar*,sqlite_int64
ca30: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
ca40: 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54  _ENABLE_PREUPDAT
ca50: 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a 70  E_HOOK.  void *p
ca60: 50 72 65 55 70 64 61 74 65 41 72 67 3b 20 20 20  PreUpdateArg;   
ca70: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
ca80: 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 50 72 65  argument to xPre
ca90: 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 2a  UpdateCallback *
caa0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 65 55  /.  void (*xPreU
cab0: 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 20  pdateCallback)( 
cac0: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 65 64 20    /* Registered 
cad0: 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72  using sqlite3_pr
cae0: 65 75 70 64 61 74 65 5f 68 6f 6f 6b 28 29 20 2a  eupdate_hook() *
caf0: 2f 0a 20 20 20 20 76 6f 69 64 2a 2c 73 71 6c 69  /.    void*,sqli
cb00: 74 65 33 2a 2c 69 6e 74 2c 63 68 61 72 20 63 6f  te3*,int,char co
cb10: 6e 73 74 2a 2c 63 68 61 72 20 63 6f 6e 73 74 2a  nst*,char const*
cb20: 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 2c 73  ,sqlite3_int64,s
cb30: 71 6c 69 74 65 33 5f 69 6e 74 36 34 0a 20 20 29  qlite3_int64.  )
cb40: 3b 0a 20 20 50 72 65 55 70 64 61 74 65 20 2a 70  ;.  PreUpdate *p
cb50: 50 72 65 55 70 64 61 74 65 3b 20 20 20 20 20 20  PreUpdate;      
cb60: 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72    /* Context for
cb70: 20 61 63 74 69 76 65 20 70 72 65 2d 75 70 64 61   active pre-upda
cb80: 74 65 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23  te callback */.#
cb90: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
cba0: 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
cbb0: 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65 66  _HOOK */.#ifndef
cbc0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
cbd0: 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c  .  int (*xWalCal
cbe0: 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73  lback)(void *, s
cbf0: 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
cc00: 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20  char *, int);.  
cc10: 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23  void *pWalArg;.#
cc20: 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43  endif.  void(*xC
cc30: 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a  ollNeeded)(void*
cc40: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54  ,sqlite3*,int eT
cc50: 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61  extRep,const cha
cc60: 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f  r*);.  void(*xCo
cc70: 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64  llNeeded16)(void
cc80: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
cc90: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f  TextRep,const vo
cca0: 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43  id*);.  void *pC
ccb0: 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20  ollNeededArg;.  
ccc0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
ccd0: 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Err;          /*
cce0: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
ccf0: 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20  or message */.  
cd00: 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61  union {.    vola
cd10: 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72  tile int isInter
cd20: 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20  rupted; /* True 
cd30: 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  if sqlite3_inter
cd40: 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63 61  rupt has been ca
cd50: 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62  lled */.    doub
cd60: 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20  le notUsed1;    
cd70: 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
cd80: 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c  r */.  } u1;.  L
cd90: 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69  ookaside lookasi
cda0: 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  de;          /* 
cdb0: 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  Lookaside malloc
cdc0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a   configuration *
cdd0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
cde0: 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
cdf0: 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78 61  ION.  sqlite3_xa
ce00: 75 74 68 20 78 41 75 74 68 3b 20 20 20 20 20 20  uth xAuth;      
ce10: 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61 75      /* Access au
ce20: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63  thorization func
ce30: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
ce40: 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20 20  pAuthArg;       
ce50: 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61          /* 1st a
ce60: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 61  rgument to the a
ce70: 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63 74  ccess auth funct
ce80: 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ion */.#endif.#i
ce90: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
cea0: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
ceb0: 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f  ACK.  int (*xPro
cec0: 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b 20  gress)(void *); 
ced0: 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72      /* The progr
cee0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
cef0: 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65 73    void *pProgres
cf00: 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
cf10: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
cf20: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
cf30: 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  back */.  unsign
cf40: 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b  ed nProgressOps;
cf50: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
cf60: 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f 72  r of opcodes for
cf70: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
cf80: 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  ck */.#endif.#if
cf90: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
cfa0: 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
cfb0: 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20 20  int nVTrans;    
cfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cfd0: 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20   Allocated size 
cfe0: 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20  of aVTrans */.  
cff0: 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20  Hash aModule;   
d000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d010: 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73 71   populated by sq
d020: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64  lite3_create_mod
d030: 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62 43  ule() */.  VtabC
d040: 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20 20  tx *pVtabCtx;   
d050: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74           /* Cont
d060: 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 76  ext for active v
d070: 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61  tab connect/crea
d080: 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  te */.  VTable *
d090: 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20  *aVTrans;       
d0a0: 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61 6c        /* Virtual
d0b0: 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70 65   tables with ope
d0c0: 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a  n transactions *
d0d0: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69 73  /.  VTable *pDis
d0e0: 63 6f 6e 6e 65 63 74 3b 20 20 20 20 20 20 20 20  connect;        
d0f0: 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20    /* Disconnect 
d100: 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71  these in next sq
d110: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
d120: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48 61 73 68  */.#endif.  Hash
d130: 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20   aFunc;         
d140: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73            /* Has
d150: 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65  h table of conne
d160: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  ction functions 
d170: 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53  */.  Hash aCollS
d180: 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
d190: 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74     /* All collat
d1a0: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f  ing sequences */
d1b0: 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62  .  BusyHandler b
d1c0: 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20  usyHandler;     
d1d0: 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63   /* Busy callbac
d1e0: 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61  k */.  Db aDbSta
d1f0: 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20  tic[2];         
d200: 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73       /* Static s
d210: 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64  pace for the 2 d
d220: 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20  efault backends 
d230: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
d240: 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  pSavepoint;     
d250: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
d260: 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20  tive savepoints 
d270: 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d  */.  int busyTim
d280: 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  eout;           
d290: 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c     /* Busy handl
d2a0: 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d  er timeout, in m
d2b0: 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  sec */.  int nSa
d2c0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
d2d0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
d2e0: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
d2f0: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ion savepoints *
d300: 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65  /.  int nStateme
d310: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
d320: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
d330: 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d  ested statement-
d340: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f  transactions  */
d350: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
d360: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
d370: 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64   /* Net deferred
d380: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69   constraints thi
d390: 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a  s transaction. *
d3a0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
d3b0: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
d3c0: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
d3d0: 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73  d immediate cons
d3e0: 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
d3f0: 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20   *pnBytesFreed; 
d400: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
d410: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65   not NULL, incre
d420: 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46  ment this in DbF
d430: 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66 20  ree() */.#ifdef 
d440: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
d450: 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a  LOCK_NOTIFY.  /*
d460: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   The following v
d470: 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c  ariables are all
d480: 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74 68   protected by th
d490: 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52 0a  e STATIC_MASTER.
d4a0: 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20    ** mutex, not 
d4b0: 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  by sqlite3.mutex
d4c0: 2e 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20  . They are used 
d4d0: 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66  by code in notif
d4e0: 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  y.c..  **.  ** W
d4f0: 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e  hen X.pUnlockCon
d500: 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74  nection==Y, that
d510: 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69 73   means that X is
d520: 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20 74   waiting for Y t
d530: 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f  o.  ** unlock so
d540: 20 74 68 61 74 20 69 74 20 63 61 6e 20 70 72 6f   that it can pro
d550: 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ceed..  **.  ** 
d560: 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67  When X.pBlocking
d570: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
d580: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 73  hat means that s
d590: 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58 20  omething that X 
d5a0: 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65 64  tried.  ** tried
d5b0: 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79 20   to do recently 
d5c0: 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20 53  failed with an S
d5d0: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72  QLITE_LOCKED err
d5e0: 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a  or due to locks.
d5f0: 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a    ** held by Y..
d600: 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a    */.  sqlite3 *
d610: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
d620: 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69  ion; /* Connecti
d630: 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64 20 53  on that caused S
d640: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a  QLITE_LOCKED */.
d650: 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f    sqlite3 *pUnlo
d660: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20  ckConnection;   
d670: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
d680: 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20 66  ction to watch f
d690: 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76  or unlock */.  v
d6a0: 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b  oid *pUnlockArg;
d6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6c0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
d6d0: 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66   to xUnlockNotif
d6e0: 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55  y */.  void (*xU
d6f0: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69  nlockNotify)(voi
d700: 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20  d **, int);  /* 
d710: 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61  Unlock notify ca
d720: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69  llback */.  sqli
d730: 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65  te3 *pNextBlocke
d740: 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  d;        /* Nex
d750: 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c  t in list of all
d760: 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74   blocked connect
d770: 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  ions */.#endif.#
d780: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
d790: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
d7a0: 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  .  sqlite3_usera
d7b0: 75 74 68 20 61 75 74 68 3b 20 20 20 20 20 20 20  uth auth;       
d7c0: 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74   /* User authent
d7d0: 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  ication informat
d7e0: 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  ion */.#endif.};
d7f0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
d800: 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65 20  to discover the 
d810: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64 61  encoding of a da
d820: 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69  tabase..*/.#defi
d830: 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28 64 62  ne SCHEMA_ENC(db
d840: 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e  ) ((db)->aDb[0].
d850: 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 23 64  pSchema->enc).#d
d860: 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20 20 20  efine ENC(db)   
d870: 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e 63 29       ((db)->enc)
d880: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
d890: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
d8a0: 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a  sqlite3.flags..*
d8b0: 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
d8c0: 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64  raints (enforced
d8d0: 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
d8e0: 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 46  **      SQLITE_F
d8f0: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 3d 3d 20  ullFSync     == 
d900: 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43 0a  PAGER_FULLFSYNC.
d910: 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43  **      SQLITE_C
d920: 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 3d 3d 20  kptFullFSync == 
d930: 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46  PAGER_CKPT_FULLF
d940: 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c  SYNC.**      SQL
d950: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20  ITE_CacheSpill  
d960: 20 20 3d 3d 20 50 41 47 45 52 5f 43 41 43 48 45    == PAGER_CACHE
d970: 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65 66 69 6e  _SPILL.*/.#defin
d980: 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63  e SQLITE_WriteSc
d990: 68 65 6d 61 20 20 20 20 30 78 30 30 30 30 30 30  hema    0x000000
d9a0: 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64  01  /* OK to upd
d9b0: 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45  ate SQLITE_MASTE
d9c0: 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  R */.#define SQL
d9d0: 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d  ITE_LegacyFileFm
d9e0: 74 20 20 30 78 30 30 30 30 30 30 30 32 20 20 2f  t  0x00000002  /
d9f0: 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61 74  * Create new dat
da00: 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74  abases in format
da10: 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51   1 */.#define SQ
da20: 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65  LITE_FullColName
da30: 73 20 20 20 30 78 30 30 30 30 30 30 30 34 20 20  s   0x00000004  
da40: 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c  /* Show full col
da50: 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c  umn names on SEL
da60: 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ECT */.#define S
da70: 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20  QLITE_FullFSync 
da80: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 38 20       0x00000008 
da90: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
daa0: 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e  nc on the backen
dab0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
dac0: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
dad0: 63 20 20 30 78 30 30 30 30 30 30 31 30 20 20 2f  c  0x00000010  /
dae0: 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63  * Use full fsync
daf0: 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20   for checkpoint 
db00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
db10: 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20  E_CacheSpill    
db20: 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20   0x00000020  /* 
db30: 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65  OK to spill page
db40: 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  r cache */.#defi
db50: 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43  ne SQLITE_ShortC
db60: 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30  olNames  0x00000
db70: 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f  040  /* Show sho
db80: 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73  rt columns names
db90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dba0: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20  TE_CountRows    
dbb0: 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a    0x00000080  /*
dbc0: 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e   Count rows chan
dbd0: 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a  ged by INSERT, *
dbe0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
dbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
dc10: 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
dc20: 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f  TE and return */
dc30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
dc60: 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20  the count using 
dc70: 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23  a callback. */.#
dc80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75  define SQLITE_Nu
dc90: 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30  llCallback   0x0
dca0: 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f  0000100  /* Invo
dcb0: 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  ke the callback 
dcc0: 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20  once if the */. 
dcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcf0: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65           /*   re
dd00: 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74  sult set is empt
dd10: 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  y */.#define SQL
dd20: 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73  ITE_IgnoreChecks
dd30: 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20 2f     0x00000200  /
dd40: 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65  * Do not enforce
dd50: 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
dd60: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
dd70: 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69  LITE_ReadUncommi
dd80: 74 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20  t   0x00000400  
dd90: 2f 2a 20 52 45 41 44 20 55 4e 43 4f 4d 4d 49 54  /* READ UNCOMMIT
dda0: 54 45 44 20 69 6e 20 73 68 61 72 65 64 2d 63 61  TED in shared-ca
ddb0: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
ddc0: 51 4c 49 54 45 5f 4e 6f 43 6b 70 74 4f 6e 43 6c  QLITE_NoCkptOnCl
ddd0: 6f 73 65 20 20 30 78 30 30 30 30 30 38 30 30 20  ose  0x00000800 
dde0: 20 2f 2a 20 4e 6f 20 63 68 65 63 6b 70 6f 69 6e   /* No checkpoin
ddf0: 74 20 6f 6e 20 63 6c 6f 73 65 28 29 2f 44 45 54  t on close()/DET
de00: 41 43 48 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ACH */.#define S
de10: 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64  QLITE_ReverseOrd
de20: 65 72 20 20 20 30 78 30 30 30 30 31 30 30 30 20  er   0x00001000 
de30: 20 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72   /* Reverse unor
de40: 64 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f  dered SELECTs */
de50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
de60: 52 65 63 54 72 69 67 67 65 72 73 20 20 20 20 30  RecTriggers    0
de70: 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 45 6e  x00002000  /* En
de80: 61 62 6c 65 20 72 65 63 75 72 73 69 76 65 20 74  able recursive t
de90: 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69  riggers */.#defi
dea0: 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67  ne SQLITE_Foreig
deb0: 6e 4b 65 79 73 20 20 20 20 30 78 30 30 30 30 34  nKeys    0x00004
dec0: 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20  000  /* Enforce 
ded0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
dee0: 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66  traints  */.#def
def0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49  ine SQLITE_AutoI
df00: 6e 64 65 78 20 20 20 20 20 20 30 78 30 30 30 30  ndex      0x0000
df10: 38 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  8000  /* Enable 
df20: 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65  automatic indexe
df30: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
df40: 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f  ITE_LoadExtensio
df50: 6e 20 20 30 78 30 30 30 31 30 30 30 30 20 20 2f  n  0x00010000  /
df60: 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78  * Enable load_ex
df70: 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  tension */.#defi
df80: 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78  ne SQLITE_LoadEx
df90: 74 46 75 6e 63 20 20 20 20 30 78 30 30 30 32 30  tFunc    0x00020
dfa0: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c  000  /* Enable l
dfb0: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20  oad_extension() 
dfc0: 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  SQL func */.#def
dfd0: 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c  ine SQLITE_Enabl
dfe0: 65 54 72 69 67 67 65 72 20 20 30 78 30 30 30 34  eTrigger  0x0004
dff0: 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f  0000  /* True to
e000: 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73   enable triggers
e010: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e020: 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20 20  TE_DeferFKs     
e030: 20 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a    0x00080000  /*
e040: 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f   Defer all FK co
e050: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
e060: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
e070: 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 30 31  yOnly      0x001
e080: 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62 6c  00000  /* Disabl
e090: 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67  e database chang
e0a0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
e0b0: 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20  LITE_CellSizeCk 
e0c0: 20 20 20 20 30 78 30 30 32 30 30 30 30 30 20 20      0x00200000  
e0d0: 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20 63  /* Check btree c
e0e0: 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61  ell sizes on loa
e0f0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
e100: 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69 7a 65  ITE_Fts3Tokenize
e110: 72 20 20 30 78 30 30 34 30 30 30 30 30 20 20 2f  r  0x00400000  /
e120: 2a 20 45 6e 61 62 6c 65 20 66 74 73 33 5f 74 6f  * Enable fts3_to
e130: 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a 23 64  kenizer(2) */.#d
e140: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61  efine SQLITE_Ena
e150: 62 6c 65 51 50 53 47 20 20 20 20 20 30 78 30 30  bleQPSG     0x00
e160: 38 30 30 30 30 30 20 20 2f 2a 20 51 75 65 72 79  800000  /* Query
e170: 20 50 6c 61 6e 6e 65 72 20 53 74 61 62 69 6c 69   Planner Stabili
e180: 74 79 20 47 75 61 72 61 6e 74 65 65 2a 2f 0a 23  ty Guarantee*/.#
e190: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72  define SQLITE_Tr
e1a0: 69 67 67 65 72 45 51 50 20 20 20 20 20 30 78 30  iggerEQP     0x0
e1b0: 31 30 30 30 30 30 30 20 20 2f 2a 20 53 68 6f 77  1000000  /* Show
e1c0: 20 74 72 69 67 67 65 72 20 45 58 50 4c 41 49 4e   trigger EXPLAIN
e1d0: 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23   QUERY PLAN */.#
e1e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
e1f0: 73 65 74 44 61 74 61 62 61 73 65 20 20 30 78 30  setDatabase  0x0
e200: 32 30 30 30 30 30 30 20 20 2f 2a 20 52 65 73 65  2000000  /* Rese
e210: 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 2a  t the database *
e220: 2f 0a 0a 2f 2a 20 46 6c 61 67 73 20 75 73 65 64  /../* Flags used
e230: 20 6f 6e 6c 79 20 69 66 20 64 65 62 75 67 67 69   only if debuggi
e240: 6e 67 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ng */.#ifdef SQL
e250: 49 54 45 5f 44 45 42 55 47 0a 23 64 65 66 69 6e  ITE_DEBUG.#defin
e260: 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  e SQLITE_SqlTrac
e270: 65 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30  e       0x080000
e280: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69  00  /* Debug pri
e290: 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65  nt SQL as it exe
e2a0: 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cutes */.#define
e2b0: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
e2c0: 69 6e 67 20 20 20 20 30 78 31 30 30 30 30 30 30  ing    0x1000000
e2d0: 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74  0  /* Debug list
e2e0: 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f  ings of VDBE pro
e2f0: 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  grams */.#define
e300: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
e310: 65 20 20 20 20 20 20 30 78 32 30 30 30 30 30 30  e      0x2000000
e320: 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72  0  /* True to tr
e330: 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74 69  ace VDBE executi
e340: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
e350: 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72  LITE_VdbeAddopTr
e360: 61 63 65 20 30 78 34 30 30 30 30 30 30 30 20 20  ace 0x40000000  
e370: 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65 33  /* Trace sqlite3
e380: 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c  VdbeAddOp() call
e390: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e3a0: 49 54 45 5f 56 64 62 65 45 51 50 20 20 20 20 20  ITE_VdbeEQP     
e3b0: 20 20 20 30 78 38 30 30 30 30 30 30 30 20 20 2f     0x80000000  /
e3c0: 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20  * Debug EXPLAIN 
e3d0: 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 65  QUERY PLAN */.#e
e3e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
e3f0: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73  wed values for s
e400: 71 6c 69 74 65 33 2e 6d 44 62 46 6c 61 67 73 0a  qlite3.mDbFlags.
e410: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41  */.#define DBFLA
e420: 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 20 20  G_SchemaChange  
e430: 20 30 78 30 30 30 31 20 20 2f 2a 20 55 6e 63 6f   0x0001  /* Unco
e440: 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62  mmitted Hash tab
e450: 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  le changes */.#d
e460: 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 50 72 65  efine DBFLAG_Pre
e470: 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30  ferBuiltin  0x00
e480: 30 32 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63  02  /* Preferenc
e490: 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75  e to built-in fu
e4a0: 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ncs */.#define D
e4b0: 42 46 4c 41 47 5f 56 61 63 75 75 6d 20 20 20 20  BFLAG_Vacuum    
e4c0: 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
e4d0: 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56  Currently in a V
e4e0: 41 43 55 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65  ACUUM */.#define
e4f0: 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 4b 6e   DBFLAG_SchemaKn
e500: 6f 77 6e 4f 6b 20 20 30 78 30 30 30 38 20 20 2f  ownOk  0x0008  /
e510: 2a 20 53 63 68 65 6d 61 20 69 73 20 6b 6e 6f 77  * Schema is know
e520: 6e 20 74 6f 20 62 65 20 76 61 6c 69 64 20 2a 2f  n to be valid */
e530: 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20  ../*.** Bits of 
e540: 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70  the sqlite3.dbOp
e550: 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61  tFlags field tha
e560: 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  t are used by th
e570: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  e.** sqlite3_tes
e580: 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
e590: 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49  _TESTCTRL_OPTIMI
e5a0: 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74  ZATIONS,...) int
e5b0: 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c  erface to.** sel
e5c0: 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65  ectively disable
e5d0: 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
e5e0: 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ations..*/.#defi
e5f0: 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46  ne SQLITE_QueryF
e600: 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20  lattener 0x0001 
e610: 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74    /* Query flatt
e620: 65 6e 69 6e 67 20 2a 2f 0a 20 20 20 20 20 20 20  ening */.       
e630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e640: 20 20 20 2f 2a 20 20 30 78 30 30 30 32 20 20 20     /*  0x0002   
e650: 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 72 65  available for re
e660: 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
e670: 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64  QLITE_GroupByOrd
e680: 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a  er   0x0004   /*
e690: 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f   GROUPBY cover o
e6a0: 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65  f ORDERBY */.#de
e6b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74  fine SQLITE_Fact
e6c0: 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30  orOutConst 0x000
e6d0: 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  8   /* Constant 
e6e0: 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65  factoring */.#de
e6f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74  fine SQLITE_Dist
e700: 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 31  inctOpt    0x001
e710: 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20  0   /* DISTINCT 
e720: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
e730: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e740: 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30  CoverIdxScan   0
e750: 78 30 30 32 30 20 20 20 2f 2a 20 43 6f 76 65 72  x0020   /* Cover
e760: 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20  ing index scans 
e770: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e780: 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e  E_OrderByIdxJoin
e790: 20 30 78 30 30 34 30 20 20 20 2f 2a 20 4f 52 44   0x0040   /* ORD
e7a0: 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76  ER BY of joins v
e7b0: 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ia index */.#def
e7c0: 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73  ine SQLITE_Trans
e7d0: 69 74 69 76 65 20 20 20 20 20 30 78 30 30 38 30  itive     0x0080
e7e0: 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65     /* Transitive
e7f0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
e800: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f  #define SQLITE_O
e810: 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78  mitNoopJoin   0x
e820: 30 31 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75  0100   /* Omit u
e830: 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20  nused tables in 
e840: 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  joins */.#define
e850: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 4f 66 56   SQLITE_CountOfV
e860: 69 65 77 20 20 20 20 30 78 30 32 30 30 20 20 20  iew    0x0200   
e870: 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d 6f 66 2d  /* The count-of-
e880: 76 69 65 77 20 6f 70 74 69 6d 69 7a 61 74 69 6f  view optimizatio
e890: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
e8a0: 49 54 45 5f 43 75 72 73 6f 72 48 69 6e 74 73 20  ITE_CursorHints 
e8b0: 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20 41     0x0400   /* A
e8c0: 64 64 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74  dd OP_CursorHint
e8d0: 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66   opcodes */.#def
e8e0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33  ine SQLITE_Stat3
e8f0: 34 20 20 20 20 20 20 20 20 20 30 78 30 38 30 30  4         0x0800
e900: 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54 33 20     /* Use STAT3 
e910: 6f 72 20 53 54 41 54 34 20 64 61 74 61 20 2a 2f  or STAT4 data */
e920: 0a 20 20 20 2f 2a 20 54 48 33 20 65 78 70 65 63  .   /* TH3 expec
e930: 74 73 20 74 68 65 20 53 74 61 74 33 34 20 20 5e  ts the Stat34  ^
e940: 5e 5e 5e 5e 5e 20 76 61 6c 75 65 20 74 6f 20 62  ^^^^^ value to b
e950: 65 20 30 78 30 38 30 30 2e 20 20 44 6f 6e 27 74  e 0x0800.  Don't
e960: 20 63 68 61 6e 67 65 20 69 74 20 2a 2f 0a 23 64   change it */.#d
e970: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 75 73  efine SQLITE_Pus
e980: 68 44 6f 77 6e 20 20 20 20 20 20 20 30 78 31 30  hDown       0x10
e990: 30 30 20 20 20 2f 2a 20 54 68 65 20 70 75 73 68  00   /* The push
e9a0: 2d 64 6f 77 6e 20 6f 70 74 69 6d 69 7a 61 74 69  -down optimizati
e9b0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
e9c0: 4c 49 54 45 5f 53 69 6d 70 6c 69 66 79 4a 6f 69  LITE_SimplifyJoi
e9d0: 6e 20 20 20 30 78 32 30 30 30 20 20 20 2f 2a 20  n   0x2000   /* 
e9e0: 43 6f 6e 76 65 72 74 20 4c 45 46 54 20 4a 4f 49  Convert LEFT JOI
e9f0: 4e 20 74 6f 20 4a 4f 49 4e 20 2a 2f 0a 23 64 65  N to JOIN */.#de
ea00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 6b 69 70  fine SQLITE_Skip
ea10: 53 63 61 6e 20 20 20 20 20 20 20 30 78 34 30 30  Scan       0x400
ea20: 30 20 20 20 2f 2a 20 53 6b 69 70 2d 73 63 61 6e  0   /* Skip-scan
ea30: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
ea40: 49 54 45 5f 50 72 6f 70 61 67 61 74 65 43 6f 6e  ITE_PropagateCon
ea50: 73 74 20 30 78 38 30 30 30 20 20 20 2f 2a 20 54  st 0x8000   /* T
ea60: 68 65 20 63 6f 6e 73 74 61 6e 74 20 70 72 6f 70  he constant prop
ea70: 61 67 61 74 69 6f 6e 20 6f 70 74 20 2a 2f 0a 23  agation opt */.#
ea80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c  define SQLITE_Al
ea90: 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78 66  lOpts        0xf
eaa0: 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74  fff   /* All opt
eab0: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f  imizations */../
eac0: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20  *.** Macros for 
ead0: 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72 20  testing whether 
eae0: 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74  or not optimizat
eaf0: 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64  ions are enabled
eb00: 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f   or disabled..*/
eb10: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
eb20: 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62  ationDisabled(db
eb30: 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d  , mask)  (((db)-
eb40: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
eb50: 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  k))!=0).#define 
eb60: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
eb70: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
eb80: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
eb90: 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a  gs&(mask))==0)..
eba0: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
ebb0: 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61  e if it OK to fa
ebc0: 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78  ctor constant ex
ebd0: 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74  pressions into t
ebe0: 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
ebf0: 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61  n.** code. The a
ec00: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72  rgument is a Par
ec10: 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68  se object for th
ec20: 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
ec30: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e  ..*/.#define Con
ec40: 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28  stFactorOk(P) ((
ec50: 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f  P)->okConstFacto
ec60: 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  r)../*.** Possib
ec70: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
ec80: 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66  e sqlite.magic f
ec90: 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d  ield..** The num
eca0: 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65  bers are obtaine
ecb0: 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
ecc0: 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20  have no special 
ecd0: 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a  meaning, other.*
ece0: 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73  * than being dis
ecf0: 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61  tinct from one a
ed00: 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  nother..*/.#defi
ed10: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
ed20: 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61  OPEN     0xa029a
ed30: 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65  697  /* Database
ed40: 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66   is open */.#def
ed50: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
ed60: 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63  _CLOSED   0x9f3c
ed70: 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73  2d33  /* Databas
ed80: 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23  e is closed */.#
ed90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
eda0: 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34  GIC_SICK     0x4
edb0: 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f  b771290  /* Erro
edc0: 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63  r and awaiting c
edd0: 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lose */.#define 
ede0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
edf0: 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36  Y     0xf03b7906
ee00: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75    /* Database cu
ee10: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
ee20: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ee30: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20  _MAGIC_ERROR    
ee40: 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41  0xb5357930  /* A
ee50: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
ee60: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a  error occurred *
ee70: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ee80: 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20  _MAGIC_ZOMBIE   
ee90: 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43  0x64cffc7f  /* C
eea0: 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73  lose with last s
eeb0: 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a  tatement close *
eec0: 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  /../*.** Each SQ
eed0: 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  L function is de
eee0: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
eef0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
ef00: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
ef10: 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62 61 6c 20  re.  For global 
ef20: 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f  built-in functio
ef30: 6e 73 20 28 65 78 3a 20 73 75 62 73 74 72 28 29  ns (ex: substr()
ef40: 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e 74 28 29  , max(), count()
ef50: 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74  ).** a pointer t
ef60: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
ef70: 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20   is held in the 
ef80: 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75  sqlite3BuiltinFu
ef90: 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a  nctions object..
efa0: 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f 6e 6e 65  ** For per-conne
efb0: 63 74 69 6f 6e 20 61 70 70 6c 69 63 61 74 69 6f  ction applicatio
efc0: 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  n-defined functi
efd0: 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65 72 20 74  ons, a pointer t
efe0: 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  o this.** struct
eff0: 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74  ure is held in t
f000: 68 65 20 64 62 2d 3e 61 48 61 73 68 20 68 61 73  he db->aHash has
f010: 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  h table..**.** T
f020: 68 65 20 75 2e 70 48 61 73 68 20 66 69 65 6c 64  he u.pHash field
f030: 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
f040: 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 73  global built-ins
f050: 2e 20 20 54 68 65 20 75 2e 70 44 65 73 74 72 75  .  The u.pDestru
f060: 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64 20 69 73  ctor.** field is
f070: 20 75 73 65 64 20 62 79 20 70 65 72 2d 63 6f 6e   used by per-con
f080: 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64 65 66 20  nection app-def 
f090: 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74  functions..*/.st
f0a0: 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20  ruct FuncDef {. 
f0b0: 20 69 38 20 6e 41 72 67 3b 20 20 20 20 20 20 20   i8 nArg;       
f0c0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
f0d0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d  of arguments.  -
f0e0: 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65  1 means unlimite
f0f0: 64 20 2a 2f 0a 20 20 75 33 32 20 66 75 6e 63 46  d */.  u32 funcF
f100: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53  lags;       /* S
f110: 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ome combination 
f120: 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a  of SQLITE_FUNC_*
f130: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
f140: 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73  rData;     /* Us
f150: 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65  er data paramete
f160: 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  r */.  FuncDef *
f170: 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
f180: 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ext function wit
f190: 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20  h same name */. 
f1a0: 20 76 6f 69 64 20 28 2a 78 53 46 75 6e 63 29 28   void (*xSFunc)(
f1b0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
f1c0: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
f1d0: 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e 63 20 6f  ue**); /* func o
f1e0: 72 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20  r agg-step */.  
f1f0: 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65  void (*xFinalize
f200: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
f210: 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  t*);            
f220: 20 20 20 20 20 20 2f 2a 20 41 67 67 20 66 69 6e        /* Agg fin
f230: 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 76 6f 69 64  alizer */.  void
f240: 20 28 2a 78 56 61 6c 75 65 29 28 73 71 6c 69 74   (*xValue)(sqlit
f250: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
f260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f270: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 67 67    /* Current agg
f280: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 76 6f 69 64   value */.  void
f290: 20 28 2a 78 49 6e 76 65 72 73 65 29 28 73 71 6c   (*xInverse)(sql
f2a0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
f2b0: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
f2c0: 2a 29 3b 20 2f 2a 20 69 6e 76 65 72 73 65 20 61  *); /* inverse a
f2d0: 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20 63 6f 6e  gg-step */.  con
f2e0: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  st char *zName; 
f2f0: 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66    /* SQL name of
f300: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a   the function. *
f310: 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
f320: 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20  FuncDef *pHash; 
f330: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74       /* Next wit
f340: 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61  h a different na
f350: 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20  me but the same 
f360: 68 61 73 68 20 2a 2f 0a 20 20 20 20 46 75 6e 63  hash */.    Func
f370: 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
f380: 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65  tructor;   /* Re
f390: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20  ference counted 
f3a0: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
f3b0: 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b  ion */.  } u;.};
f3c0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ../*.** This str
f3d0: 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61  ucture encapsula
f3e0: 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74  tes a user-funct
f3f0: 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63  ion destructor c
f400: 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63  allback (as.** c
f410: 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20  onfigured using 
f420: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
f430: 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65  v2()) and a refe
f440: 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57  rence counter. W
f450: 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75  hen.** create_fu
f460: 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63  nction_v2() is c
f470: 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20  alled to create 
f480: 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  a function with 
f490: 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a  a destructor,.**
f4a0: 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74   a single object
f4b0: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
f4c0: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63   allocated. Func
f4d0: 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20  Destructor.nRef 
f4e0: 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65  is set to.** the
f4f0: 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44   number of FuncD
f500: 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74  ef objects creat
f510: 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72 20  ed (either 1 or 
f520: 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  3, depending on 
f530: 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f  whether.** or no
f540: 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  t the specified 
f550: 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49  encoding is SQLI
f560: 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e  TE_ANY). The Fun
f570: 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72  cDef.pDestructor
f580: 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61  .** member of ea
f590: 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75  ch of the new Fu
f5a0: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
f5b0: 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f   set to point to
f5c0: 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a   the allocated.*
f5d0: 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  * FuncDestructor
f5e0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74  ..**.** Thereaft
f5f0: 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20  er, when one of 
f600: 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  the FuncDef obje
f610: 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20  cts is deleted, 
f620: 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a  the reference.**
f630: 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f   count on this o
f640: 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d 65  bject is decreme
f650: 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65  nted. When it re
f660: 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65 73  aches 0, the des
f670: 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e  tructor.** is in
f680: 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75  voked and the Fu
f690: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74 72  ncDestructor str
f6a0: 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f  ucture freed..*/
f6b0: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74  .struct FuncDest
f6c0: 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e  ructor {.  int n
f6d0: 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  Ref;.  void (*xD
f6e0: 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
f6f0: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
f700: 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f  ta;.};../*.** Po
f710: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
f720: 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e  r FuncDef.flags.
f730: 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20    Note that the 
f740: 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50  _LENGTH and _TYP
f750: 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75  EOF.** values mu
f760: 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  st correspond to
f770: 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
f780: 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50  G and OPFLAG_TYP
f790: 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a 2a 20  EOFARG.  And.** 
f7a0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
f7b0: 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74 68 65  TANT must be the
f7c0: 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54 45 5f   same as SQLITE_
f7d0: 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e 20 20  DETERMINISTIC.  
f7e0: 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73  There.** are ass
f7f0: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
f800: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20   in the code to 
f810: 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2a 0a  verify this..**.
f820: 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
f830: 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
f840: 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
f850: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
f860: 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d 20 20 4e  _MINMAX    ==  N
f870: 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  C_MinMaxAgg     
f880: 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67   == SF_MinMaxAgg
f890: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
f8a0: 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 20 3d 3d  UNC_LENGTH    ==
f8b0: 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41    OPFLAG_LENGTHA
f8c0: 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  RG.**     SQLITE
f8d0: 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 20  _FUNC_TYPEOF    
f8e0: 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ==  OPFLAG_TYPEO
f8f0: 46 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49  FARG.**     SQLI
f900: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
f910: 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44 45 54    ==  SQLITE_DET
f920: 45 52 4d 49 4e 49 53 54 49 43 20 66 72 6f 6d 20  ERMINISTIC from 
f930: 74 68 65 20 41 50 49 0a 2a 2a 20 20 20 20 20 53  the API.**     S
f940: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41  QLITE_FUNC_ENCMA
f950: 53 4b 20 20 20 64 65 70 65 6e 64 73 20 6f 6e 20  SK   depends on 
f960: 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d 61 63 72  SQLITE_UTF* macr
f970: 6f 73 20 69 6e 20 74 68 65 20 41 50 49 0a 2a 2f  os in the API.*/
f980: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f990: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78  FUNC_ENCMASK  0x
f9a0: 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55  0003 /* SQLITE_U
f9b0: 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  TF8, SQLITE_UTF1
f9c0: 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a  6BE or UTF16LE *
f9d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f9e0: 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30  _FUNC_LIKE     0
f9f0: 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61  x0004 /* Candida
fa00: 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20  te for the LIKE 
fa10: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a  optimization */.
fa20: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
fa30: 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30  UNC_CASE     0x0
fa40: 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73  008 /* Case-sens
fa50: 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20  itive LIKE-type 
fa60: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
fa70: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
fa80: 45 50 48 45 4d 20 20 20 20 30 78 30 30 31 30 20  EPHEM    0x0010 
fa90: 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44  /* Ephemeral.  D
faa0: 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20  elete with VDBE 
fab0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fac0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
fad0: 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69 74 65  0x0020 /* sqlite
fae0: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
faf0: 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65  ) might be calle
fb00: 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  d*/.#define SQLI
fb10: 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20  TE_FUNC_LENGTH  
fb20: 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69 6c 74   0x0040 /* Built
fb30: 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e  -in length() fun
fb40: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
fb50: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50   SQLITE_FUNC_TYP
fb60: 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f 2a 20  EOF   0x0080 /* 
fb70: 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28  Built-in typeof(
fb80: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
fb90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fba0: 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30 31 30  C_COUNT    0x010
fbb0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
fbc0: 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74 65  unt(*) aggregate
fbd0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fbe0: 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45  TE_FUNC_COALESCE
fbf0: 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69 6c 74   0x0200 /* Built
fc00: 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f  -in coalesce() o
fc10: 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64  r ifnull() */.#d
fc20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fc30: 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34 30  C_UNLIKELY 0x040
fc40: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e  0 /* Built-in un
fc50: 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f  likely() functio
fc60: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fc70: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
fc80: 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e 73  T 0x0800 /* Cons
fc90: 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65  tant inputs give
fca0: 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70   a constant outp
fcb0: 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ut */.#define SQ
fcc0: 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
fcd0: 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75     0x1000 /* Tru
fce0: 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20  e for min() and 
fcf0: 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 73  max() aggregates
fd00: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fd10: 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20  TE_FUNC_SLOCHNG 
fd20: 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f 77   0x2000 /* "Slow
fd30: 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75 65 20   Change". Value 
fd40: 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e 67 20  constant during 
fd50: 61 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a.              
fd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd70: 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20        ** single 
fd80: 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20 63 68  query - might ch
fd90: 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65 20 2a  ange over time *
fda0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fdb0: 5f 46 55 4e 43 5f 41 46 46 49 4e 49 54 59 20 30  _FUNC_AFFINITY 0
fdc0: 78 34 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x4000 /* Built-i
fdd0: 6e 20 61 66 66 69 6e 69 74 79 28 29 20 66 75 6e  n affinity() fun
fde0: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
fdf0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4f 46 46   SQLITE_FUNC_OFF
fe00: 53 45 54 20 20 20 30 78 38 30 30 30 20 2f 2a 20  SET   0x8000 /* 
fe10: 42 75 69 6c 74 2d 69 6e 20 73 71 6c 69 74 65 5f  Built-in sqlite_
fe20: 6f 66 66 73 65 74 28 29 20 66 75 6e 63 74 69 6f  offset() functio
fe30: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fe40: 49 54 45 5f 46 55 4e 43 5f 57 49 4e 44 4f 57 20  ITE_FUNC_WINDOW 
fe50: 20 30 78 31 30 30 30 30 20 2f 2a 20 42 75 69 6c   0x10000 /* Buil
fe60: 74 2d 69 6e 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79  t-in window-only
fe70: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
fe80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
fe90: 5f 57 49 4e 44 4f 57 5f 53 49 5a 45 20 20 30 78  _WINDOW_SIZE  0x
fea0: 32 30 30 30 30 20 20 2f 2a 20 52 65 71 75 69 72  20000  /* Requir
feb0: 65 73 20 70 61 72 74 69 74 69 6f 6e 20 73 69 7a  es partition siz
fec0: 65 20 61 73 20 61 72 67 2e 20 2a 2f 0a 0a 2f 2a  e as arg. */../*
fed0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
fee0: 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
fef0: 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
ff00: 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
ff10: 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
ff20: 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
ff30: 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
ff40: 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
ff50: 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
ff60: 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
ff70: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
ff80: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
ff90: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
ffa0: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
ffb0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
ffc0: 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
ffd0: 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e  .**     implemen
ffe0: 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f  ted by C functio
fff0: 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63  n xFunc that acc
10000 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65  epts nArg argume
10010 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  nts. The.**     
10020 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
10030 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  iArg is cast to 
10040 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61  a (void*) and ma
10050 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  de available.** 
10060 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d      as the user-
10070 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
10080 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74  er_data()) for t
10090 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a  he function. If.
100a0 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20  **     argument 
100b0 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65  bNC is true, the
100c0 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  n the SQLITE_FUN
100d0 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20  C_NEEDCOLL flag 
100e0 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  is set..**.**   
100f0 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
10100 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
10110 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
10120 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78  Like FUNCTION ex
10130 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68  cept it omits th
10140 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
10150 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a  NSTANT flag..**.
10160 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a  **   DFUNCTION(z
10170 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
10180 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
10190 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49       Like FUNCTI
101a0 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69  ON except it omi
101b0 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ts the SQLITE_FU
101c0 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
101d0 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73   and.**     adds
101e0 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
101f0 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20  _SLOCHNG flag.  
10200 55 73 65 64 20 66 6f 72 20 64 61 74 65 20 26 20  Used for date & 
10210 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a  time functions.*
10220 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69  *     and functi
10230 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f  ons like sqlite_
10240 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63  version() that c
10250 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e  an change, but n
10260 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20  ot during.**    
10270 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e   a single query.
10280 20 20 54 68 65 20 69 41 72 67 20 69 73 20 69 67    The iArg is ig
10290 6e 6f 72 65 64 2e 20 20 54 68 65 20 75 73 65 72  nored.  The user
102a0 2d 64 61 74 61 20 69 73 20 61 6c 77 61 79 73 20  -data is always 
102b0 73 65 74 0a 2a 2a 20 20 20 20 20 74 6f 20 61 20  set.**     to a 
102c0 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54  NULL pointer.  T
102d0 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72  he bNC parameter
102e0 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
102f0 0a 2a 2a 20 20 20 50 55 52 45 5f 44 41 54 45 28  .**   PURE_DATE(
10300 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10310 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
10320 2a 20 20 20 20 20 55 73 65 64 20 66 6f 72 20 22  *     Used for "
10330 70 75 72 65 22 20 64 61 74 65 2f 74 69 6d 65 20  pure" date/time 
10340 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 69 73 20  functions, this 
10350 6d 61 63 72 6f 20 69 73 20 6c 69 6b 65 20 44 46  macro is like DF
10360 55 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20 20 20 65  UNCTION.**     e
10370 78 63 65 70 74 20 74 68 61 74 20 69 74 20 64 6f  xcept that it do
10380 65 73 20 73 65 74 20 74 68 65 20 53 51 4c 49 54  es set the SQLIT
10390 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
103a0 66 6c 61 67 73 2e 20 20 69 41 72 67 20 69 73 0a  flags.  iArg is.
103b0 2a 2a 20 20 20 20 20 69 67 6e 6f 72 65 64 20 61  **     ignored a
103c0 6e 64 20 74 68 65 20 75 73 65 72 2d 64 61 74 61  nd the user-data
103d0 20 66 6f 72 20 74 68 65 73 65 20 66 75 6e 63 74   for these funct
103e0 69 6f 6e 73 20 69 73 20 73 65 74 20 74 6f 20 61  ions is set to a
103f0 6e 20 0a 2a 2a 20 20 20 20 20 61 72 62 69 74 72  n .**     arbitr
10400 61 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f 69  ary non-NULL poi
10410 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70  nter.  The bNC p
10420 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
10430 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47  used..**.**   AG
10440 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
10450 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10460 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a  xStep, xFinal).*
10470 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
10480 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74  eate an aggregat
10490 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  e function defin
104a0 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ition implemente
104b0 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20  d by.**     the 
104c0 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65  C functions xSte
104d0 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68  p and xFinal. Th
104e0 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72  e first four par
104f0 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61  ameters.**     a
10500 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69  re interpreted i
10510 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
10520 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61  s the first 4 pa
10530 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20  rameters to.**  
10540 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a     FUNCTION()..*
10550 2a 0a 2a 2a 20 20 20 57 46 55 4e 43 54 49 4f 4e  *.**   WFUNCTION
10560 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
10570 72 67 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  rg, xStep, xFina
10580 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49 6e 76 65  l, xValue, xInve
10590 72 73 65 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  rse).**     Used
105a0 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
105b0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
105c0 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
105d0 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
105e0 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
105f0 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
10600 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
10610 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
10620 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
10630 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
10640 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
10650 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
10660 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
10670 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b  N()..**.**   LIK
10680 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
10690 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a  g, pArg, flags).
106a0 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
106b0 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
106c0 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
106d0 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
106e0 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68   zName.**     th
106f0 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
10700 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73  arguments and is
10710 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
10720 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20  a call to C.**  
10730 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
10740 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
10750 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
10760 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
10770 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
10780 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
10790 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
107a0 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
107b0 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
107c0 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
107d0 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
107e0 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
107f0 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
10800 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
10810 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
10820 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10830 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10840 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
10850 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
10860 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
10870 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
10880 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
10890 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
108a0 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
108b0 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
108c0 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
108d0 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ne VFUNCTION(zNa
108e0 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
108f0 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
10900 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
10910 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
10920 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
10930 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
10940 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
10950 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20  xFunc, 0, 0, 0, 
10960 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
10970 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28  efine DFUNCTION(
10980 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10990 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
109a0 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
109b0 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51  _FUNC_SLOCHNG|SQ
109c0 4c 49 54 45 5f 55 54 46 38 2c 20 5c 0a 20 20 20  LITE_UTF8, \.   
109d0 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  0, 0, xFunc, 0, 
109e0 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  0, 0, #zName, {0
109f0 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50 55 52 45  } }.#define PURE
10a00 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  _DATE(zName, nAr
10a10 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10a20 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
10a30 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
10a40 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  HNG|SQLITE_UTF8|
10a50 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
10a60 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76 6f 69 64  TANT, \.   (void
10a70 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  *)&sqlite3Config
10a80 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10a90 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10aa0 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54   }.#define FUNCT
10ab0 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ION2(zName, nArg
10ac0 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10ad0 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  nc, extraFlags) 
10ae0 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45  \.  {nArg,SQLITE
10af0 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
10b00 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
10b10 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10b20 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73  COLL)|extraFlags
10b30 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54  ,\.   SQLITE_INT
10b40 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
10b50 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
10b60 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10b70 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43  #define STR_FUNC
10b80 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10b90 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , pArg, bNC, xFu
10ba0 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
10bb0 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
10bc0 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NG|SQLITE_UTF8|(
10bd0 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
10be0 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
10bf0 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20  pArg, 0, xFunc, 
10c00 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
10c10 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46   }.#define LIKEF
10c20 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
10c30 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20   arg, flags) \. 
10c40 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
10c50 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
10c60 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20  ITE_UTF8|flags, 
10c70 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67  \.   (void *)arg
10c80 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30  , 0, likeFunc, 0
10c90 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
10ca0 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47  {0} }.#define AG
10cb0 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
10cc0 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
10cd0 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61  tep, xFinal, xVa
10ce0 6c 75 65 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  lue) \.  {nArg, 
10cf0 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a  SQLITE_UTF8|(nc*
10d00 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10d10 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
10d20 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
10d30 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69  g), 0, xStep,xFi
10d40 6e 61 6c 2c 78 56 61 6c 75 65 2c 30 2c 23 7a 4e  nal,xValue,0,#zN
10d50 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e  ame, {0}}.#defin
10d60 65 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61  e AGGREGATE2(zNa
10d70 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
10d80 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
10d90 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
10da0 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10db0 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
10dc0 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65  FUNC_NEEDCOLL)|e
10dd0 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20  xtraFlags, \.   
10de0 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
10df0 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70  R(arg), 0, xStep
10e00 2c 78 46 69 6e 61 6c 2c 78 46 69 6e 61 6c 2c 30  ,xFinal,xFinal,0
10e10 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 23  ,#zName, {0}}..#
10e20 64 65 66 69 6e 65 20 57 41 47 47 52 45 47 41 54  define WAGGREGAT
10e30 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  E(zName, nArg, a
10e40 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
10e50 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c 20 78  Final, xValue, x
10e60 49 6e 76 65 72 73 65 2c 20 66 29 20 5c 0a 20 20  Inverse, f) \.  
10e70 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
10e80 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8|(nc*SQLITE_FU
10e90 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 66 2c 20  NC_NEEDCOLL)|f, 
10ea0 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
10eb0 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
10ec0 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61  xStep,xFinal,xVa
10ed0 6c 75 65 2c 78 49 6e 76 65 72 73 65 2c 23 7a 4e  lue,xInverse,#zN
10ee0 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a  ame, {0}}../*.**
10ef0 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76   All current sav
10f00 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72  epoints are stor
10f10 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
10f20 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a  ist starting at.
10f30 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  ** sqlite3.pSave
10f40 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74  point. The first
10f50 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20   element in the 
10f60 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74  list is the most
10f70 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65   recently.** ope
10f80 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53  ned savepoint. S
10f90 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64  avepoints are ad
10fa0 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list 
10fb0 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f  by the vdbe.** O
10fc0 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
10fd0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ruction..*/.stru
10fe0 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20  ct Savepoint {. 
10ff0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
11000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11010 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e       /* Savepoin
11020 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d  t name (nul-term
11030 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34  inated) */.  i64
11040 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11060 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
11070 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74  ferred fk violat
11080 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ions */.  i64 nD
11090 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
110a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
110b0 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
110c0 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20  red imm fk. */. 
110d0 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78   Savepoint *pNex
110e0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
110f0 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73       /* Parent s
11100 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79  avepoint (if any
11110 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
11120 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
11130 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63   used as the sec
11140 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  ond parameter to
11150 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
11160 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74  t(),.** and as t
11170 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
11180 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69  o the OP_Savepoi
11190 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
111a0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50  */.#define SAVEP
111b0 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20  OINT_BEGIN      
111c0 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  0.#define SAVEPO
111d0 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31  INT_RELEASE    1
111e0 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
111f0 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a  NT_ROLLBACK   2.
11200 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
11210 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74  ite module (virt
11220 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ual table defini
11230 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64  tion) is defined
11240 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
11250 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
11260 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73  ing structure, s
11270 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
11280 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20  ite3.aModule.** 
11290 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73  hash table..*/.s
112a0 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20  truct Module {. 
112b0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
112c0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20  odule *pModule; 
112d0 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63        /* Callbac
112e0 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20  k pointers */.  
112f0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
11300 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
11310 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73       /* Name pas
11320 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
11330 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
11340 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20   *pAux;         
11350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11360 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20   /* pAux passed 
11370 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
11380 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
11390 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
113a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
113b0 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f  Module destructo
113c0 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  r function */.  
113d0 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20  Table *pEpoTab; 
113e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113f0 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75       /* Eponymou
11400 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73  s table for this
11410 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   module */.};../
11420 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  *.** information
11430 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75   about each colu
11440 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62  mn of an SQL tab
11450 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e  le is held in an
11460 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
11470 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a  this structure..
11480 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e  */.struct Column
11490 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
114a0 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ;     /* Name of
114b0 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30   this column, \0
114c0 30 30 2c 20 74 68 65 6e 20 74 68 65 20 74 79 70  00, then the typ
114d0 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66  e */.  Expr *pDf
114e0 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75  lt;     /* Defau
114f0 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  lt value of this
11500 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
11510 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a  r *zColl;     /*
11520 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
11530 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75  nce.  If NULL, u
11540 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a  se the default *
11550 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20  /.  u8 notNull; 
11560 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63       /* An OE_ c
11570 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67  ode for handling
11580 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
11590 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72  traint */.  char
115a0 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20   affinity;   /* 
115b0 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  One of the SQLIT
115c0 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73  E_AFF_... values
115d0 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20   */.  u8 szEst; 
115e0 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
115f0 74 65 64 20 73 69 7a 65 20 6f 66 20 76 61 6c 75  ted size of valu
11600 65 20 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e in this column
11610 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d 31  . sizeof(INT)==1
11620 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67   */.  u8 colFlag
11630 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61  s;     /* Boolea
11640 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53  n properties.  S
11650 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69  ee COLFLAG_ defi
11660 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  nes below */.};.
11670 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
11680 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f  es for Column.co
11690 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69  lFlags:.*/.#defi
116a0 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b  ne COLFLAG_PRIMK
116b0 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a  EY  0x0001    /*
116c0 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20   Column is part 
116d0 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  of the primary k
116e0 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  ey */.#define CO
116f0 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30  LFLAG_HIDDEN   0
11700 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69  x0002    /* A hi
11710 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  dden column in a
11720 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
11730 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
11740 47 5f 48 41 53 54 59 50 45 20 20 30 78 30 30 30  G_HASTYPE  0x000
11750 34 20 20 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d  4    /* Type nam
11760 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e  e follows column
11770 20 6e 61 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65   name */.#define
11780 20 43 4f 4c 46 4c 41 47 5f 55 4e 49 51 55 45 20   COLFLAG_UNIQUE 
11790 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 43    0x0008    /* C
117a0 6f 6c 75 6d 6e 20 64 65 66 20 63 6f 6e 74 61 69  olumn def contai
117b0 6e 73 20 22 55 4e 49 51 55 45 22 20 6f 72 20 22  ns "UNIQUE" or "
117c0 50 4b 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  PK" */.#define C
117d0 4f 4c 46 4c 41 47 5f 53 4f 52 54 45 52 52 45 46  OLFLAG_SORTERREF
117e0 20 30 78 30 30 31 30 20 20 20 2f 2a 20 55 73 65   0x0010   /* Use
117f0 20 73 6f 72 74 65 72 2d 72 65 66 73 20 77 69 74   sorter-refs wit
11800 68 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  h this column */
11810 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61  ../*.** A "Colla
11820 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69  ting Sequence" i
11830 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20  s defined by an 
11840 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
11850 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72  following.** str
11860 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75  ucture. Conceptu
11870 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e  ally, a collatin
11880 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69  g sequence consi
11890 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e  sts of a name an
118a0 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f  d.** a compariso
118b0 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64  n routine that d
118c0 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72  efines the order
118d0 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e 63   of that sequenc
118e0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c  e..**.** If Coll
118f0 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c  Seq.xCmp is NULL
11900 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
11910 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  the.** collating
11920 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64   sequence is und
11930 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73  efined.  Indices
11940 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64   built on an und
11950 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74  efined.** collat
11960 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79  ing sequence may
11970 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20   not be read or 
11980 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75  written..*/.stru
11990 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63  ct CollSeq {.  c
119a0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
119b0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
119c0 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  the collating se
119d0 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e  quence, UTF-8 en
119e0 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e  coded */.  u8 en
119f0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
11a00 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
11a10 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d  g handled by xCm
11a20 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  p() */.  void *p
11a30 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  User;          /
11a40 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
11a50 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   to xCmp() */.  
11a60 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64  int (*xCmp)(void
11a70 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  *,int, const voi
11a80 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  d*, int, const v
11a90 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a  oid*);.  void (*
11aa0 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f  xDel)(void*);  /
11ab0 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72  * Destructor for
11ac0 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   pUser */.};../*
11ad0 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72  .** A sort order
11ae0 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 41   can be either A
11af0 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23  SC or DESC..*/.#
11b00 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
11b10 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a  _ASC       0  /*
11b20 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
11b30 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66  ng order */.#def
11b40 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45  ine SQLITE_SO_DE
11b50 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f  SC      1  /* So
11b60 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
11b70 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
11b80 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46   SQLITE_SO_UNDEF
11b90 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f  INED -1 /* No so
11ba0 72 74 20 6f 72 64 65 72 20 73 70 65 63 69 66 69  rt order specifi
11bb0 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c  ed */../*.** Col
11bc0 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70  umn affinity typ
11bd0 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20  es..**.** These 
11be0 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65  used to have mne
11bf0 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20  monic name like 
11c00 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  'i' for SQLITE_A
11c10 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a  FF_INTEGER and.*
11c20 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45  * 't' for SQLITE
11c30 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20  _AFF_TEXT.  But 
11c40 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69  we can save a li
11c50 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69  ttle space and i
11c60 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70  mprove.** the sp
11c70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20  eed a little by 
11c80 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61  numbering the va
11c90 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65  lues consecutive
11ca0 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61  ly..**.** But ra
11cb0 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74 20  ther than start 
11cc0 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20  with 0 or 1, we 
11cd0 62 65 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20  begin with 'A'. 
11ce0 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68   That way,.** wh
11cf0 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69  en multiple affi
11d00 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20 63  nity types are c
11d10 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f  oncatenated into
11d20 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a   a string and.**
11d30 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34 20   used as the P4 
11d40 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69  operand, they wi
11d50 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61  ll be more reada
11d60 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ble..**.** Note 
11d70 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75  also that the nu
11d80 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65 20  meric types are 
11d90 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72  grouped together
11da0 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67   so that testing
11db0 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69  .** for a numeri
11dc0 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e 67  c type is a sing
11dd0 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  le comparison.  
11de0 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74 79 70  And the BLOB typ
11df0 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23  e is first..*/.#
11e00 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11e10 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27 0a 23  F_BLOB     'A'.#
11e20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11e30 46 5f 54 45 58 54 20 20 20 20 20 27 42 27 0a 23  F_TEXT     'B'.#
11e40 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11e50 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27 0a 23  F_NUMERIC  'C'.#
11e60 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11e70 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27 0a 23  F_INTEGER  'D'.#
11e80 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11e90 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27 0a 0a  F_REAL     'E'..
11ea0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49  #define sqlite3I
11eb0 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  sNumericAffinity
11ec0 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54  (X)  ((X)>=SQLIT
11ed0 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a  E_AFF_NUMERIC)..
11ee0 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
11ef0 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73  _AFF_MASK values
11f00 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73   masks off the s
11f10 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20  ignificant bits 
11f20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74  of an.** affinit
11f30 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66  y value..*/.#def
11f40 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  ine SQLITE_AFF_M
11f50 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a  ASK     0x47../*
11f60 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62  .** Additional b
11f70 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63  it values that c
11f80 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20  an be ORed with 
11f90 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68  an affinity with
11fa0 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20  out.** changing 
11fb0 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a  the affinity..**
11fc0 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e  .** The SQLITE_N
11fd0 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61  OTNULL flag is a
11fe0 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
11ff0 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49  NULLEQ and JUMPI
12000 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75  FNULL..** It cau
12010 73 65 73 20 61 6e 20 61 73 73 65 72 74 28 29 20  ses an assert() 
12020 74 6f 20 66 69 72 65 20 69 66 20 65 69 74 68 65  to fire if eithe
12030 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63  r operand to a c
12040 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65  omparison.** ope
12050 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20  rator is NULL.  
12060 49 74 20 69 73 20 61 64 64 65 64 20 74 6f 20 63  It is added to c
12070 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f  ertain compariso
12080 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a  n operators to.*
12090 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74 68 65  * prove that the
120a0 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c   operands are al
120b0 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a  ways NOT NULL..*
120c0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
120d0 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20 20 30 78  _KEEPNULL     0x
120e0 30 38 20 20 2f 2a 20 55 73 65 64 20 62 79 20 76  08  /* Used by v
120f0 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a  ector == or <> *
12100 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
12110 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78  _JUMPIFNULL   0x
12120 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20  10  /* jumps if 
12130 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
12140 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  s NULL */.#defin
12150 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
12160 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53        0x20  /* S
12170 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72  tore result in r
12180 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68  eg[P2] rather th
12190 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69  an jump */.#defi
121a0 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  ne SQLITE_NULLEQ
121b0 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20         0x80  /* 
121c0 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65  NULL=NULL */.#de
121d0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e  fine SQLITE_NOTN
121e0 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f  ULL      0x90  /
121f0 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 6f 70  * Assert that op
12200 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72  erands are never
12210 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   NULL */../*.** 
12220 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  An object of thi
12230 73 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65  s type is create
12240 64 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75  d for each virtu
12250 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74  al table present
12260 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62   in.** the datab
12270 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  ase schema..**.*
12280 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
12290 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  e schema is shar
122a0 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ed, then there i
122b0 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  s one instance o
122c0 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  f this.** struct
122d0 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74  ure for each dat
122e0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
122f0 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74   (sqlite3*) that
12300 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64   uses the shared
12310 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73  .** schema. This
12320 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68   is because each
12330 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
12340 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74  tion requires it
12350 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20  s own unique.** 
12360 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
12370 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
12380 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63  ndle used to acc
12390 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20  ess the virtual 
123a0 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  table.** impleme
123b0 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33  ntation. sqlite3
123c0 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63  _vtab* handles c
123d0 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64  an not be shared
123e0 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61   between.** data
123f0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
12400 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20  , even when the 
12410 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d  rest of the in-m
12420 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a  emory database.*
12430 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  * schema is shar
12440 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65  ed, as the imple
12450 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20  mentation often 
12460 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61 62  stores the datab
12470 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
12480 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20  n handle passed 
12490 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78 43  to it via the xC
124a0 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65  onnect() or xCre
124b0 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20  ate() method.** 
124c0 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
124d0 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79  ation internally
124e0 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65 20  . This database 
124f0 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
12500 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65  e may.** then be
12510 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69 72   used by the vir
12520 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
12530 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63  mentation to acc
12540 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73 0a  ess real tables.
12550 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64 61  ** within the da
12560 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20  tabase. So that 
12570 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20 70  they appear as p
12580 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65  art of the calle
12590 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  rs.** transactio
125a0 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73 65  n, these accesse
125b0 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64  s need to be mad
125c0 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20 64  e via the same d
125d0 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
125e0 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73  ction as that us
125f0 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51  ed to execute SQ
12600 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20  L operations on 
12610 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
12620 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61  e..**.** All VTa
12630 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74  ble objects that
12640 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61   correspond to a
12650 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e   single table in
12660 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74   a shared.** dat
12670 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65  abase schema are
12680 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65   initially store
12690 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  d in a linked-li
126a0 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  st pointed to by
126b0 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56  .** the Table.pV
126c0 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72  Table member var
126d0 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72  iable of the cor
126e0 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65  responding Table
126f0 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e   object..** When
12700 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70   an sqlite3_prep
12710 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20  are() operation 
12720 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61  is required to a
12730 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
12740 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73  l.** table, it s
12750 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74  earches the list
12760 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20   for the VTable 
12770 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
12780 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   to the.** datab
12790 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64  ase connection d
127a0 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69  oing the prepari
127b0 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20  ng so as to use 
127c0 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73  the correct.** s
127d0 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
127e0 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69  dle in the compi
127f0 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  led query..**.**
12800 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f   When an in-memo
12810 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20  ry Table object 
12820 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20  is deleted (for 
12830 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65  example when the
12840 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65  .** schema is be
12850 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72  ing reloaded for
12860 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74   some reason), t
12870 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  he VTable object
12880 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c  s are not.** del
12890 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
128a0 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
128b0 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63  es are not xDisc
128c0 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d  onnect()ed.** im
128d0 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65  mediately. Inste
128e0 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76  ad, they are mov
128f0 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c  ed from the Tabl
12900 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74  e.pVTable list t
12910 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e  o.** another lin
12920 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
12930 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70  by the sqlite3.p
12940 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65  Disconnect membe
12950 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72  r of the.** corr
12960 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
12970 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65  3 structure. The
12980 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74  y are then delet
12990 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64  ed/xDisconnected
129a0 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20  .** next time a 
129b0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
129c0 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64  pared using said
129d0 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20   sqlite3*. This 
129e0 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76  is done.** to av
129f0 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73  oid deadlock iss
12a00 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75  ues involving mu
12a10 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d  ltiple sqlite3.m
12a20 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a  utex mutexes..**
12a30 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e   Refer to commen
12a40 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
12a50 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  n sqlite3VtabUnl
12a60 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e  ockList() for an
12a70 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  .** explanation 
12a80 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20  as to why it is 
12a90 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65  safe to add an e
12aa0 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74  ntry to an sqlit
12ab0 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a  e3.pDisconnect.*
12ac0 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68  * list without h
12ad0 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65  olding the corre
12ae0 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
12af0 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a  .mutex mutex..**
12b00 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66  .** The memory f
12b10 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68  or objects of th
12b20 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79  is type is alway
12b30 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a  s allocated by.*
12b40 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
12b50 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63  c(), using the c
12b60 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
12b70 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c   stored in VTabl
12b80 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65 20 66  e.db as.** the f
12b90 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  irst argument..*
12ba0 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  /.struct VTable 
12bb0 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
12bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12bd0 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   Database connec
12be0 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
12bf0 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20  with this table 
12c00 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f  */.  Module *pMo
12c10 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
12c20 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64  * Pointer to mod
12c30 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
12c40 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  on */.  sqlite3_
12c50 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20  vtab *pVtab;    
12c60 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
12c70 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f  vtab instance */
12c80 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
12c90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12ca0 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
12cb0 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  rs to this struc
12cc0 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f  ture */.  u8 bCo
12cd0 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20  nstraint;       
12ce0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
12cf0 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73  onstraints are s
12d00 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e  upported */.  in
12d10 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t iSavepoint;   
12d20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68          /* Depth
12d30 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e   of the SAVEPOIN
12d40 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61  T stack */.  VTa
12d50 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ble *pNext;     
12d60 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
12d70 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73  n linked list (s
12d80 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a  ee above) */.};.
12d90 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d  ./*.** The schem
12da0 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20 74  a for each SQL t
12db0 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69 73  able and view is
12dc0 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
12dd0 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20  memory.** by an 
12de0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
12df0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
12e00 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ure..*/.struct T
12e10 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a  able {.  char *z
12e20 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
12e30 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
12e40 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20  le or view */.  
12e50 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20  Column *aCol;   
12e60 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
12e70 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
12e80 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
12e90 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20   *pIndex;       
12ea0 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69  /* List of SQL i
12eb0 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74  ndexes on this t
12ec0 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63  able. */.  Selec
12ed0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
12ee0 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c  /* NULL for tabl
12ef0 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64  es.  Points to d
12f00 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76  efinition if a v
12f10 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  iew. */.  FKey *
12f20 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f  pFKey;         /
12f30 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
12f40 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   all foreign key
12f50 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
12f60 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
12f70 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72  ff;       /* Str
12f80 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
12f90 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
12fa0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78  h column */.  Ex
12fb0 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20  prList *pCheck; 
12fc0 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20     /* All CHECK 
12fd0 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20  constraints */. 
12fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ff0 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61        /*   ... a
13000 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f 6c 75  lso used as colu
13010 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20  mn name list in 
13020 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20  a VIEW */.  int 
13030 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
13040 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 70   /* Root BTree p
13050 61 67 65 20 66 6f 72 20 74 68 69 73 20 74 61 62  age for this tab
13060 6c 65 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62  le */.  u32 nTab
13070 52 65 66 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Ref;         /* 
13080 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
13090 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65  rs to this Table
130a0 20 2a 2f 0a 20 20 75 33 32 20 74 61 62 46 6c 61   */.  u32 tabFla
130b0 67 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  gs;        /* Ma
130c0 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65  sk of TF_* value
130d0 73 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79  s */.  i16 iPKey
130e0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
130f0 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20  f not negative, 
13100 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20  use aCol[iPKey] 
13110 61 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a  as the rowid */.
13120 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20    i16 nCol;     
13130 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13140 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
13150 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  his table */.  L
13160 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74  ogEst nRowLogEst
13170 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64  ;   /* Estimated
13180 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d   rows in table -
13190 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
131a0 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f  t1 table */.  Lo
131b0 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20  gEst szTabRow;  
131c0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
131d0 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62  size of each tab
131e0 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20  le row in bytes 
131f0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
13200 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54  _ENABLE_COSTMULT
13210 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75  .  LogEst costMu
13220 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20  lt;     /* Cost 
13230 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75  multiplier for u
13240 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  sing this table 
13250 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 6b  */.#endif.  u8 k
13260 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  eyConf;         
13270 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69   /* What to do i
13280 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65  n case of unique
13290 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e  ness conflict on
132a0 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65   iPKey */.#ifnde
132b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  f SQLITE_OMIT_AL
132c0 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61  TERTABLE.  int a
132d0 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20  ddColOffset;    
132e0 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45  /* Offset in CRE
132f0 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74  ATE TABLE stmt t
13300 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75  o add a new colu
13310 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  mn */.#endif.#if
13320 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
13330 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
13340 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20  int nModuleArg; 
13350 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13360 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
13370 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63  he module */.  c
13380 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72  har **azModuleAr
13390 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65  g;  /* 0: module
133a0 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76 74   1: schema 2: vt
133b0 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72  ab name 3...: ar
133c0 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  gs */.  VTable *
133d0 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20  pVTable;     /* 
133e0 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f  List of VTable o
133f0 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69  bjects. */.#endi
13400 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  f.  Trigger *pTr
13410 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74  igger;   /* List
13420 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f   of triggers sto
13430 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a  red in pSchema *
13440 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
13450 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
13460 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ma that contains
13470 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
13480 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d   Table *pNextZom
13490 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e  bie;  /* Next on
134a0 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62   the Parse.pZomb
134b0 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b  ieTab list */.};
134c0 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
134d0 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65  values for Table
134e0 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a  .tabFlags..**.**
134f0 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70   TF_OOOHidden ap
13500 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65 73 20  plies to tables 
13510 6f 72 20 76 69 65 77 20 74 68 61 74 20 68 61 76  or view that hav
13520 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  e hidden columns
13530 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c   that are.** fol
13540 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64  lowed by non-hid
13550 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78  den columns.  Ex
13560 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45 20  ample:  "CREATE 
13570 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 20  VIRTUAL TABLE x 
13580 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61  USING.** vtab1(a
13590 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20   HIDDEN, b);".  
135a0 53 69 6e 63 65 20 22 62 22 20 69 73 20 61 20 6e  Since "b" is a n
135b0 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  on-hidden column
135c0 20 62 75 74 20 22 61 22 20 69 73 20 68 69 64 64   but "a" is hidd
135d0 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f  en,.** the TF_OO
135e0 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62 75 74  OHidden attribut
135f0 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e  e would apply in
13600 20 74 68 69 73 20 63 61 73 65 2e 20 20 53 75 63   this case.  Suc
13610 68 20 74 61 62 6c 65 73 20 72 65 71 75 69 72 65  h tables require
13620 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e 64  .** special hand
13630 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53 45  ling during INSE
13640 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a  RT processing..*
13650 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61  /.#define TF_Rea
13660 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30  donly        0x0
13670 30 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  001    /* Read-o
13680 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
13690 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
136a0 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
136b0 78 30 30 30 32 20 20 20 20 2f 2a 20 41 6e 20 65  x0002    /* An e
136c0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a  phemeral table *
136d0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
136e0 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30  PrimaryKey   0x0
136f0 30 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  004    /* Table 
13700 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65  has a primary ke
13710 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  y */.#define TF_
13720 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20  Autoincrement   
13730 30 78 30 30 30 38 20 20 20 20 2f 2a 20 49 6e 74  0x0008    /* Int
13740 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
13750 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   is autoincremen
13760 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  t */.#define TF_
13770 48 61 73 53 74 61 74 31 20 20 20 20 20 20 20 20  HasStat1        
13780 30 78 30 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f  0x0010    /* nRo
13790 77 4c 6f 67 45 73 74 20 73 65 74 20 66 72 6f 6d  wLogEst set from
137a0 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f   sqlite_stat1 */
137b0 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68  .#define TF_With
137c0 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 30 30  outRowid    0x00
137d0 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69  20    /* No rowi
137e0 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20  d.  PRIMARY KEY 
137f0 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64  is the key */.#d
13800 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62  efine TF_NoVisib
13810 6c 65 52 6f 77 69 64 20 20 30 78 30 30 34 30 20  leRowid  0x0040 
13820 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69     /* No user-vi
13830 73 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f  sible "rowid" co
13840 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lumn */.#define 
13850 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20  TF_OOOHidden    
13860 20 20 20 30 78 30 30 38 30 20 20 20 20 2f 2a 20     0x0080    /* 
13870 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64  Out-of-Order hid
13880 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23  den columns */.#
13890 64 65 66 69 6e 65 20 54 46 5f 53 74 61 74 73 55  define TF_StatsU
138a0 73 65 64 20 20 20 20 20 20 20 30 78 30 31 30 30  sed       0x0100
138b0 20 20 20 20 2f 2a 20 51 75 65 72 79 20 70 6c 61      /* Query pla
138c0 6e 6e 65 72 20 64 65 63 69 73 69 6f 6e 73 20 61  nner decisions a
138d0 66 66 65 63 74 65 64 20 62 79 0a 20 20 20 20 20  ffected by.     
138e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13900 2a 2a 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f  ** Index.aiRowLo
13910 67 45 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f  gEst[] values */
13920 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 4e  .#define TF_HasN
13930 6f 74 4e 75 6c 6c 20 20 20 20 20 20 30 78 30 32  otNull      0x02
13940 30 30 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  00    /* Contain
13950 73 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  s NOT NULL const
13960 72 61 69 6e 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  raints */../*.**
13970 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65   Test to see whe
13980 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61  ther or not a ta
13990 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c  ble is a virtual
139a0 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73   table.  This is
139b0 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61  .** done as a ma
139c0 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77  cro so that it w
139d0 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64  ill be optimized
139e0 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61   out when virtua
139f0 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f  l.** table suppo
13a00 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  rt is omitted fr
13a10 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f  om the build..*/
13a20 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
13a30 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
13a40 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  E.#  define IsVi
13a50 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28  rtual(X)      ((
13a60 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a  X)->nModuleArg).
13a70 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
13a80 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
13a90 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    0.#endif../*.*
13aa0 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
13ab0 72 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d  rmine if a colum
13ac0 6e 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73  n is hidden.  Is
13ad0 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
13ae0 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77  lumn().** only w
13af0 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72  orks for non-vir
13b00 74 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64  tual tables (ord
13b10 69 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  inary tables and
13b20 20 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a   views) and is.*
13b30 2a 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75  * always false u
13b40 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41  nless SQLITE_ENA
13b50 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d  BLE_HIDDEN_COLUM
13b60 4e 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20  NS is defined.  
13b70 54 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43  The.** IsHiddenC
13b80 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73  olumn() macro is
13b90 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65   general purpose
13ba0 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
13bb0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48  (SQLITE_ENABLE_H
13bc0 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23  IDDEN_COLUMNS).#
13bd0 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
13be0 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
13bf0 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61     (((X)->colFla
13c00 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
13c10 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69  DEN)!=0).#  defi
13c20 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
13c30 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28  denColumn(X) (((
13c40 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
13c50 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
13c60 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65  0).#elif !define
13c70 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
13c80 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64  RTUALTABLE).#  d
13c90 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
13ca0 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
13cb0 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
13cc0 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
13cd0 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
13ce0 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
13cf0 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73  Column(X) 0.#els
13d00 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  e.#  define IsHi
13d10 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20  ddenColumn(X)   
13d20 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e        0.#  defin
13d30 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64  e IsOrdinaryHidd
13d40 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65  enColumn(X) 0.#e
13d50 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74  ndif.../* Does t
13d60 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20  he table have a 
13d70 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
13d80 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20   HasRowid(X)    
13d90 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
13da0 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77   & TF_WithoutRow
13db0 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20  id)==0).#define 
13dc0 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20  VisibleRowid(X) 
13dd0 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
13de0 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f  & TF_NoVisibleRo
13df0 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  wid)==0)../*.** 
13e00 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79  Each foreign key
13e10 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61   constraint is a
13e20 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
13e30 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
13e40 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66  cture..**.** A f
13e50 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73  oreign key is as
13e60 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77  sociated with tw
13e70 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22  o tables.  The "
13e80 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a  from" table is.*
13e90 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  * the table that
13ea0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45   contains the RE
13eb0 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
13ec0 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65  that creates the
13ed0 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e   foreign.** key.
13ee0 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65    The "to" table
13ef0 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   is the table th
13f00 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74  at is named in t
13f10 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
13f20 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65  ause..** Conside
13f30 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a  r this example:.
13f40 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
13f50 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20   TABLE ex1(.**  
13f60 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50       a INTEGER P
13f70 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20  RIMARY KEY,.**  
13f80 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43       b INTEGER C
13f90 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45  ONSTRAINT fk1 RE
13fa0 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a  FERENCES ex2(x).
13fb0 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20  **     );.**.** 
13fc0 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  For foreign key 
13fd0 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d  "fk1", the from-
13fe0 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61  table is "ex1" a
13ff0 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  nd the to-table 
14000 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75  is "ex2"..** Equ
14010 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a  ivalent names:.*
14020 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61  *.**     from-ta
14030 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62  ble == child-tab
14040 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74  le.**       to-t
14050 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74  able == parent-t
14060 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  able.**.** Each 
14070 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
14080 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69  e generates an i
14090 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
140a0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
140b0 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61  re.** which is a
140c0 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66  ttached to the f
140d0 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20  rom-table.  The 
140e0 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f  to-table need no
140f0 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20  t exist when.** 
14100 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
14110 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20  s created.  The 
14120 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65  existence of the
14130 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74   to-table is not
14140 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20   checked..**.** 
14150 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  The list of all 
14160 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c  parents for chil
14170 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c  d Table X is hel
14180 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a  d at X.pFKey..**
14190 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c  .** A list of al
141a0 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61  l children for a
141b0 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28   table named Z (
141c0 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20  which might not 
141d0 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69  even exist).** i
141e0 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61  s held in Schema
141f0 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61  .fkeyHash with a
14200 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a   hash key of Z..
14210 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b  */.struct FKey {
14220 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b  .  Table *pFrom;
14230 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
14240 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46  ntaining the REF
14250 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28  ERENCES clause (
14260 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20  aka: Child) */. 
14270 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d   FKey *pNextFrom
14280 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20  ;  /* Next FKey 
14290 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e  with the same in
142a0 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72   pFrom. Next par
142b0 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a  ent of pFrom */.
142c0 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20    char *zTo;    
142d0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
142e0 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65  able that the ke
142f0 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61  y points to (aka
14300 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46  : Parent) */.  F
14310 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20  Key *pNextTo;   
14320 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68   /* Next with th
14330 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74  e same zTo. Next
14340 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a   child of zTo. *
14350 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54  /.  FKey *pPrevT
14360 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75  o;    /* Previou
14370 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  s with the same 
14380 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f  zTo */.  int nCo
14390 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
143a0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
143b0 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20  in this key */. 
143c0 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d   /* EV: R-30323-
143d0 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73  21917 */.  u8 is
143e0 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20  Deferred;       
143f0 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
14400 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69  raint checking i
14410 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20  s deferred till 
14420 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61  COMMIT */.  u8 a
14430 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20  Action[2];      
14440 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61    /* ON DELETE a
14450 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74  nd ON UPDATE act
14460 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65  ions, respective
14470 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  ly */.  Trigger 
14480 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a  *apTrigger[2];/*
14490 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41   Triggers for aA
144a0 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20  ction[] actions 
144b0 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c  */.  struct sCol
144c0 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61  Map {      /* Ma
144d0 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73  pping of columns
144e0 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c   in pFrom to col
144f0 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20  umns in zTo */. 
14500 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20     int iFrom;   
14510 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
14520 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70  x of column in p
14530 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72  From */.    char
14540 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20   *zCol;         
14550 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c    /* Name of col
14560 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20  umn in zTo.  If 
14570 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59  NULL use PRIMARY
14580 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c   KEY */.  } aCol
14590 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
145a0 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
145b0 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f   each of nCol co
145c0 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  lumns */.};../*.
145d0 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  ** SQLite suppor
145e0 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ts many differen
145f0 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76  t ways to resolv
14600 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  e a constraint.*
14610 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41  * error.  ROLLBA
14620 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  CK processing me
14630 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74  ans that a const
14640 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
14650 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70  ** causes the op
14660 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
14670 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66  ss to fail and f
14680 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
14690 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ransaction.** to
146a0 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
146b0 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69    ABORT processi
146c0 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65  ng means the ope
146d0 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
146e0 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61  s.** fails and a
146f0 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ny prior changes
14700 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f   from that one o
14710 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63  peration are bac
14720 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20  ked out,.** but 
14730 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
14740 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61  is not rolled ba
14750 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73  ck.  FAIL proces
14760 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a  sing means that.
14770 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ** the operation
14780 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f   in progress sto
14790 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61  ps and returns a
147a0 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42  n error code.  B
147b0 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e  ut prior.** chan
147c0 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73  ges due to the s
147d0 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  ame operation ar
147e0 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
147f0 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b   and no rollback
14800 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e  .** occurs.  IGN
14810 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ORE means that t
14820 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f  he particular ro
14830 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  w that caused th
14840 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  e constraint.** 
14850 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73  error is not ins
14860 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
14870 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
14880 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
14890 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72  rror.** is retur
148a0 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65  ned.  REPLACE me
148b0 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73  ans that preexis
148c0 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f  ting database ro
148d0 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a  ws that caused.*
148e0 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  * a UNIQUE const
148f0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
14900 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74  are removed so t
14910 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65  hat the new inse
14920 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20  rt or.** update 
14930 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72  can proceed.  Pr
14940 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
14950 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  es and no error 
14960 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a  is reported..**.
14970 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54  ** RESTRICT, SET
14980 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44  NULL, and CASCAD
14990 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  E actions apply 
149a0 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20  only to foreign 
149b0 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43  keys..** RESTRIC
149c0 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  T is the same as
149d0 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44   ABORT for IMMED
149e0 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79  IATE foreign key
149f0 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d  s and the.** sam
14a00 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f  e as ROLLBACK fo
14a10 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e  r DEFERRED keys.
14a20 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20    SETNULL means 
14a30 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e  that the foreign
14a40 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74  .** key is set t
14a50 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45  o NULL.  CASCADE
14a60 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45   means that a DE
14a70 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
14a80 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e  f the.** referen
14a90 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73  ced table row is
14aa0 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f   propagated into
14ab0 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f   the row that ho
14ac0 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69  lds the.** forei
14ad0 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  gn key..**.** Th
14ae0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62  e following symb
14af0 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20  olic values are 
14b00 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77  used to record w
14b10 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20  hich type.** of 
14b20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a  action to take..
14b30 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f  */.#define OE_No
14b40 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68  ne     0   /* Th
14b50 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72  ere is no constr
14b60 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f  aint to check */
14b70 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c  .#define OE_Roll
14b80 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c  back 1   /* Fail
14b90 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   the operation a
14ba0 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  nd rollback the 
14bb0 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
14bc0 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20  define OE_Abort 
14bd0 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f     2   /* Back o
14be0 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64  ut changes but d
14bf0 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72  o no rollback tr
14c00 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
14c10 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20  fine OE_Fail    
14c20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65   3   /* Stop the
14c30 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c   operation but l
14c40 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63  eave all prior c
14c50 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
14c60 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20  e OE_Ignore   4 
14c70 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20    /* Ignore the 
14c80 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f  error. Do not do
14c90 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55   the INSERT or U
14ca0 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
14cb0 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20   OE_Replace  5  
14cc0 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74   /* Delete exist
14cd0 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ing record, then
14ce0 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50   do INSERT or UP
14cf0 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
14d00 4f 45 5f 55 70 64 61 74 65 20 20 20 36 20 20 20  OE_Update   6   
14d10 2f 2a 20 50 72 6f 63 65 73 73 20 61 73 20 61 20  /* Process as a 
14d20 44 4f 20 55 50 44 41 54 45 20 69 6e 20 61 6e 20  DO UPDATE in an 
14d30 75 70 73 65 72 74 20 2a 2f 0a 23 64 65 66 69 6e  upsert */.#defin
14d40 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 37 20  e OE_Restrict 7 
14d50 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f    /* OE_Abort fo
14d60 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f  r IMMEDIATE, OE_
14d70 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46  Rollback for DEF
14d80 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65  ERRED */.#define
14d90 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 38 20 20   OE_SetNull  8  
14da0 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
14db0 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
14dc0 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
14dd0 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 39 20 20   OE_SetDflt  9  
14de0 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
14df0 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
14e00 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a   its default */.
14e10 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61  #define OE_Casca
14e20 64 65 20 20 31 30 20 20 2f 2a 20 43 61 73 63 61  de  10  /* Casca
14e30 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a  de the changes *
14e40 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66  /.#define OE_Def
14e50 61 75 6c 74 20 20 31 31 20 20 2f 2a 20 44 6f 20  ault  11  /* Do 
14e60 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66  whatever the def
14e70 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a  ault action is *
14e80 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  /.../*.** An ins
14e90 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
14ea0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
14eb0 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
14ec0 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d  e first.** argum
14ed0 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64  ent to sqlite3Vd
14ee0 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64  beKeyCompare and
14ef0 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74   is used to cont
14f00 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  rol the.** compa
14f10 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f  rison of the two
14f20 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a   index keys..**.
14f30 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f  ** Note that aSo
14f40 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43  rtOrder[] and aC
14f50 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c  oll[] have nFiel
14f60 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72  d+1 slots.  Ther
14f70 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20  e.** are nField 
14f80 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f  slots for the co
14f90 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65  lumns of an inde
14fa0 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61  x then one extra
14fb0 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65   slot.** for the
14fc0 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e   rowid at the en
14fd0 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79  d..*/.struct Key
14fe0 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65  Info {.  u32 nRe
14ff0 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
15000 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65  Number of refere
15010 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79  nces to this Key
15020 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  Info object */. 
15030 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
15040 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
15050 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74  oding - one of t
15060 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76  he SQLITE_UTF* v
15070 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
15080 4b 65 79 46 69 65 6c 64 3b 20 20 20 20 20 20 2f  KeyField;      /
15090 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20  * Number of key 
150a0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69  columns in the i
150b0 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 41  ndex */.  u16 nA
150c0 6c 6c 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a  llField;      /*
150d0 20 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20   Total columns, 
150e0 69 6e 63 6c 75 64 69 6e 67 20 6b 65 79 20 70 6c  including key pl
150f0 75 73 20 6f 74 68 65 72 73 20 2a 2f 0a 20 20 73  us others */.  s
15100 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
15110 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
15120 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
15130 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
15140 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f  r;     /* Sort o
15150 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f  rder for each co
15160 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53  lumn. */.  CollS
15170 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f  eq *aColl[1];  /
15180 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
15190 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65  ence for each te
151a0 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f  rm of the key */
151b0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
151c0 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72  object holds a r
151d0 65 63 6f 72 64 20 77 68 69 63 68 20 68 61 73 20  ecord which has 
151e0 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20  been parsed out 
151f0 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a  into individual.
15200 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74  ** fields, for t
15210 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64  he purposes of d
15220 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f  oing a compariso
15230 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72  n..**.** A recor
15240 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74  d is an object t
15250 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  hat contains one
15260 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20   or more fields 
15270 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f  of data..** Reco
15280 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  rds are used to 
15290 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  store the conten
152a0 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77  t of a table row
152b0 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a   and to store.**
152c0 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69   the key of an i
152d0 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e  ndex.  A blob en
152e0 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f  coding of a reco
152f0 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79  rd is created by
15300 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52  .** the OP_MakeR
15310 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20  ecord opcode of 
15320 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20  the VDBE and is 
15330 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20  disassembled by 
15340 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e  the.** OP_Column
15350 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41   opcode..**.** A
15360 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
15370 69 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73  is object serves
15380 20 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20   as a "key" for 
15390 64 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f  doing a search o
153a0 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b  n.** an index b+
153b0 74 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f  tree. The goal o
153c0 66 20 74 68 65 20 73 65 61 72 63 68 20 69 73 20  f the search is 
153d0 74 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72  to find the entr
153e0 79 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f  y that.** is clo
153f0 73 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64  sed to the key d
15400 65 73 63 72 69 62 65 64 20 62 79 20 74 68 69 73  escribed by this
15410 20 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f   object.  This o
15420 62 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64  bject might hold
15430 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69  .** just a prefi
15440 78 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54  x of the key.  T
15450 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65  he number of fie
15460 6c 64 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a  lds is given by.
15470 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69  ** pKeyInfo->nFi
15480 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  eld..**.** The r
15490 31 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20  1 and r2 fields 
154a0 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74  are the values t
154b0 6f 20 72 65 74 75 72 6e 20 69 66 20 74 68 69 73  o return if this
154c0 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
154d0 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20  n.** or greater 
154e0 74 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68  than a key in th
154f0 65 20 62 74 72 65 65 2c 20 72 65 73 70 65 63 74  e btree, respect
15500 69 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72  ively.  These ar
15510 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31  e normally.** -1
15520 20 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69   and +1 respecti
15530 76 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20  vely, but might 
15540 62 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b  be inverted to +
15550 31 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20  1 and -1 if the 
15560 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20  b-tree.** is in 
15570 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a  DESC order..**.*
15580 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72  * The key compar
15590 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61  ison functions a
155a0 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64  ctually return d
155b0 65 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74  efault_rc when t
155c0 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65  hey find.** an e
155d0 71 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e  quals comparison
155e0 2e 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61  .  default_rc ca
155f0 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b  n be -1, 0, or +
15600 31 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  1.  If there are
15610 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74  .** multiple ent
15620 72 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72  ries in the b-tr
15630 65 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ee with the same
15640 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20   key (when only 
15650 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68  looking.** at th
15660 65 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f  e first pKeyInfo
15670 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e  ->nFields,) then
15680 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20   default_rc can 
15690 62 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a  be set to -1 to.
156a0 2a 2a 20 63 61 75 73 65 20 74 68 65 20 73 65 61  ** cause the sea
156b0 72 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20  rch to find the 
156c0 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b  last match, or +
156d0 31 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 73  1 to cause the s
156e0 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64  earch to.** find
156f0 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68   the first match
15700 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20  ..**.** The key 
15710 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74  comparison funct
15720 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71  ions will set eq
15730 53 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20  Seen to true if 
15740 74 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74  they ever.** get
15750 20 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c   and equal resul
15760 74 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e  ts when comparin
15770 67 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  g this structure
15780 20 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63   to a b-tree rec
15790 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66  ord..** When def
157a0 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20  ault_rc!=0, the 
157b0 73 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64  search might end
157c0 20 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72   up on the recor
157d0 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a  d immediately.**
157e0 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73   before the firs
157f0 74 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64  t match or immed
15800 69 61 74 65 6c 79 20 61 66 74 65 72 20 74 68 65  iately after the
15810 20 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68   last match.  Th
15820 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c  e.** eqSeen fiel
15830 64 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20  d will indicate 
15840 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
15850 6e 20 65 78 61 63 74 20 6d 61 74 63 68 20 65 78  n exact match ex
15860 69 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62  ists in the.** b
15870 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  -tree..*/.struct
15880 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
15890 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  {.  KeyInfo *pKe
158a0 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61  yInfo;  /* Colla
158b0 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72  tion and sort-or
158c0 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  der information 
158d0 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20  */.  Mem *aMem; 
158e0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
158f0 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65  es */.  u16 nFie
15900 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ld;         /* N
15910 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
15920 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20   in apMem[] */. 
15930 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20   i8 default_rc; 
15940 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73       /* Comparis
15950 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79  on result if key
15960 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20  s are equal */. 
15970 20 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20   u8 errCode;    
15980 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65       /* Error de
15990 74 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72  tected by xRecor
159a0 64 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50  dCompare (CORRUP
159b0 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20  T or NOMEM) */. 
159c0 20 69 38 20 72 31 3b 20 20 20 20 20 20 20 20 20   i8 r1;         
159d0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
159e0 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20   return if (lhs 
159f0 3c 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72  < rhs) */.  i8 r
15a00 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
15a10 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
15a20 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73  rn if (lhs > rhs
15a30 29 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e  ) */.  u8 eqSeen
15a40 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
15a50 75 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74  ue if an equalit
15a60 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73  y comparison has
15a70 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b   been seen */.};
15a80 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
15a90 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65  L index is repre
15aa0 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
15ab0 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
15ac0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
15ad0 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
15ae0 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73  *.** The columns
15af0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
15b00 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64  at are to be ind
15b10 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62  exed are describ
15b20 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43  ed.** by the aiC
15b30 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66  olumn[] field of
15b40 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
15b50 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73    For example, s
15b60 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76  uppose.** we hav
15b70 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
15b80 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a  table and index:
15b90 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
15ba0 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69  E TABLE Ex1(c1 i
15bb0 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74  nt, c2 int, c3 t
15bc0 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45  ext);.**     CRE
15bd0 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e  ATE INDEX Ex2 ON
15be0 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a   Ex1(c3,c1);.**.
15bf0 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20  ** In the Table 
15c00 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
15c10 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d  bing Ex1, nCol==
15c20 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20  3 because there 
15c30 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c  are.** three col
15c40 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
15c50 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78  e.  In the Index
15c60 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
15c70 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43  ibing.** Ex2, nC
15c80 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32  olumn==2 since 2
15c90 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e   of the 3 column
15ca0 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64  s of Ex1 are ind
15cb0 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c  exed..** The val
15cc0 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69  ue of aiColumn i
15cd0 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c  s {2, 0}.  aiCol
15ce0 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73  umn[0]==2 becaus
15cf0 65 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63  e the.** first c
15d00 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
15d10 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20  xed (c3) has an 
15d20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78  index of 2 in Ex
15d30 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65  1.aCol[]..** The
15d40 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74   second column t
15d50 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31  o be indexed (c1
15d60 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
15d70 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43  f 0 in.** Ex1.aC
15d80 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e  ol[], hence Ex2.
15d90 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a  aiColumn[1]==0..
15da0 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e  **.** The Index.
15db0 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65  onError field de
15dc0 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72  termines whether
15dd0 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65   or not the inde
15de0 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d  xed columns.** m
15df0 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e  ust be unique an
15e00 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20  d what to do if 
15e10 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57  they are not.  W
15e20 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  hen Index.onErro
15e30 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74  r=OE_None,.** it
15e40 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e   means this is n
15e50 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  ot a unique inde
15e60 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74  x.  Otherwise it
15e70 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64   is a unique ind
15e80 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61  ex.** and the va
15e90 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45  lue of Index.onE
15ea0 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68  rror indicate th
15eb0 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74  e which conflict
15ec0 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61   resolution.** a
15ed0 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c  lgorithm to empl
15ee0 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61  oy whenever an a
15ef0 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
15f00 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75  o insert a non-u
15f10 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74  nique.** element
15f20 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61  ..**.** While pa
15f30 72 73 69 6e 67 20 61 20 43 52 45 41 54 45 20 54  rsing a CREATE T
15f40 41 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49  ABLE or CREATE I
15f50 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69  NDEX statement i
15f60 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65  n order to.** ge
15f70 6e 65 72 61 74 65 20 56 44 42 45 20 63 6f 64 65  nerate VDBE code
15f80 20 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20   (as opposed to 
15f90 70 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64  parsing one read
15fa0 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f   from an sqlite_
15fb0 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20  master.** table 
15fc0 61 73 20 70 61 72 74 20 6f 66 20 70 61 72 73 69  as part of parsi
15fd0 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  ng an existing d
15fe0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c  atabase schema),
15ff0 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61   transient insta
16000 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20  nces.** of this 
16010 73 74 72 75 63 74 75 72 65 20 6d 61 79 20 62 65  structure may be
16020 20 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69   created. In thi
16030 73 20 63 61 73 65 20 74 68 65 20 49 6e 64 65 78  s case the Index
16040 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69  .tnum variable i
16050 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f  s.** used to sto
16060 72 65 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  re the address o
16070 66 20 61 20 56 44 42 45 20 69 6e 73 74 72 75 63  f a VDBE instruc
16080 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61  tion, not a data
16090 62 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d  base page.** num
160a0 62 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d  ber (it cannot -
160b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61   the database pa
160c0 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61  ge is not alloca
160d0 74 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44  ted until the VD
160e0 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73  BE.** program is
160f0 20 65 78 65 63 75 74 65 64 29 2e 20 53 65 65 20   executed). See 
16100 63 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74  convertToWithout
16110 52 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72  RowidTable() for
16120 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72   details..*/.str
16130 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68  uct Index {.  ch
16140 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
16150 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
16160 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
16170 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b    i16 *aiColumn;
16180 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
16190 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  ich columns are 
161a0 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64  used by this ind
161b0 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f  ex.  1st is 0 */
161c0 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77  .  LogEst *aiRow
161d0 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46  LogEst;     /* F
161e0 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74  rom ANALYZE: Est
161f0 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20  . rows selected 
16200 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  by each column *
16210 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c  /.  Table *pTabl
16220 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
16230 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65  The SQL table be
16240 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20  ing indexed */. 
16250 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
16260 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72            /* Str
16270 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
16280 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
16290 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
162a0 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  dex *pNext;     
162b0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
162c0 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  xt index associa
162d0 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d  ted with the sam
162e0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68  e table */.  Sch
162f0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
16300 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
16310 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this 
16320 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61  index */.  u8 *a
16330 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
16340 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20      /* for each 
16350 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45  column: True==DE
16360 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a  SC, False==ASC *
16370 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
16380 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20  *azColl;     /* 
16390 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69  Array of collati
163a0 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65  on sequence name
163b0 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20  s for index */. 
163c0 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57   Expr *pPartIdxW
163d0 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45  here;     /* WHE
163e0 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61  RE clause for pa
163f0 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f  rtial indices */
16400 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f  .  ExprList *aCo
16410 6c 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43  lExpr;      /* C
16420 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
16430 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  s */.  int tnum;
16440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16450 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61  /* DB Page conta
16460 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
16470 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f  is index */.  Lo
16480 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20  gEst szIdxRow;  
16490 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
164a0 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20  ted average row 
164b0 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f  size in bytes */
164c0 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20  .  u16 nKeyCol; 
164d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
164e0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
164f0 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79   forming the key
16500 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d   */.  u16 nColum
16510 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
16520 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
16530 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  mns stored in th
16540 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  e index */.  u8 
16550 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20  onError;        
16560 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72        /* OE_Abor
16570 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45  t, OE_Ignore, OE
16580 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f  _Replace, or OE_
16590 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  None */.  unsign
165a0 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20  ed idxType:2;   
165b0 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c     /* 1==UNIQUE,
165c0 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c   2==PRIMARY KEY,
165d0 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58   0==CREATE INDEX
165e0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
165f0 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f  Unordered:1;   /
16600 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
16610 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
16620 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  eries only */.  
16630 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74  unsigned uniqNot
16640 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65  Null:1;  /* True
16650 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e   if UNIQUE and N
16660 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20  OT NULL for all 
16670 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73  columns */.  uns
16680 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a  igned isResized:
16690 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
166a0 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65   resizeIndexObje
166b0 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  ct() has been ca
166c0 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  lled */.  unsign
166d0 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b  ed isCovering:1;
166e0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
166f0 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67  is is a covering
16700 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69   index */.  unsi
16710 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a  gned noSkipScan:
16720 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74  1;   /* Do not t
16730 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73  ry to use skip-s
16740 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  can if true */. 
16750 20 75 6e 73 69 67 6e 65 64 20 68 61 73 53 74 61   unsigned hasSta
16760 74 31 3a 31 3b 20 20 20 20 20 2f 2a 20 61 69 52  t1:1;     /* aiR
16770 6f 77 4c 6f 67 45 73 74 20 76 61 6c 75 65 73 20  owLogEst values 
16780 63 6f 6d 65 20 66 72 6f 6d 20 73 71 6c 69 74 65  come from sqlite
16790 5f 73 74 61 74 31 20 2a 2f 0a 20 20 75 6e 73 69  _stat1 */.  unsi
167a0 67 6e 65 64 20 62 4e 6f 51 75 65 72 79 3a 31 3b  gned bNoQuery:1;
167b0 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 75       /* Do not u
167c0 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 74 6f  se this index to
167d0 20 6f 70 74 69 6d 69 7a 65 20 71 75 65 72 69 65   optimize querie
167e0 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  s */.#ifdef SQLI
167f0 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
16800 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e  OR_STAT4.  int n
16810 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20  Sample;         
16820 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16830 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61   elements in aSa
16840 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  mple[] */.  int 
16850 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20  nSampleCol;     
16860 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
16870 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71  IndexSample.anEq
16880 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a  [] and so on */.
16890 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45    tRowcnt *aAvgE
168a0 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76  q;         /* Av
168b0 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73  erage nEq values
168c0 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e   for keys not in
168d0 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e   aSample */.  In
168e0 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70  dexSample *aSamp
168f0 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65  le;    /* Sample
16900 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f  s of the left-mo
16910 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77  st key */.  tRow
16920 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20  cnt *aiRowEst;  
16930 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61       /* Non-loga
16940 72 69 74 68 6d 69 63 20 73 74 61 74 31 20 64 61  rithmic stat1 da
16950 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65  ta for this inde
16960 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e  x */.  tRowcnt n
16970 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20 20  RowEst0;        
16980 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d  /* Non-logarithm
16990 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  ic number of row
169a0 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
169b0 2f 0a 23 65 6e 64 69 66 0a 20 20 42 69 74 6d 61  /.#endif.  Bitma
169c0 73 6b 20 63 6f 6c 4e 6f 74 49 64 78 65 64 3b 20  sk colNotIdxed; 
169d0 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 75 6e 69      /* 0 for uni
169e0 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 20 69  ndexed columns i
169f0 6e 20 70 54 61 62 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  n pTab */.};../*
16a00 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
16a10 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78  es for Index.idx
16a20 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  Type.*/.#define 
16a30 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41  SQLITE_IDXTYPE_A
16a40 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20 2f  PPDEF      0   /
16a50 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67 20  * Created using 
16a60 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
16a70 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
16a80 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20  DXTYPE_UNIQUE   
16a90 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d     1   /* Implem
16aa0 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f  ents a UNIQUE co
16ab0 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
16ac0 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
16ad0 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32  PE_PRIMARYKEY  2
16ae0 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49     /* Is the PRI
16af0 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65  MARY KEY for the
16b00 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65   table */../* Re
16b10 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
16b20 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41 52  ex X is a PRIMAR
16b30 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23  Y KEY index */.#
16b40 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79  define IsPrimary
16b50 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28 58  KeyIndex(X)  ((X
16b60 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49  )->idxType==SQLI
16b70 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
16b80 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72  RYKEY)../* Retur
16b90 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
16ba0 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e  X is a UNIQUE in
16bb0 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
16bc0 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20  sUniqueIndex(X) 
16bd0 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72       ((X)->onErr
16be0 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a  or!=OE_None)../*
16bf0 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c   The Index.aiCol
16c00 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72 65  umn[] values are
16c10 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69   normally positi
16c20 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74  ve integer.  But
16c30 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73 6f  .** there are so
16c40 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75  me negative valu
16c50 65 73 20 74 68 61 74 20 68 61 76 65 20 73 70 65  es that have spe
16c60 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f  cial meaning:.*/
16c70 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49  .#define XN_ROWI
16c80 44 20 20 20 20 20 28 2d 31 29 20 20 20 20 20 2f  D     (-1)     /
16c90 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  * Indexed column
16ca0 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f   is the rowid */
16cb0 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50 52  .#define XN_EXPR
16cc0 20 20 20 20 20 20 28 2d 32 29 20 20 20 20 20 2f        (-2)     /
16cd0 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  * Indexed column
16ce0 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f   is an expressio
16cf0 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  n */../*.** Each
16d00 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69   sample stored i
16d10 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
16d20 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72  t3 table is repr
16d30 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
16d40 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72  y.** using a str
16d50 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74  ucture of this t
16d60 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65  ype.  See docume
16d70 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74  ntation at the t
16d80 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61  op of the.** ana
16d90 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69  lyze.c source fi
16da0 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  le for additiona
16db0 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
16dc0 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61  /.struct IndexSa
16dd0 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70  mple {.  void *p
16de0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  ;          /* Po
16df0 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64  inter to sampled
16e00 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
16e10 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   n;            /
16e20 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64  * Size of record
16e30 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74   in bytes */.  t
16e40 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20  Rowcnt *anEq;   
16e50 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
16e60 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68  of rows where th
16e70 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69  e key equals thi
16e80 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
16e90 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20  owcnt *anLt;    
16ea0 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
16eb0 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79  f rows where key
16ec0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
16ed0 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
16ee0 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20  Rowcnt *anDLt;  
16ef0 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
16f00 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73  of distinct keys
16f10 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
16f20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sample */.};../*
16f30 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63  .** Each token c
16f40 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65  oming out of the
16f50 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73   lexer is an ins
16f60 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73  tance of.** this
16f70 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b   structure.  Tok
16f80 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65  ens are also use
16f90 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
16fa0 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a  expression..**.*
16fb0 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 74 68 61  * The memory tha
16fc0 74 20 22 7a 22 20 70 6f 69 6e 74 73 20 74 6f 20  t "z" points to 
16fd0 69 73 20 6f 77 6e 65 64 20 62 79 20 6f 74 68 65  is owned by othe
16fe0 72 20 6f 62 6a 65 63 74 73 2e 20 20 54 61 6b 65  r objects.  Take
16ff0 20 63 61 72 65 0a 2a 2a 20 74 68 61 74 20 74 68   care.** that th
17000 65 20 6f 77 6e 65 72 20 6f 66 20 74 68 65 20 22  e owner of the "
17010 7a 22 20 73 74 72 69 6e 67 20 64 6f 65 73 20 6e  z" string does n
17020 6f 74 20 64 65 61 6c 6c 6f 63 61 74 65 20 74 68  ot deallocate th
17030 65 20 73 74 72 69 6e 67 20 62 65 66 6f 72 65 0a  e string before.
17040 2a 2a 20 74 68 65 20 54 6f 6b 65 6e 20 67 6f 65  ** the Token goe
17050 73 20 6f 75 74 20 6f 66 20 73 63 6f 70 65 21 20  s out of scope! 
17060 20 56 65 72 79 20 6f 66 74 65 6e 2c 20 74 68 65   Very often, the
17070 20 22 7a 22 20 70 6f 69 6e 74 73 20 74 6f 20 73   "z" points to s
17080 6f 6d 65 20 70 6c 61 63 65 0a 2a 2a 20 69 6e 20  ome place.** in 
17090 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 74 68  the middle of th
170a0 65 20 50 61 72 73 65 2e 7a 53 71 6c 20 74 65 78  e Parse.zSql tex
170b0 74 2e 20 20 42 75 74 20 69 74 20 6d 69 67 68 74  t.  But it might
170c0 20 61 6c 73 6f 20 70 6f 69 6e 74 20 74 6f 20 61   also point to a
170d0 0a 2a 2a 20 73 74 61 74 69 63 20 73 74 72 69 6e  .** static strin
170e0 67 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b  g..*/.struct Tok
170f0 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  en {.  const cha
17100 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78  r *z;     /* Tex
17110 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20  t of the token. 
17120 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e   Not NULL-termin
17130 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67  ated! */.  unsig
17140 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a  ned int n;    /*
17150 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61   Number of chara
17160 63 74 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f  cters in this to
17170 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ken */.};../*.**
17180 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
17190 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
171a0 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
171b0 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65  ion needed to ge
171c0 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66  nerate.** code f
171d0 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61 74  or a SELECT that
171e0 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   contains aggreg
171f0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  ate functions..*
17200 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d  *.** If Expr.op=
17210 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f  =TK_AGG_COLUMN o
17220 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  r TK_AGG_FUNCTIO
17230 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67  N then Expr.pAgg
17240 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69  Info is a.** poi
17250 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
17260 75 63 74 75 72 65 2e 20 20 54 68 65 20 45 78 70  ucture.  The Exp
17270 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20  r.iColumn field 
17280 69 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a  is the index in.
17290 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b  ** AggInfo.aCol[
172a0 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75  ] or AggInfo.aFu
172b0 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74  nc[] of informat
172c0 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65  ion needed to ge
172d0 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66  nerate.** code f
172e0 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a  or that node..**
172f0 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f  .** AggInfo.pGro
17300 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f  upBy and AggInfo
17310 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69  .aFunc.pExpr poi
17320 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74  nt to fields wit
17330 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69  hin the.** origi
17340 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63  nal Select struc
17350 74 75 72 65 20 74 68 61 74 20 64 65 73 63 72 69  ture that descri
17360 62 65 73 20 74 68 65 20 53 45 4c 45 43 54 20 73  bes the SELECT s
17370 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65  tatement.  These
17380 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f  .** fields do no
17390 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65  t need to be fre
173a0 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61  ed when dealloca
173b0 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f  ting the AggInfo
173c0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
173d0 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a  truct AggInfo {.
173e0 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b    u8 directMode;
173f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72            /* Dir
17400 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f  ect rendering mo
17410 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61  de means take da
17420 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20  ta directly.    
17430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17440 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f        ** from so
17450 75 72 63 65 20 74 61 62 6c 65 73 20 72 61 74 68  urce tables rath
17460 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63  er than from acc
17470 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75  umulators */.  u
17480 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b  8 useSortingIdx;
17490 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72         /* In dir
174a0 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65  ect mode, refere
174b0 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20  nce the sorting 
174c0 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20 20  index rather.   
174d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174e0 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74         ** than t
174f0 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
17500 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
17510 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Idx;         /* 
17520 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
17530 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
17540 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74  ex */.  int sort
17550 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20 20  ingIdxPTab;     
17560 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
17570 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65   of pseudo-table
17580 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69   */.  int nSorti
17590 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a  ngColumn;     /*
175a0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
175b0 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  ns in the sortin
175c0 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  g index */.  int
175d0 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20 20   mnReg, mxReg;  
175e0 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66       /* Range of
175f0 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63   registers alloc
17600 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e  ated for aCol an
17610 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70  d aFunc */.  Exp
17620 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
17630 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75       /* The grou
17640 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20  p by clause */. 
17650 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f   struct AggInfo_
17660 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20  col {    /* For 
17670 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64  each column used
17680 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65   in source table
17690 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  s */.    Table *
176a0 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
176b0 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c    /* Source tabl
176c0 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61  e */.    int iTa
176d0 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
176e0 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
176f0 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65  er of the source
17700 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
17710 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t iColumn;      
17720 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e         /* Column
17730 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74   number within t
17740 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
17750 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74  */.    int iSort
17760 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  erColumn;       
17770 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
17780 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
17790 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74  index */.    int
177a0 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   iMem;          
177b0 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
177c0 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63  location that ac
177d0 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f  ts as accumulato
177e0 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  r */.    Expr *p
177f0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
17800 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61    /* The origina
17810 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  l expression */.
17820 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74    } *aCol;.  int
17830 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   nColumn;       
17840 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17850 66 20 75 73 65 64 20 65 6e 74 72 69 65 73 20 69  f used entries i
17860 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e  n aCol[] */.  in
17870 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20  t nAccumulator; 
17880 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17890 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  of columns that 
178a0 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20  show through to 
178b0 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20  the output..    
178c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178d0 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f        ** Additio
178e0 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  nal columns are 
178f0 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72  used only as par
17900 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20  ameters to.     
17910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17920 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74       ** aggregat
17930 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  e functions */. 
17940 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f   struct AggInfo_
17950 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20  func {   /* For 
17960 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20 66  each aggregate f
17970 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45  unction */.    E
17980 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
17990 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
179a0 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74  ssion encoding t
179b0 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  he function */. 
179c0 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e     FuncDef *pFun
179d0 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  c;          /* T
179e0 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  he aggregate fun
179f0 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61  ction implementa
17a00 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
17a10 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  iMem;           
17a20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c       /* Memory l
17a30 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74  ocation that act
17a40 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72  s as accumulator
17a50 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73   */.    int iDis
17a60 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20  tinct;          
17a70 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61   /* Ephemeral ta
17a80 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f  ble used to enfo
17a90 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a  rce DISTINCT */.
17aa0 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e    } *aFunc;.  in
17ab0 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20  t nFunc;        
17ac0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17ad0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46  of entries in aF
17ae0 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  unc[] */.};../*.
17af0 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20  ** The datatype 
17b00 79 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e 65  ynVar is a signe
17b10 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65  d integer, eithe
17b20 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62  r 16-bit or 32-b
17b30 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69  it..** Usually i
17b40 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42  t is 16-bits.  B
17b50 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ut if SQLITE_MAX
17b60 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
17b70 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74   is greater.** t
17b80 68 61 6e 20 33 32 37 36 37 20 77 65 20 68 61 76  han 32767 we hav
17b90 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d  e to make it 32-
17ba0 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20  bit.  16-bit is 
17bb0 70 72 65 66 65 72 72 65 64 20 62 65 63 61 75 73  preferred becaus
17bc0 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73  e.** it uses les
17bd0 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20  s memory in the 
17be0 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69  Expr object, whi
17bf0 63 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f  ch is a big memo
17c00 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79  ry user.** in sy
17c10 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20  stems with lots 
17c20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74 61 74  of prepared stat
17c30 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77  ements.  And few
17c40 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a   applications.**
17c50 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20   need more than 
17c60 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76  about 10 or 20 v
17c70 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73  ariables.  But s
17c80 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65 72  ome extreme user
17c90 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76  s want.** to hav
17ca0 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
17cb0 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20  ments with over 
17cc0 33 32 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c  32767 variables,
17cd0 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a   and for them.**
17ce0 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61   the option is a
17cf0 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d  vailable (at com
17d00 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23  pile-time)..*/.#
17d10 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
17d20 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33  RIABLE_NUMBER<=3
17d30 32 37 36 37 0a 74 79 70 65 64 65 66 20 69 31 36  2767.typedef i16
17d40 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79   ynVar;.#else.ty
17d50 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b  pedef int ynVar;
17d60 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
17d70 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65  ach node of an e
17d80 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
17d90 20 70 61 72 73 65 20 74 72 65 65 20 69 73 20 61   parse tree is a
17da0 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
17db0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
17dc0 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69  .**.** Expr.op i
17dd0 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68  s the opcode. Th
17de0 65 20 69 6e 74 65 67 65 72 20 70 61 72 73 65 72  e integer parser
17df0 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65   token codes are
17e00 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70   reused.** as op
17e10 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20  codes here. For 
17e20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72  example, the par
17e30 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47  ser defines TK_G
17e40 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  E to be an integ
17e50 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65  er.** code repre
17e60 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22  senting the ">="
17e70 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20   operator. This 
17e80 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64  same integer cod
17e90 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74  e is reused.** t
17ea0 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65 20  o represent the 
17eb0 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d  greater-than-or-
17ec0 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f  equal-to operato
17ed0 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73  r in the express
17ee0 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a  ion.** tree..**.
17ef0 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
17f00 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c  sion is an SQL l
17f10 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47  iteral (TK_INTEG
17f20 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b  ER, TK_FLOAT, TK
17f30 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f  _BLOB,.** or TK_
17f40 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78  STRING), then Ex
17f50 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
17f60 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68  s the text of th
17f70 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49  e SQL literal. I
17f80 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73  f.** the express
17f90 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c  ion is a variabl
17fa0 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c  e (TK_VARIABLE),
17fb0 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
17fc0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a   contains the.**
17fd0 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20   variable name. 
17fe0 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20  Finally, if the 
17ff0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
18000 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54   SQL function (T
18010 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20  K_FUNCTION),.** 
18020 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
18030 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d  contains the nam
18040 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
18050 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52  n..**.** Expr.pR
18060 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c  ight and Expr.pL
18070 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66 74  eft are the left
18080 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65 78   and right subex
18090 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a  pressions of a.*
180a0 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  * binary operato
180b0 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74  r. Either or bot
180c0 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a  h may be NULL..*
180d0 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73  *.** Expr.x.pLis
180e0 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61  t is a list of a
180f0 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20  rguments if the 
18100 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
18110 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a   SQL function,.*
18120 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73 73  * a CASE express
18130 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70  ion or an IN exp
18140 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
18150 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c  orm "<lhs> IN (<
18160 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a  y>, <z>...)"..**
18170 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
18180 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20 65  is used if the e
18190 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
181a0 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20  ub-select or an 
181b0 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a  expression of.**
181c0 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
181d0 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29   IN (SELECT ...)
181e0 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49 73  ". If the EP_xIs
181f0 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73 65  Select bit is se
18200 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72  t in the.** Expr
18210 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
18220 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  n Expr.x.pSelect
18230 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72   is valid. Other
18240 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69  wise, Expr.x.pLi
18250 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a  st is.** valid..
18260 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73  **.** An express
18270 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
18280 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65  ID or ID.ID refe
18290 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69  rs to a column i
182a0 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f  n a table..** Fo
182b0 72 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f  r such expressio
182c0 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73  ns, Expr.op is s
182d0 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20  et to TK_COLUMN 
182e0 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20  and Expr.iTable 
182f0 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65  is.** the intege
18300 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  r cursor number 
18310 6f 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72  of a VDBE cursor
18320 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61   pointing to tha
18330 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45  t table and.** E
18340 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74  xpr.iColumn is t
18350 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  he column number
18360 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69   for the specifi
18370 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68  c column.  If th
18380 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  e.** expression 
18390 69 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73  is used as a res
183a0 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67  ult in an aggreg
183b0 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e  ate SELECT, then
183c0 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73   the.** value is
183d0 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20   also stored in 
183e0 74 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f  the Expr.iAgg co
183f0 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72  lumn in the aggr
18400 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a  egate so that.**
18410 20 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73   it can be acces
18420 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67  sed after all ag
18430 67 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d  gregates are com
18440 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  puted..**.** If 
18450 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
18460 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72  s an unbound var
18470 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20  iable marker (a 
18480 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a  question mark.**
18490 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69   character '?' i
184a0 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53  n the original S
184b0 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70  QL) then the Exp
184c0 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74  r.iTable holds t
184d0 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62  he index.** numb
184e0 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69  er for that vari
184f0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  able..**.** If t
18500 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
18510 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e   a subquery then
18520 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f   Expr.iColumn ho
18530 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  lds an integer.*
18540 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  * register numbe
18550 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  r containing the
18560 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73   result of the s
18570 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65  ubquery.  If the
18580 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76  .** subquery giv
18590 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65  es a constant re
185a0 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c  sult, then iTabl
185b0 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65  e is -1.  If the
185c0 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76   subquery.** giv
185d0 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61  es a different a
185e0 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65  nswer at differe
185f0 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20  nt times during 
18600 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73  statement proces
18610 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61  sing.** then iTa
18620 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65  ble is the addre
18630 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69  ss of a subrouti
18640 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73  ne that computes
18650 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a   the subquery..*
18660 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72  *.** If the Expr
18670 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43   is of type OP_C
18680 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74  olumn, and the t
18690 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63  able it is selec
186a0 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20  ting from.** is 
186b0 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20  a disk table or 
186c0 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75  the "old.*" pseu
186d0 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70  do-table, then p
186e0 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  Tab points to th
186f0 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
18700 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  ng table definit
18710 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43  ion..**.** ALLOC
18720 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a  ATION NOTES:.**.
18730 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ** Expr objects 
18740 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66  can use a lot of
18750 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e   memory space in
18760 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
18770 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65  .  To.** help re
18780 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75  duce memory requ
18790 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69  irements, someti
187a0 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  mes an Expr obje
187b0 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72  ct will be.** tr
187c0 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f  uncated.  And to
187d0 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62   reduce the numb
187e0 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c  er of memory all
187f0 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69  ocations, someti
18800 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f  mes.** two or mo
18810 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  re Expr objects 
18820 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69  will be stored i
18830 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72  n a single memor
18840 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a  y allocation,.**
18850 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45   together with E
18860 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e  xpr.zToken strin
18870 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  gs..**.** If the
18880 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20   EP_Reduced and 
18890 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
188a0 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a  gs are set when.
188b0 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  ** an Expr objec
188c0 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20  t is truncated. 
188d0 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64   When EP_Reduced
188e0 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c   is set, then al
188f0 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45  l.** the child E
18900 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74  xpr objects in t
18910 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e  he Expr.pLeft an
18920 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75  d Expr.pRight su
18930 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f  btrees.** are co
18940 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74  ntained within t
18950 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61  he same memory a
18960 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65  llocation.  Note
18970 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a  , however, that.
18980 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20  ** the subtrees 
18990 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  in Expr.x.pList 
189a0 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  or Expr.x.pSelec
189b0 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70  t are always sep
189c0 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  arately.** alloc
189d0 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73  ated, regardless
189e0 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
189f0 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  ot EP_Reduced is
18a00 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   set..*/.struct 
18a10 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Expr {.  u8 op; 
18a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a30 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72  /* Operation per
18a40 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e  formed by this n
18a50 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  ode */.  char af
18a60 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20  finity;         
18a70 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
18a80 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72  of the column or
18a90 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75   0 if not a colu
18aa0 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67  mn */.  u32 flag
18ab0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
18ac0 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e  * Various flags.
18ad0 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77    EP_* See below
18ae0 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
18af0 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20    char *zToken; 
18b00 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
18b10 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65  n value. Zero te
18b20 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71  rminated and deq
18b30 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  uoted */.    int
18b40 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20   iValue;        
18b50 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74      /* Non-negat
18b60 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  ive integer valu
18b70 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65  e if EP_IntValue
18b80 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a   */.  } u;..  /*
18b90 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e   If the EP_Token
18ba0 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74  Only flag is set
18bb0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
18bc0 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
18bd0 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
18be0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
18bf0 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
18c00 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
18c10 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
18c20 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
18c30 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
18c40 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
18c50 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
18c60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18c70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18c80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18c90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45  **********/..  E
18ca0 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20  xpr *pLeft;     
18cb0 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75        /* Left su
18cc0 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20  bnode */.  Expr 
18cd0 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20  *pRight;        
18ce0 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f    /* Right subno
18cf0 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  de */.  union {.
18d00 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c      ExprList *pL
18d10 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d  ist;     /* op =
18d20 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c   IN, EXISTS, SEL
18d30 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54  ECT, CASE, FUNCT
18d40 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a  ION, BETWEEN */.
18d50 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
18d60 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78  ect;     /* EP_x
18d70 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20  IsSelect and op 
18d80 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
18d90 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a  LECT */.  } x;..
18da0 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52    /* If the EP_R
18db0 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73  educed flag is s
18dc0 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
18dd0 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
18de0 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
18df0 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
18e00 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
18e10 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
18e20 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
18e30 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
18e40 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
18e50 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
18e60 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
18e70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18e80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18e90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18ea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23  ************/..#
18eb0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
18ec0 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
18ed0 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
18ee0 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66      /* Height of
18ef0 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65 64   the tree headed
18f00 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
18f10 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54  .#endif.  int iT
18f20 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
18f30 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
18f40 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
18f50 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f  table holding co
18f60 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
18f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
18f80 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65   TK_REGISTER: re
18f90 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20  gister number.  
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fb0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49         ** TK_TRI
18fc0 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20  GGER: 1 -> new, 
18fd0 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20  0 -> old.       
18fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ff0 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79    ** EP_Unlikely
19000 3a 20 20 31 33 34 32 31 37 37 32 38 20 74 69 6d  :  134217728 tim
19010 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20 20  es likelihood.  
19020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19030 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c         ** TK_SEL
19040 45 43 54 3a 20 31 73 74 20 72 65 67 69 73 74 65  ECT: 1st registe
19050 72 20 6f 66 20 72 65 73 75 6c 74 20 76 65 63 74  r of result vect
19060 6f 72 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43  or */.  ynVar iC
19070 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f  olumn;         /
19080 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c  * TK_COLUMN: col
19090 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66  umn index.  -1 f
190a0 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20  or rowid..      
190b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190c0 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c     ** TK_VARIABL
190d0 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62  E: variable numb
190e0 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29  er (always >= 1)
190f0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19100 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
19110 5f 53 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20  _SELECT_COLUMN: 
19120 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65  column of the re
19130 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20  sult vector */. 
19140 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20   i16 iAgg;      
19150 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
19160 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e   entry in pAggIn
19170 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e  fo->aCol[] or ->
19180 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36  aFunc[] */.  i16
19190 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65   iRightJoinTable
191a0 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f  ;   /* If EP_Fro
191b0 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74  mJoin, the right
191c0 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f   table of the jo
191d0 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20  in */.  u8 op2; 
191e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
191f0 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f  * TK_REGISTER: o
19200 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66  riginal value of
19210 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20   Expr.op.       
19220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19230 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    ** TK_COLUMN: 
19240 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20  the value of p5 
19250 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20  for OP_Column.  
19260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19270 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47         ** TK_AGG
19280 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69  _FUNCTION: nesti
19290 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67  ng depth */.  Ag
192a0 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
192b0 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20       /* Used by 
192c0 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e  TK_AGG_COLUMN an
192d0 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  d TK_AGG_FUNCTIO
192e0 4e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  N */.  union {. 
192f0 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
19300 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
19310 43 4f 4c 55 4d 4e 3a 20 54 61 62 6c 65 20 63 6f  COLUMN: Table co
19320 6e 74 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 2e  ntaining column.
19330 20 43 61 6e 20 62 65 20 4e 55 4c 4c 0a 20 20 20   Can be NULL.   
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19350 20 20 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 61          ** for a
19360 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 69 6e   column of an in
19370 64 65 78 20 6f 6e 20 61 6e 20 65 78 70 72 65 73  dex on an expres
19380 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 57 69 6e 64  sion */.    Wind
19390 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20 20 20 20  ow *pWin;       
193a0 20 20 20 2f 2a 20 54 4b 5f 46 55 4e 43 54 49 4f     /* TK_FUNCTIO
193b0 4e 3a 20 57 69 6e 64 6f 77 20 64 65 66 69 6e 69  N: Window defini
193c0 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 66 75 6e  tion for the fun
193d0 63 20 2a 2f 0a 20 20 7d 20 79 3b 0a 7d 3b 0a 0a  c */.  } y;.};..
193e0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
193f0 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e  ing are the mean
19400 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20  ings of bits in 
19410 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66  the Expr.flags f
19420 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
19430 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78   EP_FromJoin  0x
19440 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e  000001 /* Origin
19450 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47  ates in ON/USING
19460 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74 65 72   clause of outer
19470 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
19480 20 45 50 5f 41 67 67 20 20 20 20 20 20 20 30 78   EP_Agg       0x
19490 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69  000002 /* Contai
194a0 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  ns one or more a
194b0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
194c0 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ns */.#define EP
194d0 5f 48 61 73 46 75 6e 63 20 20 20 30 78 30 30 30  _HasFunc   0x000
194e0 30 30 34 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  004 /* Contains 
194f0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 75 6e 63  one or more func
19500 74 69 6f 6e 73 20 6f 66 20 61 6e 79 20 6b 69 6e  tions of any kin
19510 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  d */.#define EP_
19520 46 69 78 65 64 43 6f 6c 20 20 30 78 30 30 30 30  FixedCol  0x0000
19530 30 38 20 2f 2a 20 54 4b 5f 43 6f 6c 75 6d 6e 20  08 /* TK_Column 
19540 77 69 74 68 20 61 20 6b 6e 6f 77 6e 20 66 69 78  with a known fix
19550 65 64 20 76 61 6c 75 65 20 2a 2f 0a 23 64 65 66  ed value */.#def
19560 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20  ine EP_Distinct 
19570 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67 67   0x000010 /* Agg
19580 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
19590 77 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65  with DISTINCT ke
195a0 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65  yword */.#define
195b0 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78   EP_VarSelect 0x
195c0 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63  000020 /* pSelec
195d0 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c  t is correlated,
195e0 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f   not constant */
195f0 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51  .#define EP_DblQ
19600 75 6f 74 65 64 20 30 78 30 30 30 30 34 30 20 2f  uoted 0x000040 /
19610 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72  * token.z was or
19620 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e  iginally in "...
19630 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  " */.#define EP_
19640 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30 30  InfixFunc 0x0000
19650 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61  80 /* True for a
19660 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e  n infix function
19670 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74  : LIKE, GLOB, et
19680 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  c */.#define EP_
19690 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31  Collate   0x0001
196a0 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61  00 /* Tree conta
196b0 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45  ins a TK_COLLATE
196c0 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65   operator */.#de
196d0 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20  fine EP_Generic 
196e0 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67    0x000200 /* Ig
196f0 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20  nore COLLATE or 
19700 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73  affinity on this
19710 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65   tree */.#define
19720 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78   EP_IntValue  0x
19730 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65  000400 /* Intege
19740 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65  r value containe
19750 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f  d in u.iValue */
19760 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53  .#define EP_xIsS
19770 65 6c 65 63 74 20 30 78 30 30 30 38 30 30 20 2f  elect 0x000800 /
19780 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76  * x.pSelect is v
19790 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65 20  alid (otherwise 
197a0 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23  x.pList is) */.#
197b0 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20  define EP_Skip  
197c0 20 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20      0x001000 /* 
197d0 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20  COLLATE, AS, or 
197e0 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66  UNLIKELY */.#def
197f0 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20 20  ine EP_Reduced  
19800 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70   0x002000 /* Exp
19810 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 52 45  r struct EXPR_RE
19820 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20  DUCEDSIZE bytes 
19830 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
19840 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30  EP_TokenOnly 0x0
19850 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74  04000 /* Expr st
19860 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  ruct EXPR_TOKENO
19870 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e  NLYSIZE bytes on
19880 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ly */.#define EP
19890 5f 53 74 61 74 69 63 20 20 20 20 30 78 30 30 38  _Static    0x008
198a0 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d  000 /* Held in m
198b0 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e  emory not obtain
198c0 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ed from malloc()
198d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d   */.#define EP_M
198e0 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30  emToken  0x01000
198f0 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c  0 /* Need to sql
19900 69 74 65 33 44 62 46 72 65 65 28 29 20 45 78 70  ite3DbFree() Exp
19910 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66  r.zToken */.#def
19920 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20  ine EP_NoReduce 
19930 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e   0x020000 /* Can
19940 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44 55  not EXPRDUP_REDU
19950 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a  CE this Expr */.
19960 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b  #define EP_Unlik
19970 65 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a  ely  0x040000 /*
19980 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c   unlikely() or l
19990 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63  ikelihood() func
199a0 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
199b0 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78 30  EP_ConstFunc 0x0
199c0 38 30 30 30 30 20 2f 2a 20 41 20 53 51 4c 49 54  80000 /* A SQLIT
199d0 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
199e0 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63  or _SLOCHNG func
199f0 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
19a00 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31  EP_CanBeNull 0x1
19a10 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62 65 20  00000 /* Can be 
19a20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f 54  null despite NOT
19a30 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
19a40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
19a50 75 62 71 75 65 72 79 20 20 30 78 32 30 30 30 30  ubquery  0x20000
19a60 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69  0 /* Tree contai
19a70 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f  ns a TK_SELECT o
19a80 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69  perator */.#defi
19a90 6e 65 20 45 50 5f 41 6c 69 61 73 20 20 20 20 20  ne EP_Alias     
19aa0 30 78 34 30 30 30 30 30 20 2f 2a 20 49 73 20 61  0x400000 /* Is a
19ab0 6e 20 61 6c 69 61 73 20 66 6f 72 20 61 20 72 65  n alias for a re
19ac0 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20  sult set column 
19ad0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c 65  */.#define EP_Le
19ae0 61 66 20 20 20 20 20 20 30 78 38 30 30 30 30 30  af      0x800000
19af0 20 2f 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c 20   /* Expr.pLeft, 
19b00 2e 70 52 69 67 68 74 2c 20 2e 75 2e 70 53 65 6c  .pRight, .u.pSel
19b10 65 63 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a  ect all NULL */.
19b20 23 64 65 66 69 6e 65 20 45 50 5f 57 69 6e 46 75  #define EP_WinFu
19b30 6e 63 20 20 30 78 31 30 30 30 30 30 30 20 2f 2a  nc  0x1000000 /*
19b40 20 54 4b 5f 46 55 4e 43 54 49 4f 4e 20 77 69 74   TK_FUNCTION wit
19b50 68 20 45 78 70 72 2e 79 2e 70 57 69 6e 20 73 65  h Expr.y.pWin se
19b60 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  t */../*.** The 
19b70 45 50 5f 50 72 6f 70 61 67 61 74 65 20 6d 61 73  EP_Propagate mas
19b80 6b 20 69 73 20 61 20 73 65 74 20 6f 66 20 70 72  k is a set of pr
19b90 6f 70 65 72 74 69 65 73 20 74 68 61 74 20 61 75  operties that au
19ba0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 72 6f 70  tomatically prop
19bb0 61 67 61 74 65 0a 2a 2a 20 75 70 77 61 72 64 73  agate.** upwards
19bc0 20 69 6e 74 6f 20 70 61 72 65 6e 74 20 6e 6f 64   into parent nod
19bd0 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  es..*/.#define E
19be0 50 5f 50 72 6f 70 61 67 61 74 65 20 28 45 50 5f  P_Propagate (EP_
19bf0 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71 75  Collate|EP_Subqu
19c00 65 72 79 7c 45 50 5f 48 61 73 46 75 6e 63 29 0a  ery|EP_HasFunc).
19c10 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
19c20 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
19c30 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
19c40 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
19c50 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
19c60 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
19c70 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72  ne ExprHasProper
19c80 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45  ty(E,P)     (((E
19c90 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30  )->flags&(P))!=0
19ca0 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  ).#define ExprHa
19cb0 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50  sAllProperty(E,P
19cc0 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26  )  (((E)->flags&
19cd0 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
19ce0 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ne ExprSetProper
19cf0 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d  ty(E,P)     (E)-
19d00 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
19d10 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f  ine ExprClearPro
19d20 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29  perty(E,P)   (E)
19d30 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  ->flags&=~(P)../
19d40 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41  * The ExprSetVVA
19d50 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f  Property() macro
19d60 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72   is used for Ver
19d70 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64  ification, Valid
19d80 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63  ation,.** and Ac
19d90 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79  creditation only
19da0 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65  .  It works like
19db0 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79   ExprSetProperty
19dc0 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a  () during VVA.**
19dd0 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69   processes but i
19de0 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65  s a no-op for de
19df0 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  livery..*/.#ifde
19e00 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
19e10 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
19e20 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  VAProperty(E,P) 
19e30 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
19e40 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
19e50 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
19e60 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ty(E,P).#endif..
19e70 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
19e80 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75  determine the nu
19e90 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65  mber of bytes re
19ea0 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d  quired by a norm
19eb0 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72 75 63  al Expr.** struc
19ec0 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  t, an Expr struc
19ed0 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65  t with the EP_Re
19ee0 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69  duced flag set i
19ef0 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20  n Expr.flags.** 
19f00 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75  and an Expr stru
19f10 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54  ct with the EP_T
19f20 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65  okenOnly flag se
19f30 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  t..*/.#define EX
19f40 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20  PR_FULLSIZE     
19f50 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70        sizeof(Exp
19f60 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r)           /* 
19f70 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65  Full size */.#de
19f80 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45  fine EXPR_REDUCE
19f90 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66  DSIZE        off
19fa0 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c  setof(Expr,iTabl
19fb0 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65  e)  /* Common fe
19fc0 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e  atures */.#defin
19fd0 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  e EXPR_TOKENONLY
19fe0 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74  SIZE      offset
19ff0 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20  of(Expr,pLeft)  
1a000 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72   /* Fewer featur
1a010 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  es */../*.** Fla
1a020 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  gs passed to the
1a030 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
1a040 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20  ) function. See 
1a050 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65  the header comme
1a060 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  nt.** above sqli
1a070 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
1a080 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
1a090 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
1a0a0 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
1a0b0 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
1a0c0 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
1a0d0 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
1a0e0 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
1a0f0 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
1a100 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
1a110 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
1a120 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
1a130 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
1a140 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
1a150 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
1a160 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
1a170 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
1a180 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
1a190 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
1a1a0 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
1a1b0 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
1a1c0 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
1a1d0 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
1a1e0 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
1a1f0 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
1a200 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
1a210 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
1a220 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
1a230 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
1a240 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
1a250 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20   By default the 
1a260 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64  Expr.zSpan field
1a270 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72   holds a human-r
1a280 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
1a290 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78  ion of.** the ex
1a2a0 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
1a2b0 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
1a2c0 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72  eration of error
1a2d0 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a   messages and.**
1a2e0 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20   column labels. 
1a2f0 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45   In this case, E
1a300 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70  xpr.zSpan is typ
1a310 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20  ically the text 
1a320 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65  of a.** column e
1a330 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20  xpression as it 
1a340 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45  exists in a SELE
1a350 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48  CT statement.  H
1a360 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68  owever, if.** th
1a370 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61  e bSpanIsTab fla
1a380 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a  g is set, then z
1a390 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  Span is overload
1a3a0 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e  ed to mean the n
1a3b0 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65  ame.** of the re
1a3c0 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  sult column in t
1a3d0 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53  he form: DATABAS
1a3e0 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20  E.TABLE.COLUMN. 
1a3f0 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66   This later.** f
1a400 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20  orm is used for 
1a410 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
1a420 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d  with nested FROM
1a430 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72   clauses..*/.str
1a440 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20  uct ExprList {. 
1a450 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20   int nExpr;     
1a460 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1a470 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
1a480 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
1a490 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73    struct ExprLis
1a4a0 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20  t_item { /* For 
1a4b0 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
1a4c0 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  in the list */. 
1a4d0 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
1a4e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1a4f0 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72  e parse tree for
1a500 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e   this expression
1a510 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
1a520 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
1a530 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61  /* Token associa
1a540 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65 78  ted with this ex
1a550 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
1a560 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20  char *zSpan;    
1a570 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69          /* Origi
1a580 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20  nal text of the 
1a590 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
1a5a0 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20    u8 sortOrder; 
1a5b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66            /* 1 f
1a5c0 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72  or DESC or 0 for
1a5d0 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69   ASC */.    unsi
1a5e0 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20  gned done :1;   
1a5f0 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f      /* A flag to
1a600 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70   indicate when p
1a610 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e  rocessing is fin
1a620 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73  ished */.    uns
1a630 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62  igned bSpanIsTab
1a640 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f   :1; /* zSpan ho
1a650 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c  lds DB.TABLE.COL
1a660 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  UMN */.    unsig
1a670 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b  ned reusable :1;
1a680 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65     /* Constant e
1a690 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75  xpression is reu
1a6a0 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 73  sable */.    uns
1a6b0 69 67 6e 65 64 20 62 53 6f 72 74 65 72 52 65 66  igned bSorterRef
1a6c0 20 3a 31 3b 20 2f 2a 20 44 65 66 65 72 20 65 76   :1; /* Defer ev
1a6d0 61 6c 75 61 74 69 6f 6e 20 75 6e 74 69 6c 20 61  aluation until a
1a6e0 66 74 65 72 20 73 6f 72 74 69 6e 67 20 2a 2f 0a  fter sorting */.
1a6f0 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20      union {.    
1a700 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
1a710 20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43     u16 iOrderByC
1a720 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20  ol;      /* For 
1a730 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e  ORDER BY, column
1a740 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c   number in resul
1a750 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20  t set */.       
1a760 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20   u16 iAlias;    
1a770 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1a780 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61  into Parse.aAlia
1a790 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f  s[] for zName */
1a7a0 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20  .      } x;.    
1a7b0 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72    int iConstExpr
1a7c0 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67  Reg;      /* Reg
1a7d0 69 73 74 65 72 20 69 6e 20 77 68 69 63 68 20 45  ister in which E
1a7e0 78 70 72 20 76 61 6c 75 65 20 69 73 20 63 61 63  xpr value is cac
1a7f0 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a  hed */.    } u;.
1a800 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20    } a[1];       
1a810 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1a820 65 20 73 6c 6f 74 20 66 6f 72 20 65 61 63 68 20  e slot for each 
1a830 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
1a840 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
1a850 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1a860 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
1a870 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d  e can hold a sim
1a880 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e  ple list of iden
1a890 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68  tifiers,.** such
1a8a0 20 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c   as the list "a,
1a8b0 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c  b,c" in the foll
1a8c0 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73  owing statements
1a8d0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53  :.**.**      INS
1a8e0 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63  ERT INTO t(a,b,c
1a8f0 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a  ) VALUES ...;.**
1a900 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44        CREATE IND
1a910 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c  EX idx ON t(a,b,
1a920 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  c);.**      CREA
1a930 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20  TE TRIGGER trig 
1a940 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e  BEFORE UPDATE ON
1a950 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a   t(a,b,c) ...;.*
1a960 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e  *.** The IdList.
1a970 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75  a.idx field is u
1a980 73 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c  sed when the IdL
1a990 69 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  ist represents t
1a9a0 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f  he list of.** co
1a9b0 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72  lumn names after
1a9c0 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e   a table name in
1a9d0 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
1a9e0 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74  ment.  In the st
1a9f0 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20  atement.**.**   
1aa00 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28    INSERT INTO t(
1aa10 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a  a,b,c) ....**.**
1aa20 20 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b   If "a" is the k
1aa30 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61  -th column of ta
1aa40 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64  ble "t", then Id
1aa50 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b  List.a[0].idx==k
1aa60 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69  ..*/.struct IdLi
1aa70 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64  st {.  struct Id
1aa80 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20  List_item {.    
1aa90 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
1aaa0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
1aab0 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20   identifier */. 
1aac0 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20     int idx;     
1aad0 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
1aae0 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c   some Table.aCol
1aaf0 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e  [] of a column n
1ab00 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  amed zName */.  
1ab10 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b  } *a;.  int nId;
1ab20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1ab30 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72  er of identifier
1ab40 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
1ab50 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
1ab60 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1ab70 72 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65  re describes the
1ab80 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
1ab90 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
1aba0 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c  nt..** Each tabl
1abb0 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e  e or subquery in
1abc0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
1abd0 20 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65   is a separate e
1abe0 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65  lement of.** the
1abf0 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72   SrcList.a[] arr
1ac00 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74  ay..**.** With t
1ac10 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d  he addition of m
1ac20 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65  ultiple database
1ac30 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f   support, the fo
1ac40 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1ac50 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65  e.** can also be
1ac60 20 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62   used to describ
1ac70 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74  e a particular t
1ac80 61 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65  able such as the
1ac90 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69   table that.** i
1aca0 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e  s modified by an
1acb0 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c   INSERT, DELETE,
1acc0 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65   or UPDATE state
1acd0 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61  ment.  In standa
1ace0 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20  rd SQL,.** such 
1acf0 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20  a table must be 
1ad00 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49  a simple name: I
1ad10 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74  D.  But in SQLit
1ad20 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e  e, the table can
1ad30 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74  .** now be ident
1ad40 69 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62  ified by a datab
1ad50 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c  ase name, a dot,
1ad60 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
1ad70 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a  name: ID.ID..**.
1ad80 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20  ** The jointype 
1ad90 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69  starts out showi
1ada0 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65  ng the join type
1adb0 20 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72   between the cur
1adc0 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e  rent table.** an
1add0 64 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65  d the next table
1ade0 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54   on the list.  T
1adf0 68 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73  he parser builds
1ae00 20 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77   the list this w
1ae10 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74  ay..** But sqlit
1ae20 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f  e3SrcListShiftJo
1ae30 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73  inType() later s
1ae40 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79  hifts the jointy
1ae50 70 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68  pes so that each
1ae60 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70  .** jointype exp
1ae70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20  resses the join 
1ae80 62 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c  between the tabl
1ae90 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
1aea0 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  us table..**.** 
1aeb0 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66  In the colUsed f
1aec0 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f  ield, the high-o
1aed0 72 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33  rder bit (bit 63
1aee0 29 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20  ) is set if the 
1aef0 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e  table.** contain
1af00 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63  s more than 63 c
1af10 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36  olumns and the 6
1af20 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f  4-th or later co
1af30 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f  lumn is used..*/
1af40 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20  .struct SrcList 
1af50 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20  {.  int nSrc;   
1af60 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1af70 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71  f tables or subq
1af80 75 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52  ueries in the FR
1af90 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75  OM clause */.  u
1afa0 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  32 nAlloc;      
1afb0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
1afc0 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69  ries allocated i
1afd0 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20  n a[] below */. 
1afe0 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
1aff0 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d  item {.    Schem
1b000 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20  a *pSchema;  /* 
1b010 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20  Schema to which 
1b020 74 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78  this item is fix
1b030 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ed */.    char *
1b040 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e  zDatabase;  /* N
1b050 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ame of database 
1b060 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62  holding this tab
1b070 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
1b080 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  zName;      /* N
1b090 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1b0a0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41   */.    char *zA
1b0b0 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65  lias;     /* The
1b0c0 20 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22   "B" part of a "
1b0d0 41 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20  A AS B" phrase. 
1b0e0 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41   zName is the "A
1b0f0 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  " */.    Table *
1b100 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e  pTab;      /* An
1b110 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65   SQL table corre
1b120 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d  sponding to zNam
1b130 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  e */.    Select 
1b140 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20  *pSelect;  /* A 
1b150 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1b160 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f   used in place o
1b170 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a  f a table name *
1b180 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69  /.    int addrFi
1b190 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65  llSub;  /* Addre
1b1a0 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65  ss of subroutine
1b1b0 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73   to manifest a s
1b1c0 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69  ubquery */.    i
1b1d0 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20  nt regReturn;   
1b1e0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
1b1f0 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72  ding return addr
1b200 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53  ess of addrFillS
1b210 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  ub */.    int re
1b220 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52  gResult;    /* R
1b230 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67  egisters holding
1b240 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f   results of a co
1b250 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20  -routine */.    
1b260 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 75  struct {.      u
1b270 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20  8 jointype;     
1b280 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e   /* Type of join
1b290 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 74 61   between this ta
1b2a0 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
1b2b0 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ious */.      un
1b2c0 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65  signed notIndexe
1b2d0 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65  d :1;    /* True
1b2e0 20 69 66 20 74 68 65 72 65 20 69 73 20 61 20 4e   if there is a N
1b2f0 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73  OT INDEXED claus
1b300 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  e */.      unsig
1b310 6e 65 64 20 69 73 49 6e 64 65 78 65 64 42 79 20  ned isIndexedBy 
1b320 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66  :1;   /* True if
1b330 20 74 68 65 72 65 20 69 73 20 61 6e 20 49 4e 44   there is an IND
1b340 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 2a  EXED BY clause *
1b350 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
1b360 20 69 73 54 61 62 46 75 6e 63 20 3a 31 3b 20 20   isTabFunc :1;  
1b370 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 61     /* True if ta
1b380 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74  ble-valued-funct
1b390 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20  ion syntax */.  
1b3a0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43      unsigned isC
1b3b0 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f  orrelated :1;  /
1b3c0 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d 71 75  * True if sub-qu
1b3d0 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65  ery is correlate
1b3e0 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  d */.      unsig
1b3f0 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65  ned viaCoroutine
1b400 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65   :1;  /* Impleme
1b410 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75  nted as a co-rou
1b420 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  tine */.      un
1b430 73 69 67 6e 65 64 20 69 73 52 65 63 75 72 73 69  signed isRecursi
1b440 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  ve :1;   /* True
1b450 20 66 6f 72 20 72 65 63 75 72 73 69 76 65 20 72   for recursive r
1b460 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48  eference in WITH
1b470 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 20 20   */.    } fg;.  
1b480 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20    int iCursor;  
1b490 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
1b4a0 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73  cursor number us
1b4b0 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69  ed to access thi
1b4c0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45  s table */.    E
1b4d0 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20  xpr *pOn;       
1b4e0 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73   /* The ON claus
1b4f0 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
1b500 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e     IdList *pUsin
1b510 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e  g;   /* The USIN
1b520 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  G clause of a jo
1b530 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73  in */.    Bitmas
1b540 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42  k colUsed;  /* B
1b550 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20  it N (1<<N) set 
1b560 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70  if column N of p
1b570 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20  Tab is used */. 
1b580 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20     union {.     
1b590 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64 42   char *zIndexedB
1b5a0 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66  y;    /* Identif
1b5b0 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45  ier from "INDEXE
1b5c0 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63  D BY <zIndex>" c
1b5d0 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 45  lause */.      E
1b5e0 78 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41 72  xprList *pFuncAr
1b5f0 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73  g;  /* Arguments
1b600 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65 64   to table-valued
1b610 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20  -function */.   
1b620 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65 78   } u1;.    Index
1b630 20 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20   *pIBIndex;  /* 
1b640 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20  Index structure 
1b650 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
1b660 20 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a   u1.zIndexedBy *
1b670 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20  /.  } a[1];     
1b680 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
1b690 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64  ntry for each id
1b6a0 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20  entifier on the 
1b6b0 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
1b6c0 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75  * Permitted valu
1b6d0 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73  es of the SrcLis
1b6e0 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65  t.a.jointype fie
1b6f0 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  ld.*/.#define JT
1b700 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30  _INNER     0x000
1b710 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64  1    /* Any kind
1b720 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f   of inner or cro
1b730 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  ss join */.#defi
1b740 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20  ne JT_CROSS     
1b750 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70  0x0002    /* Exp
1b760 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65  licit use of the
1b770 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a   CROSS keyword *
1b780 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54  /.#define JT_NAT
1b790 55 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20  URAL   0x0004   
1b7a0 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22   /* True for a "
1b7b0 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f  natural" join */
1b7c0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54  .#define JT_LEFT
1b7d0 20 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20        0x0008    
1b7e0 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f  /* Left outer jo
1b7f0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
1b800 5f 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31  _RIGHT     0x001
1b810 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75  0    /* Right ou
1b820 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
1b830 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20  ine JT_OUTER    
1b840 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68   0x0020    /* Th
1b850 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72  e "OUTER" keywor
1b860 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a  d is present */.
1b870 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52  #define JT_ERROR
1b880 20 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f       0x0040    /
1b890 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73  * unknown or uns
1b8a0 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79  upported join ty
1b8b0 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c  pe */.../*.** Fl
1b8c0 61 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20  ags appropriate 
1b8d0 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61  for the wctrlFla
1b8e0 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20  gs parameter of 
1b8f0 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
1b900 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57  n().** and the W
1b910 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c  hereInfo.wctrlFl
1b920 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a  ags member..**.*
1b930 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
1b940 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69  nts (enforced vi
1b950 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20  a assert()):.** 
1b960 20 20 20 20 57 48 45 52 45 5f 55 53 45 5f 4c 49      WHERE_USE_LI
1b970 4d 49 54 20 20 3d 3d 20 53 46 5f 46 69 78 65 64  MIT  == SF_Fixed
1b980 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65 66 69 6e 65  Limit.*/.#define
1b990 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e   WHERE_ORDERBY_N
1b9a0 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f  ORMAL   0x0000 /
1b9b0 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69  * No-op */.#defi
1b9c0 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
1b9d0 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31  _MIN      0x0001
1b9e0 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
1b9f0 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28  cessing for min(
1ba00 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
1ba10 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
1ba20 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20  MAX      0x0002 
1ba30 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
1ba40 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29  essing for max()
1ba50 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
1ba60 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44   WHERE_ONEPASS_D
1ba70 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f  ESIRED  0x0004 /
1ba80 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65  * Want to do one
1ba90 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c  -pass UPDATE/DEL
1baa0 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ETE */.#define W
1bab0 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c  HERE_ONEPASS_MUL
1bac0 54 49 52 4f 57 20 30 78 30 30 30 38 20 2f 2a 20  TIROW 0x0008 /* 
1bad0 4f 4e 45 50 41 53 53 20 69 73 20 6f 6b 20 77 69  ONEPASS is ok wi
1bae0 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  th multiple rows
1baf0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1bb00 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20  E_DUPLICATES_OK 
1bb10 20 20 20 30 78 30 30 31 30 20 2f 2a 20 4f 6b 20     0x0010 /* Ok 
1bb20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20  to return a row 
1bb30 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a  more than once *
1bb40 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1bb50 4f 52 5f 53 55 42 43 4c 41 55 53 45 20 20 20 20  OR_SUBCLAUSE    
1bb60 20 30 78 30 30 32 30 20 2f 2a 20 50 72 6f 63 65   0x0020 /* Proce
1bb70 73 73 69 6e 67 20 61 20 73 75 62 2d 57 48 45 52  ssing a sub-WHER
1bb80 45 20 61 73 20 70 61 72 74 20 6f 66 0a 20 20 20  E as part of.   
1bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbb0 20 20 20 2a 2a 20 74 68 65 20 4f 52 20 6f 70 74     ** the OR opt
1bbc0 69 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23 64  imization  */.#d
1bbd0 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55  efine WHERE_GROU
1bbe0 50 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30  PBY          0x0
1bbf0 30 34 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20  040 /* pOrderBy 
1bc00 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55  is really a GROU
1bc10 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  P BY */.#define 
1bc20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59  WHERE_DISTINCTBY
1bc30 20 20 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a         0x0080 /*
1bc40 20 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61   pOrderby is rea
1bc50 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63  lly a DISTINCT c
1bc60 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
1bc70 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54   WHERE_WANT_DIST
1bc80 49 4e 43 54 20 20 20 20 30 78 30 31 30 30 20 2f  INCT    0x0100 /
1bc90 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65  * All output nee
1bca0 64 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63  ds to be distinc
1bcb0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
1bcc0 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20  RE_SORTBYGROUP  
1bcd0 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20 53 75      0x0200 /* Su
1bce0 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65  pport sqlite3Whe
1bcf0 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a  reIsSorted() */.
1bd00 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45  #define WHERE_SE
1bd10 45 4b 5f 54 41 42 4c 45 20 20 20 20 20 20 20 30  EK_TABLE       0
1bd20 78 30 34 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20  x0400 /* Do not 
1bd30 64 65 66 65 72 20 73 65 65 6b 73 20 6f 6e 20 6d  defer seeks on m
1bd40 61 69 6e 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ain table */.#de
1bd50 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
1bd60 42 59 5f 4c 49 4d 49 54 20 20 20 20 30 78 30 38  BY_LIMIT    0x08
1bd70 30 30 20 2f 2a 20 4f 52 44 45 52 42 59 2b 4c 49  00 /* ORDERBY+LI
1bd80 4d 49 54 20 6f 6e 20 74 68 65 20 69 6e 6e 65 72  MIT on the inner
1bd90 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65   loop */.#define
1bda0 20 57 48 45 52 45 5f 53 45 45 4b 5f 55 4e 49 51   WHERE_SEEK_UNIQ
1bdb0 5f 54 41 42 4c 45 20 20 30 78 31 30 30 30 20 2f  _TABLE  0x1000 /
1bdc0 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73  * Do not defer s
1bdd0 65 65 6b 73 20 69 66 20 75 6e 69 71 75 65 20 2a  eeks if unique *
1bde0 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
1bdf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20            /*    
1be00 20 30 78 32 30 30 30 20 20 20 20 6e 6f 74 20 63   0x2000    not c
1be10 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f  urrently used */
1be20 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 55  .#define WHERE_U
1be30 53 45 5f 4c 49 4d 49 54 20 20 20 20 20 20 20 20  SE_LIMIT        
1be40 30 78 34 30 30 30 20 2f 2a 20 55 73 65 20 74 68  0x4000 /* Use th
1be50 65 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73 74 20  e LIMIT in cost 
1be60 65 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20 20 20  estimates */.   
1be70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be80 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78 38 30       /*     0x80
1be90 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e  00    not curren
1bea0 74 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20  tly used */../* 
1beb0 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76  Allowed return v
1bec0 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74  alues from sqlit
1bed0 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63  e3WhereIsDistinc
1bee0 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  t().*/.#define W
1bef0 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f  HERE_DISTINCT_NO
1bf00 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49  OP      0  /* DI
1bf10 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e  STINCT keyword n
1bf20 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  ot used */.#defi
1bf30 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1bf40 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f  T_UNIQUE    1  /
1bf50 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20  * No duplicates 
1bf60 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1bf70 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45  _DISTINCT_ORDERE
1bf80 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75  D   2  /* All du
1bf90 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a  plicates are adj
1bfa0 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  acent */.#define
1bfb0 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1bfc0 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20  UNORDERED 3  /* 
1bfd0 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73  Duplicates are s
1bfe0 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a  cattered */../*.
1bff0 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ** A NameContext
1c000 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65   defines a conte
1c010 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72  xt in which to r
1c020 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64  esolve table and
1c030 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73   column.** names
1c040 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63  .  The context c
1c050 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73  onsists of a lis
1c060 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65  t of tables (the
1c070 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64   pSrcList) field
1c080 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f   and.** a list o
1c090 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  f named expressi
1c0a0 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68  on (pEList).  Th
1c0b0 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  e named expressi
1c0c0 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62  on list may.** b
1c0d0 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72  e NULL.  The pSr
1c0e0 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  c corresponds to
1c0f0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
1c100 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a   of a SELECT or.
1c110 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ** to the table 
1c120 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
1c130 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44  n by INSERT, UPD
1c140 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20  ATE, or DELETE. 
1c150 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63   The.** pEList c
1c160 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
1c170 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20  e result set of 
1c180 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20  a SELECT and is 
1c190 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65  NULL for.** othe
1c1a0 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  r statements..**
1c1b0 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73  .** NameContexts
1c1c0 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20   can be nested. 
1c1d0 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20   When resolving 
1c1e0 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72  names, the inner
1c1f0 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74  -most.** context
1c200 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72   is searched fir
1c210 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68  st.  If no match
1c220 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
1c230 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e  ext outer.** con
1c240 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e  text is checked.
1c250 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74    If there is st
1c260 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68  ill no match, th
1c270 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a  e next context.*
1c280 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54  * is checked.  T
1c290 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74  his process cont
1c2a0 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68  inues until eith
1c2b0 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f  er a match is fo
1c2c0 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f  und.** or all co
1c2d0 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b  ntexts are check
1c2e0 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20  .  When a match 
1c2f0 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52  is found, the nR
1c300 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20  ef member of.** 
1c310 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74  the context cont
1c320 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68  aining the match
1c330 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
1c340 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71  .**.** Each subq
1c350 75 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20  uery gets a new 
1c360 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68  NameContext.  Th
1c370 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f  e pNext field po
1c380 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e  ints to the.** N
1c390 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68  ameContext in th
1c3a0 65 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20  e parent query. 
1c3b0 20 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73   Thus the proces
1c3c0 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68  s of scanning th
1c3d0 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
1c3e0 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64   list correspond
1c3f0 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74  s to searching t
1c400 68 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76  hrough successiv
1c410 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62  ely outer.** sub
1c420 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20  queries looking 
1c430 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a  for a match..*/.
1c440 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65  struct NameConte
1c450 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  xt {.  Parse *pP
1c460 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  arse;       /* T
1c470 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53  he parser */.  S
1c480 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
1c490 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f  ;   /* One or mo
1c4a0 72 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74  re tables used t
1c4b0 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20  o resolve names 
1c4c0 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
1c4d0 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
1c4e0 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61  t;    /* Optiona
1c4f0 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74  l list of result
1c500 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  -set columns */.
1c510 20 20 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67      AggInfo *pAg
1c520 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f  gInfo;   /* Info
1c530 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67  rmation about ag
1c540 67 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73  gregates at this
1c550 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 55 70   level */.    Up
1c560 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b 20 20  sert *pUpsert;  
1c570 20 20 20 2f 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43     /* ON CONFLIC
1c580 54 20 63 6c 61 75 73 65 20 69 6e 66 6f 72 6d 61  T clause informa
1c590 74 69 6f 6e 20 66 72 6f 6d 20 61 6e 20 75 70 73  tion from an ups
1c5a0 65 72 74 20 2a 2f 0a 20 20 7d 20 75 4e 43 3b 0a  ert */.  } uNC;.
1c5b0 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
1c5c0 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  Next;  /* Next o
1c5d0 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78  uter name contex
1c5e0 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74  t.  NULL for out
1c5f0 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20  ermost */.  int 
1c600 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
1c610 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61   /* Number of na
1c620 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20  mes resolved by 
1c630 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  this context */.
1c640 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
1c650 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c660 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75   of errors encou
1c670 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73  ntered while res
1c680 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a  olving names */.
1c690 20 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20    u16 ncFlags;  
1c6a0 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f         /* Zero o
1c6b0 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67  r more NC_* flag
1c6c0 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  s defined below 
1c6d0 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 57 69  */.  Select *pWi
1c6e0 6e 53 65 6c 65 63 74 3b 20 20 2f 2a 20 53 45 4c  nSelect;  /* SEL
1c6f0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 66 6f  ECT statement fo
1c700 72 20 61 6e 79 20 77 69 6e 64 6f 77 20 66 75 6e  r any window fun
1c710 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ctions */.};../*
1c720 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
1c730 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43  es for the NameC
1c740 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20  ontext, ncFlags 
1c750 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c  field..**.** Val
1c760 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
1c770 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20  all checked via 
1c780 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
1c790 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 3d 3d   NC_HasAgg    ==
1c7a0 20 53 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20   SF_HasAgg.**   
1c7b0 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d   NC_MinMaxAgg ==
1c7c0 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d   SF_MinMaxAgg ==
1c7d0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
1c7e0 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e  MAX.**.*/.#defin
1c7f0 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30  e NC_AllowAgg  0
1c800 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67  x0001  /* Aggreg
1c810 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ate functions ar
1c820 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a  e allowed here *
1c830 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72  /.#define NC_Par
1c840 74 49 64 78 20 20 20 30 78 30 30 30 32 20 20 2f  tIdx   0x0002  /
1c850 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
1c860 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e  ing a partial in
1c870 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65  dex WHERE */.#de
1c880 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20  fine NC_IsCheck 
1c890 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75    0x0004  /* Tru
1c8a0 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e  e if resolving n
1c8b0 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20  ames in a CHECK 
1c8c0 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
1c8d0 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75  efine NC_InAggFu
1c8e0 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72  nc 0x0008  /* Tr
1c8f0 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20  ue if analyzing 
1c900 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20  arguments to an 
1c910 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  agg func */.#def
1c920 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20  ine NC_HasAgg   
1c930 20 30 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20   0x0010  /* One 
1c940 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
1c950 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e  e functions seen
1c960 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
1c970 64 78 45 78 70 72 20 20 20 30 78 30 30 32 30 20  dxExpr   0x0020 
1c980 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
1c990 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66  lving columns of
1c9a0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f   CREATE INDEX */
1c9b0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 56 61 72 53  .#define NC_VarS
1c9c0 65 6c 65 63 74 20 30 78 30 30 34 30 20 20 2f 2a  elect 0x0040  /*
1c9d0 20 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75   A correlated su
1c9e0 62 71 75 65 72 79 20 68 61 73 20 62 65 65 6e 20  bquery has been 
1c9f0 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
1ca00 4e 43 5f 55 45 4c 69 73 74 20 20 20 20 30 78 30  NC_UEList    0x0
1ca10 30 38 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  080  /* True if 
1ca20 75 4e 43 2e 70 45 4c 69 73 74 20 69 73 20 75 73  uNC.pEList is us
1ca30 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  ed */.#define NC
1ca40 5f 55 41 67 67 49 6e 66 6f 20 20 30 78 30 31 30  _UAggInfo  0x010
1ca50 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e  0  /* True if uN
1ca60 43 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 75 73  C.pAggInfo is us
1ca70 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  ed */.#define NC
1ca80 5f 55 55 70 73 65 72 74 20 20 20 30 78 30 32 30  _UUpsert   0x020
1ca90 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e  0  /* True if uN
1caa0 43 2e 70 55 70 73 65 72 74 20 69 73 20 75 73 65  C.pUpsert is use
1cab0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  d */.#define NC_
1cac0 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30  MinMaxAgg 0x1000
1cad0 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67    /* min/max agg
1cae0 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53  regates seen.  S
1caf0 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f  ee note above */
1cb00 0a 23 64 65 66 69 6e 65 20 4e 43 5f 43 6f 6d 70  .#define NC_Comp
1cb10 6c 65 78 20 20 20 30 78 32 30 30 30 20 20 2f 2a  lex   0x2000  /*
1cb20 20 54 72 75 65 20 69 66 20 61 20 66 75 6e 63 74   True if a funct
1cb30 69 6f 6e 20 6f 72 20 73 75 62 71 75 65 72 79 20  ion or subquery 
1cb40 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
1cb50 4e 43 5f 41 6c 6c 6f 77 57 69 6e 20 20 30 78 34  NC_AllowWin  0x4
1cb60 30 30 30 20 20 2f 2a 20 57 69 6e 64 6f 77 20 66  000  /* Window f
1cb70 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c  unctions are all
1cb80 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 0a 2f 2a  owed here */../*
1cb90 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1cba0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1cbb0 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65   object describe
1cbc0 73 20 61 20 73 69 6e 67 6c 65 20 4f 4e 20 43 4f  s a single ON CO
1cbd0 4e 46 4c 49 43 54 0a 2a 2a 20 63 6c 61 75 73 65  NFLICT.** clause
1cbe0 20 69 6e 20 61 6e 20 75 70 73 65 72 74 2e 0a 2a   in an upsert..*
1cbf0 2a 0a 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74  *.** The pUpsert
1cc00 54 61 72 67 65 74 20 66 69 65 6c 64 20 69 73 20  Target field is 
1cc10 6f 6e 6c 79 20 73 65 74 20 69 66 20 74 68 65 20  only set if the 
1cc20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
1cc30 73 65 20 69 6e 63 6c 75 64 65 73 0a 2a 2a 20 63  se includes.** c
1cc40 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20 63  onflict-target c
1cc50 6c 61 75 73 65 2e 20 20 28 49 6e 20 22 4f 4e 20  lause.  (In "ON 
1cc60 43 4f 4e 46 4c 49 43 54 28 61 2c 62 29 22 20 74  CONFLICT(a,b)" t
1cc70 68 65 20 22 28 61 2c 62 29 22 20 69 73 20 74 68  he "(a,b)" is th
1cc80 65 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61  e.** conflict-ta
1cc90 72 67 65 74 20 63 6c 61 75 73 65 2e 29 20 20 54  rget clause.)  T
1cca0 68 65 20 70 55 70 73 65 72 74 54 61 72 67 65 74  he pUpsertTarget
1ccb0 57 68 65 72 65 20 69 73 20 74 68 65 20 6f 70 74  Where is the opt
1ccc0 69 6f 6e 61 6c 0a 2a 2a 20 57 48 45 52 45 20 63  ional.** WHERE c
1ccd0 6c 61 75 73 65 20 75 73 65 64 20 74 6f 20 69 64  lause used to id
1cce0 65 6e 74 69 66 79 20 70 61 72 74 69 61 6c 20 75  entify partial u
1ccf0 6e 69 71 75 65 20 69 6e 64 65 78 65 73 2e 0a 2a  nique indexes..*
1cd00 2a 0a 2a 2a 20 70 55 70 73 65 72 74 53 65 74 20  *.** pUpsertSet 
1cd10 69 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 63  is the list of c
1cd20 6f 6c 75 6d 6e 3d 65 78 70 72 20 74 65 72 6d 73  olumn=expr terms
1cd30 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
1cd40 74 61 74 65 6d 65 6e 74 2e 20 0a 2a 2a 20 54 68  tatement. .** Th
1cd50 65 20 70 55 70 73 65 72 74 53 65 74 20 66 69 65  e pUpsertSet fie
1cd60 6c 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20 61  ld is NULL for a
1cd70 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 44 4f 20   ON CONFLICT DO 
1cd80 4e 4f 54 48 49 4e 47 2e 20 20 54 68 65 0a 2a 2a  NOTHING.  The.**
1cd90 20 70 55 70 73 65 72 74 57 68 65 72 65 20 69 73   pUpsertWhere is
1cda0 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
1cdb0 65 20 66 6f 72 20 74 68 65 20 55 50 44 41 54 45  e for the UPDATE
1cdc0 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 69 66 20   and is NULL if 
1cdd0 74 68 65 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61  the.** WHERE cla
1cde0 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a  use is omitted..
1cdf0 2a 2f 0a 73 74 72 75 63 74 20 55 70 73 65 72 74  */.struct Upsert
1ce00 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70   {.  ExprList *p
1ce10 55 70 73 65 72 74 54 61 72 67 65 74 3b 20 20 2f  UpsertTarget;  /
1ce20 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 65 73 63 72  * Optional descr
1ce30 69 70 74 69 6f 6e 20 6f 66 20 63 6f 6e 66 6c 69  iption of confli
1ce40 63 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  cting index */. 
1ce50 20 45 78 70 72 20 2a 70 55 70 73 65 72 74 54 61   Expr *pUpsertTa
1ce60 72 67 65 74 57 68 65 72 65 3b 20 2f 2a 20 57 48  rgetWhere; /* WH
1ce70 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70  ERE clause for p
1ce80 61 72 74 69 61 6c 20 69 6e 64 65 78 20 74 61 72  artial index tar
1ce90 67 65 74 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  gets */.  ExprLi
1cea0 73 74 20 2a 70 55 70 73 65 72 74 53 65 74 3b 20  st *pUpsertSet; 
1ceb0 20 20 20 20 2f 2a 20 54 68 65 20 53 45 54 20 63      /* The SET c
1cec0 6c 61 75 73 65 20 66 72 6f 6d 20 61 6e 20 4f 4e  lause from an ON
1ced0 20 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45   CONFLICT UPDATE
1cee0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70 73   */.  Expr *pUps
1cef0 65 72 74 57 68 65 72 65 3b 20 20 20 20 20 20 20  ertWhere;       
1cf00 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
1cf10 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  for the ON CONFL
1cf20 49 43 54 20 55 50 44 41 54 45 20 2a 2f 0a 20 20  ICT UPDATE */.  
1cf30 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 61 62  /* The fields ab
1cf40 6f 76 65 20 63 6f 6d 70 72 69 73 65 20 74 68 65  ove comprise the
1cf50 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20   parse tree for 
1cf60 74 68 65 20 75 70 73 65 72 74 20 63 6c 61 75 73  the upsert claus
1cf70 65 2e 0a 20 20 2a 2a 20 54 68 65 20 66 69 65 6c  e..  ** The fiel
1cf80 64 73 20 62 65 6c 6f 77 20 61 72 65 20 75 73 65  ds below are use
1cf90 64 20 74 6f 20 74 72 61 6e 73 66 65 72 20 69 6e  d to transfer in
1cfa0 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74  formation from t
1cfb0 68 65 20 49 4e 53 45 52 54 0a 20 20 2a 2a 20 70  he INSERT.  ** p
1cfc0 72 6f 63 65 73 73 69 6e 67 20 64 6f 77 6e 20 69  rocessing down i
1cfd0 6e 74 6f 20 74 68 65 20 55 50 44 41 54 45 20 70  nto the UPDATE p
1cfe0 72 6f 63 65 73 73 69 6e 67 20 77 68 69 6c 65 20  rocessing while 
1cff0 67 65 6e 65 72 61 74 69 6e 67 20 63 6f 64 65 2e  generating code.
1d000 0a 20 20 2a 2a 20 55 70 73 65 72 74 20 6f 77 6e  .  ** Upsert own
1d010 73 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  s the memory all
1d020 6f 63 61 74 65 64 20 61 62 6f 76 65 2c 20 62 75  ocated above, bu
1d030 74 20 6e 6f 74 20 74 68 65 20 6d 65 6d 6f 72 79  t not the memory
1d040 20 62 65 6c 6f 77 2e 20 2a 2f 0a 20 20 49 6e 64   below. */.  Ind
1d050 65 78 20 2a 70 55 70 73 65 72 74 49 64 78 3b 20  ex *pUpsertIdx; 
1d060 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 73 74 72         /* Constr
1d070 61 69 6e 74 20 74 68 61 74 20 70 55 70 73 65 72  aint that pUpser
1d080 74 54 61 72 67 65 74 20 69 64 65 6e 74 69 66 69  tTarget identifi
1d090 65 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  es */.  SrcList 
1d0a0 2a 70 55 70 73 65 72 74 53 72 63 3b 20 20 20 20  *pUpsertSrc;    
1d0b0 20 20 2f 2a 20 54 61 62 6c 65 20 74 6f 20 62 65    /* Table to be
1d0c0 20 75 70 64 61 74 65 64 20 2a 2f 0a 20 20 69 6e   updated */.  in
1d0d0 74 20 72 65 67 44 61 74 61 3b 20 20 20 20 20 20  t regData;      
1d0e0 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
1d0f0 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   register holdin
1d100 67 20 61 72 72 61 79 20 6f 66 20 56 41 4c 55 45  g array of VALUE
1d110 53 20 2a 2f 0a 20 20 69 6e 74 20 69 44 61 74 61  S */.  int iData
1d120 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cur;            
1d130 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1d140 20 64 61 74 61 20 63 75 72 73 6f 72 20 2a 2f 0a   data cursor */.
1d150 20 20 69 6e 74 20 69 49 64 78 43 75 72 3b 20 20    int iIdxCur;  
1d160 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1d170 6e 64 65 78 20 6f 66 20 74 68 65 20 66 69 72 73  ndex of the firs
1d180 74 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a  t index cursor *
1d190 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
1d1a0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1d1b0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1d1c0 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20  re contains all 
1d1d0 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e  information.** n
1d1e0 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
1d1f0 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e  e code for a sin
1d200 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  gle SELECT state
1d210 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ment..**.** See 
1d220 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65  the header comme
1d230 6e 74 20 6f 6e 20 74 68 65 20 63 6f 6d 70 75 74  nt on the comput
1d240 65 4c 69 6d 69 74 52 65 67 69 73 74 65 72 73 28  eLimitRegisters(
1d250 29 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 61 0a  ) routine for a.
1d260 2a 2a 20 64 65 74 61 69 6c 65 64 20 64 65 73 63  ** detailed desc
1d270 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d  ription of the m
1d280 65 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 69 4c  eaning of the iL
1d290 69 6d 69 74 20 61 6e 64 20 69 4f 66 66 73 65 74  imit and iOffset
1d2a0 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 61   fields..**.** a
1d2b0 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e  ddrOpenEphm[] en
1d2c0 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68  tries contain th
1d2d0 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f  e address of OP_
1d2e0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
1d2f0 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20  codes..** These 
1d300 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20 62  addresses must b
1d310 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74  e stored so that
1d320 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20   we can go back 
1d330 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74  and fill in.** t
1d340 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e  he P4_KEYINFO an
1d350 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73 20  d P2 parameters 
1d360 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20  later.  Neither 
1d370 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a  the KeyInfo nor.
1d380 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
1d390 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63   columns in P2 c
1d3a0 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61  an be computed a
1d3b0 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a  t the same time.
1d3c0 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65  ** as the OP_Ope
1d3d0 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f  nEphm instructio
1d3e0 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61 75  n is coded becau
1d3f0 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68  se not.** enough
1d400 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
1d410 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  ut the compound 
1d420 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61  query is known a
1d430 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a  t that point..**
1d440 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72   The KeyInfo for
1d450 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d   addrOpenTran[0]
1d460 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e   and [1] contain
1d470 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  s collating sequ
1d480 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65  ences.** for the
1d490 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68   result set.  Th
1d4a0 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
1d4b0 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f  drOpenEphm[2] co
1d4c0 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
1d4d0 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f  .** sequences fo
1d4e0 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  r the ORDER BY c
1d4f0 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  lause..*/.struct
1d500 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72   Select {.  Expr
1d510 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20  List *pEList;   
1d520 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73     /* The fields
1d530 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a   of the result *
1d540 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  /.  u8 op;      
1d550 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1d560 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54  e of: TK_UNION T
1d570 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45  K_ALL TK_INTERSE
1d580 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a  CT TK_EXCEPT */.
1d590 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63 74    LogEst nSelect
1d5a0 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69  Row;     /* Esti
1d5b0 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  mated number of 
1d5c0 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20  result rows */. 
1d5d0 20 75 33 32 20 73 65 6c 46 6c 61 67 73 3b 20 20   u32 selFlags;  
1d5e0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f          /* Vario
1d5f0 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a  us SF_* values *
1d600 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20  /.  int iLimit, 
1d610 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65  iOffset;   /* Me
1d620 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 68  mory registers h
1d630 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f  olding LIMIT & O
1d640 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a  FFSET counters *
1d650 2f 0a 20 20 75 33 32 20 73 65 6c 49 64 3b 20 20  /.  u32 selId;  
1d660 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 6e             /* Un
1d670 69 71 75 65 20 69 64 65 6e 74 69 66 69 65 72 20  ique identifier 
1d680 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20  number for this 
1d690 53 45 4c 45 43 54 20 2a 2f 0a 20 20 69 6e 74 20  SELECT */.  int 
1d6a0 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b  addrOpenEphm[2];
1d6b0 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68     /* OP_OpenEph
1d6c0 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74  em opcodes relat
1d6d0 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
1d6e0 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  t */.  SrcList *
1d6f0 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  pSrc;         /*
1d700 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   The FROM clause
1d710 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1d720 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  re;          /* 
1d730 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1d740 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1d750 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20  pGroupBy;    /* 
1d760 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  The GROUP BY cla
1d770 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
1d780 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20  Having;         
1d790 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c  /* The HAVING cl
1d7a0 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
1d7b0 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20  st *pOrderBy;   
1d7c0 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59   /* The ORDER BY
1d7d0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c   clause */.  Sel
1d7e0 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20  ect *pPrior;    
1d7f0 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c      /* Prior sel
1d800 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  ect in a compoun
1d810 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  d select stateme
1d820 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  nt */.  Select *
1d830 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
1d840 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f  * Next select to
1d850 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63   the left in a c
1d860 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70  ompound */.  Exp
1d870 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20  r *pLimit;      
1d880 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70      /* LIMIT exp
1d890 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
1d8a0 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
1d8b0 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
1d8c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54            /* WIT
1d8d0 48 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65  H clause attache
1d8e0 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
1d8f0 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 23 69  . Or NULL. */.#i
1d900 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1d910 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 57  T_WINDOWFUNC.  W
1d920 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20  indow *pWin;    
1d930 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
1d940 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
1d950 73 20 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 70  s */.  Window *p
1d960 57 69 6e 44 65 66 6e 3b 20 20 20 20 20 20 2f 2a  WinDefn;      /*
1d970 20 4c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 77   List of named w
1d980 69 6e 64 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e  indow definition
1d990 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a  s */.#endif.};..
1d9a0 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
1d9b0 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e  lues for Select.
1d9c0 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22  selFlags.  The "
1d9d0 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64  SF" prefix stand
1d9e0 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74  s for.** "Select
1d9f0 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61   Flag"..**.** Va
1da00 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
1da10 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61  (all checked via
1da20 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20 20   assert()).**   
1da30 20 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20    SF_HasAgg     
1da40 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a 20  == NC_HasAgg.** 
1da50 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67      SF_MinMaxAgg
1da60 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41 67    == NC_MinMaxAg
1da70 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f  g     == SQLITE_
1da80 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20  FUNC_MINMAX.**  
1da90 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74     SF_FixedLimit
1daa0 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c 49   == WHERE_USE_LI
1dab0 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  MIT.*/.#define S
1dac0 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20  F_Distinct      
1dad0 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75 74   0x00001  /* Out
1dae0 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49  put should be DI
1daf0 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e  STINCT */.#defin
1db00 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20  e SF_All        
1db10 20 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a 20      0x00002  /* 
1db20 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c  Includes the ALL
1db30 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
1db40 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20  ine SF_Resolved 
1db50 20 20 20 20 20 20 30 78 30 30 30 30 34 20 20 2f        0x00004  /
1db60 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61  * Identifiers ha
1db70 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64  ve been resolved
1db80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
1db90 67 67 72 65 67 61 74 65 20 20 20 20 20 20 30 78  ggregate      0x
1dba0 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69  00008  /* Contai
1dbb0 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e 73  ns agg functions
1dbc0 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20 2a   or a GROUP BY *
1dbd0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73  /.#define SF_Has
1dbe0 41 67 67 20 20 20 20 20 20 20 20 20 30 78 30 30  Agg         0x00
1dbf0 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  010  /* Contains
1dc00 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1dc10 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
1dc20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c  SF_UsesEphemeral
1dc30 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55 73    0x00020  /* Us
1dc40 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d  es the OpenEphem
1dc50 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  eral opcode */.#
1dc60 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64  define SF_Expand
1dc70 65 64 20 20 20 20 20 20 20 30 78 30 30 30 34 30  ed       0x00040
1dc80 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65    /* sqlite3Sele
1dc90 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65  ctExpand() calle
1dca0 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65  d on this */.#de
1dcb0 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49  fine SF_HasTypeI
1dcc0 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30 20 20  nfo    0x00080  
1dcd0 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69  /* FROM subqueri
1dce0 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65  es have Table me
1dcf0 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e  tadata */.#defin
1dd00 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20  e SF_Compound   
1dd10 20 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20      0x00100  /* 
1dd20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75  Part of a compou
1dd30 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66  nd query */.#def
1dd40 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20  ine SF_Values   
1dd50 20 20 20 20 20 20 30 78 30 30 32 30 30 20 20 2f        0x00200  /
1dd60 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72  * Synthesized fr
1dd70 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  om VALUES clause
1dd80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1dd90 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30 78  ultiValue     0x
1dda0 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65  00400  /* Single
1ddb0 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74   VALUES term wit
1ddc0 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  h multiple rows 
1ddd0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65  */.#define SF_Ne
1dde0 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78 30  stedFrom     0x0
1ddf0 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0800  /* Part of
1de00 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64   a parenthesized
1de10 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1de20 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61  #define SF_MinMa
1de30 78 41 67 67 20 20 20 20 20 20 30 78 30 31 30 30  xAgg      0x0100
1de40 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  0  /* Aggregate 
1de50 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29  containing min()
1de60 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65   or max() */.#de
1de70 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76  fine SF_Recursiv
1de80 65 20 20 20 20 20 20 30 78 30 32 30 30 30 20 20  e      0x02000  
1de90 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65  /* The recursive
1dea0 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72   part of a recur
1deb0 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66  sive CTE */.#def
1dec0 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d 69  ine SF_FixedLimi
1ded0 74 20 20 20 20 20 30 78 30 34 30 30 30 20 20 2f  t     0x04000  /
1dee0 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65 74  * nSelectRow set
1def0 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c   by a constant L
1df00 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  IMIT */.#define 
1df10 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20  SF_MaybeConvert 
1df20 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e 65    0x08000  /* Ne
1df30 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ed convertCompou
1df40 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1df50 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
1df60 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20  SF_Converted    
1df70 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42 79    0x10000  /* By
1df80 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
1df90 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
1dfa0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1dfb0 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20  _IncludeHidden  
1dfc0 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c  0x20000  /* Incl
1dfd0 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  ude hidden colum
1dfe0 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a  ns in output */.
1dff0 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6c  #define SF_Compl
1e000 65 78 52 65 73 75 6c 74 20 20 30 78 34 30 30 30  exResult  0x4000
1e010 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 6e  0  /* Result con
1e020 74 61 69 6e 73 20 73 75 62 71 75 65 72 79 20 6f  tains subquery o
1e030 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f  r function */../
1e040 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73  *.** The results
1e050 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e   of a SELECT can
1e060 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20   be distributed 
1e070 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c  in several ways,
1e080 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62   as defined.** b
1e090 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  y one of the fol
1e0a0 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20  lowing macros.  
1e0b0 54 68 65 20 22 53 52 54 22 20 70 72 65 66 69 78  The "SRT" prefix
1e0c0 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52   means "SELECT R
1e0d0 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a  esult.** Type"..
1e0e0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e  **.**     SRT_Un
1e0f0 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20  ion       Store 
1e100 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79  results as a key
1e110 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   in a temporary 
1e120 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20 20 20  index.**        
1e130 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64 65               ide
1e140 6e 74 69 66 69 65 64 20 62 79 20 70 44 65 73 74  ntified by pDest
1e150 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a  ->iSDParm..**.**
1e160 20 20 20 20 20 53 52 54 5f 45 78 63 65 70 74 20       SRT_Except 
1e170 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75       Remove resu
1e180 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d  lts from the tem
1e190 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44 65  porary index pDe
1e1a0 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
1e1b0 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73 74  **     SRT_Exist
1e1c0 73 20 20 20 20 20 20 53 74 6f 72 65 20 61 20 31  s      Store a 1
1e1d0 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   in memory cell 
1e1e0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69  pDest->iSDParm i
1e1f0 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  f the result.** 
1e200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e210 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65      set is not e
1e220 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  mpty..**.**     
1e230 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
1e240 54 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74  Throw the result
1e250 73 20 61 77 61 79 2e 20 20 54 68 69 73 20 69 73  s away.  This is
1e260 20 75 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a   used by SELECT.
1e270 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e280 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
1e290 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
1e2a0 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72  s whose only pur
1e2b0 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20  pose is.**      
1e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e2d0 68 65 20 73 69 64 65 2d 65 66 66 65 63 74 73 20  he side-effects 
1e2e0 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  of functions..**
1e2f0 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61  .** All of the a
1e300 62 6f 76 65 20 61 72 65 20 66 72 65 65 20 74 6f  bove are free to
1e310 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52   ignore their OR
1e320 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54  DER BY clause. T
1e330 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c  hose that.** fol
1e340 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74  low must honor t
1e350 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1e360 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
1e370 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47 65  T_Output      Ge
1e380 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20  nerate a row of 
1e390 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20 74 68  output (using th
1e3a0 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a  e OP_ResultRow.*
1e3b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e3c0 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f        opcode) fo
1e3d0 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68  r each row in th
1e3e0 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a  e result set..**
1e3f0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20  .**     SRT_Mem 
1e400 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c          Only val
1e410 69 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  id if the result
1e420 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c   is a single col
1e430 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  umn..**         
1e440 20 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 72              Stor
1e450 65 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75  e the first colu
1e460 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  mn of the first 
1e470 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20  result row.**   
1e480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e490 20 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44    in register pD
1e4a0 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65  est->iSDParm the
1e4b0 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65  n abandon the re
1e4c0 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  st.**           
1e4d0 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65            of the
1e4e0 20 71 75 65 72 79 2e 20 20 54 68 69 73 20 64 65   query.  This de
1e4f0 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65  stination implie
1e500 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a  s "LIMIT 1"..**.
1e510 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20 20  **     SRT_Set  
1e520 20 20 20 20 20 20 20 54 68 65 20 72 65 73 75 6c         The resul
1e530 74 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67  t must be a sing
1e540 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72  le column.  Stor
1e550 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20  e each.**       
1e560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1e570 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74  w of result as t
1e580 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20  he key in table 
1e590 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1e5a0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e5b0 20 20 20 20 20 20 20 41 70 70 6c 79 20 74 68 65         Apply the
1e5c0 20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d   affinity pDest-
1e5d0 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72 65 20  >affSdst before 
1e5e0 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20  storing.**      
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1e600 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f  esults.  Used to
1e610 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28   implement "IN (
1e620 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a  SELECT ...)"..**
1e630 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65  .**     SRT_Ephe
1e640 6d 54 61 62 20 20 20 20 43 72 65 61 74 65 20 61  mTab    Create a
1e650 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
1e660 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1e670 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20   and store.**   
1e680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e690 20 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 65    the result the
1e6a0 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69  re. The cursor i
1e6b0 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65  s left open afte
1e6c0 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  r.**            
1e6d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 69           returni
1e6e0 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b  ng.  This is lik
1e6f0 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65  e SRT_Table exce
1e700 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20  pt that.**      
1e710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e720 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  his destination 
1e730 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65  uses OP_OpenEphe
1e740 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a  meral to create.
1e750 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e760 20 20 20 20 20 20 20 74 68 65 20 74 61 62 6c 65         the table
1e770 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20   first..**.**   
1e780 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20    SRT_Coroutine 
1e790 20 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d    Generate a co-
1e7a0 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65 74  routine that ret
1e7b0 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f  urns a new row o
1e7c0 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  f.**            
1e7d0 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73           results
1e7e0 20 65 61 63 68 20 74 69 6d 65 20 69 74 20 69 73   each time it is
1e7f0 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65   invoked.  The e
1e800 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20  ntry point.**   
1e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e820 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74    of the co-rout
1e830 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ine is stored in
1e840 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
1e850 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20  >iSDParm.**     
1e860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e870 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72  and the result r
1e880 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ow is stored in 
1e890 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67  pDest->nDest reg
1e8a0 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20  isters.**       
1e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1e8c0 61 72 74 69 6e 67 20 77 69 74 68 20 70 44 65 73  arting with pDes
1e8d0 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20  t->iSdst..**.** 
1e8e0 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20      SRT_Table   
1e8f0 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1e900 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74  s in temporary t
1e910 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1e920 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f  arm..**     SRT_
1e930 46 69 66 6f 20 20 20 20 20 20 20 20 54 68 69 73  Fifo        This
1e940 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68   is like SRT_Eph
1e950 65 6d 54 61 62 20 65 78 63 65 70 74 20 74 68 61  emTab except tha
1e960 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20  t the table.**  
1e970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e980 20 20 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f     is assumed to
1e990 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e   already be open
1e9a0 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a  .  SRT_Fifo has.
1e9b0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e9c0 20 20 20 20 20 20 20 74 68 65 20 61 64 64 69 74         the addit
1e9d0 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f  ional property o
1e9e0 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20  f being able to 
1e9f0 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20  ignore.**       
1ea00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1ea10 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1ea20 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  e..**.**     SRT
1ea30 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f  _DistFifo    Sto
1ea40 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20  re results in a 
1ea50 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1ea60 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1ea70 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ea80 20 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20         But also 
1ea90 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  use temporary ta
1eaa0 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1eab0 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20  rm+1 as.**      
1eac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1ead0 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70   record of all p
1eae0 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64  rior results and
1eaf0 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c   ignore any dupl
1eb00 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  icate.**        
1eb10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
1eb20 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20  s.  Name means: 
1eb30 20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22   "Distinct Fifo"
1eb40 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1eb50 51 75 65 75 65 20 20 20 20 20 20 20 53 74 6f 72  Queue       Stor
1eb60 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69  e results in pri
1eb70 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73  ority queue pDes
1eb80 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c  t->iSDParm (real
1eb90 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ly.**           
1eba0 20 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64            an ind
1ebb0 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73  ex).  Append a s
1ebc0 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73  equence number s
1ebd0 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69  o that all entri
1ebe0 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  es.**           
1ebf0 20 20 20 20 20 20 20 20 20 20 61 72 65 20 64 69            are di
1ec00 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  stinct..**.**   
1ec10 20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20    SRT_DistQueue 
1ec20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1ec30 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
1ec40 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1ec50 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20   only if.**     
1ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec70 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20  the same record 
1ec80 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73  has never been s
1ec90 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54  tored before.  T
1eca0 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  he.**           
1ecb0 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20            index 
1ecc0 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  at pDest->iSDPar
1ecd0 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69  m+1 hold all pri
1ece0 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64  or stores..*/.#d
1ecf0 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20  efine SRT_Union 
1ed00 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f         1  /* Sto
1ed10 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79  re result as key
1ed20 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f  s in an index */
1ed30 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63  .#define SRT_Exc
1ed40 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20  ept       2  /* 
1ed50 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72  Remove result fr
1ed60 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78  om a UNION index
1ed70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1ed80 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20  Exists       3  
1ed90 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68  /* Store 1 if th
1eda0 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20  e result is not 
1edb0 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  empty */.#define
1edc0 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20   SRT_Discard    
1edd0 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73    4  /* Do not s
1ede0 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ave the results 
1edf0 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66  anywhere */.#def
1ee00 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20  ine SRT_Fifo    
1ee10 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65       5  /* Store
1ee20 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
1ee30 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
1ee40 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  c rowid */.#defi
1ee50 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20  ne SRT_DistFifo 
1ee60 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53      6  /* Like S
1ee70 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69  RT_Fifo, but uni
1ee80 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
1ee90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1eea0 51 75 65 75 65 20 20 20 20 20 20 20 20 37 20 20  Queue        7  
1eeb0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1eec0 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23  in an queue */.#
1eed0 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51  define SRT_DistQ
1eee0 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69  ueue    8  /* Li
1eef0 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75  ke SRT_Queue, bu
1ef00 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73  t unique results
1ef10 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65   only */../* The
1ef20 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1ef30 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20   is ignored for 
1ef40 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  all of the above
1ef50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f   */.#define Igno
1ef60 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20  rableOrderby(X) 
1ef70 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54  ((X->eDest)<=SRT
1ef80 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65  _DistQueue)..#de
1ef90 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20  fine SRT_Output 
1efa0 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70        9  /* Outp
1efb0 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72  ut each row of r
1efc0 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esult */.#define
1efd0 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
1efe0 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   10  /* Store re
1eff0 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79  sult in a memory
1f000 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65   cell */.#define
1f010 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20   SRT_Set        
1f020 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   11  /* Store re
1f030 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e  sults as keys in
1f040 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
1f050 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61  fine SRT_EphemTa
1f060 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61  b    12  /* Crea
1f070 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62  te transient tab
1f080 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20   and store like 
1f090 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65  SRT_Table */.#de
1f0a0 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69  fine SRT_Corouti
1f0b0 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65  ne   13  /* Gene
1f0c0 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f  rate a single ro
1f0d0 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
1f0e0 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65  define SRT_Table
1f0f0 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74         14  /* St
1f100 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
1f110 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
1f120 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f  atic rowid */../
1f130 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1f140 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20   of this object 
1f150 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20  describes where 
1f160 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65  to put of the re
1f170 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45  sults of.** a SE
1f180 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
1f190 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74  */.struct Select
1f1a0 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73  Dest {.  u8 eDes
1f1b0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
1f1c0 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20   How to dispose 
1f1d0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20  of the results. 
1f1e0 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f   On of SRT_* abo
1f1f0 76 65 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44  ve. */.  int iSD
1f200 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a  Parm;         /*
1f210 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65   A parameter use
1f220 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64  d by the eDest d
1f230 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a  isposal method *
1f240 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20  /.  int iSdst;  
1f250 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65           /* Base
1f260 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20   register where 
1f270 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74  results are writ
1f280 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64  ten */.  int nSd
1f290 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  st;           /*
1f2a0 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   Number of regis
1f2b0 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  ters allocated *
1f2c0 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 53 64  /.  char *zAffSd
1f2d0 73 74 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69  st;      /* Affi
1f2e0 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65  nity used when e
1f2f0 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f  Dest==SRT_Set */
1f300 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72  .  ExprList *pOr
1f310 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63  derBy;  /* Key c
1f320 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51  olumns for SRT_Q
1f330 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73  ueue and SRT_Dis
1f340 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  tQueue */.};../*
1f350 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20  .** During code 
1f360 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74  generation of st
1f370 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f  atements that do
1f380 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55   inserts into AU
1f390 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74  TOINCREMENT.** t
1f3a0 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f  ables, the follo
1f3b0 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  wing information
1f3c0 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
1f3d0 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f  the Table.u.auto
1f3e0 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72  Inc.p.** pointer
1f3f0 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63   of each autoinc
1f400 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20  rement table to 
1f410 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65  record some side
1f420 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
1f430 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65  t.** the code ge
1f440 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20  nerator needs.  
1f450 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20  We have to keep 
1f460 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e  per-table autoin
1f470 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72  crement.** infor
1f480 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69  mation in case i
1f490 6e 73 65 72 74 73 20 61 72 65 20 64 6f 6e 65 20  nserts are done 
1f4a0 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
1f4b0 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f    Triggers do no
1f4c0 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f  t.** normally co
1f4d0 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20 61  ordinate their a
1f4e0 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20 77  ctivities, but w
1f4f0 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f  e do need to coo
1f500 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c  rdinate the.** l
1f510 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e  oading and savin
1f520 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65  g of autoincreme
1f530 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  nt information..
1f540 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e  */.struct Autoin
1f550 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e  cInfo {.  Autoin
1f560 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20  cInfo *pNext;   
1f570 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f  /* Next info blo
1f580 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20  ck in a list of 
1f590 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61  them all */.  Ta
1f5a0 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
1f5b0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69      /* Table thi
1f5c0 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66  s info block ref
1f5d0 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20  ers to */.  int 
1f5e0 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
1f5f0 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71    /* Index in sq
1f600 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64  lite3.aDb[] of d
1f610 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
1f620 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65  pTab */.  int re
1f630 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20 20  gCtr;           
1f640 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
1f650 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72  er holding the r
1f660 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  owid counter */.
1f670 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61  };../*.** At lea
1f680 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  st one instance 
1f690 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1f6a0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72   structure is cr
1f6b0 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a  eated for each.*
1f6c0 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d  * trigger that m
1f6d0 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c  ay be fired whil
1f6e0 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53  e parsing an INS
1f6f0 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ERT, UPDATE or D
1f700 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65  ELETE.** stateme
1f710 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a  nt. All such obj
1f720 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20  ects are stored 
1f730 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  in the linked li
1f740 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20  st headed at.** 
1f750 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
1f760 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e  g and deleted on
1f770 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d  ce statement com
1f780 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65  pilation has bee
1f790 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a  n.** completed..
1f7a0 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62  **.** A Vdbe sub
1f7b0 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d  -program that im
1f7c0 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64  plements the bod
1f7d0 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73  y and WHEN claus
1f7e0 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20  e of trigger.** 
1f7f0 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67  TriggerPrg.pTrig
1f800 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20  ger, assuming a 
1f810 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  default ON CONFL
1f820 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a  ICT clause of.**
1f830 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f   TriggerPrg.orco
1f840 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e  nf, is stored in
1f850 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
1f860 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c  pProgram variabl
1f870 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e  e..** The Parse.
1f880 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
1f890 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20   never contains 
1f8a0 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68  two entries with
1f8b0 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c   the same.** val
1f8c0 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72  ues for both pTr
1f8d0 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66  igger and orconf
1f8e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67  ..**.** The Trig
1f8f0 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b  gerPrg.aColmask[
1f900 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  0] variable is s
1f910 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20  et to a mask of 
1f920 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a  old.* columns.**
1f930 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65   accessed (or se
1f940 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67  t to 0 for trigg
1f950 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72  ers fired as a r
1f960 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a  esult of INSERT.
1f970 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20  ** statements). 
1f980 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54  Similarly, the T
1f990 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
1f9a0 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[1] variable i
1f9b0 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61  s set to.** a ma
1f9c0 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
1f9d0 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20  mns used by the 
1f9e0 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75  program..*/.stru
1f9f0 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a  ct TriggerPrg {.
1fa00 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
1fa10 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69  ger;      /* Tri
1fa20 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61  gger this progra
1fa30 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d  m was coded from
1fa40 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
1fa50 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a   *pNext;      /*
1fa60 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50   Next entry in P
1fa70 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1fa80 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72   list */.  SubPr
1fa90 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
1faa0 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d     /* Program im
1fab0 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67  plementing pTrig
1fac0 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20  ger/orconf */.  
1fad0 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20  int orconf;     
1fae0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1faf0 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
1fb00 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61  olicy */.  u32 a
1fb10 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20  Colmask[2];     
1fb20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f     /* Masks of o
1fb30 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75  ld.*, new.* colu
1fb40 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a  mns accessed */.
1fb50 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44  };../*.** The yD
1fb60 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66  bMask datatype f
1fb70 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f  or the bitmask o
1fb80 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  f all attached d
1fb90 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66  atabases..*/.#if
1fba0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
1fbb0 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65  CHED>30.  typede
1fbc0 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  f unsigned char 
1fbd0 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f  yDbMask[(SQLITE_
1fbe0 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f  MAX_ATTACHED+9)/
1fbf0 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  8];.# define DbM
1fc00 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20  askTest(M,I)    
1fc10 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c  (((M)[(I)/8]&(1<
1fc20 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23  <((I)&7)))!=0).#
1fc30 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65   define DbMaskZe
1fc40 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65  ro(M)      memse
1fc50 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d  t((M),0,sizeof(M
1fc60 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1fc70 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
1fc80 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28  M)[(I)/8]|=(1<<(
1fc90 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65  (I)&7)).# define
1fca0 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
1fcb0 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73  )   sqlite3DbMas
1fcc0 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65  kAllZero(M).# de
1fcd0 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65  fine DbMaskNonZe
1fce0 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33  ro(M)   (sqlite3
1fcf0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1fd00 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70  ==0).#else.  typ
1fd10 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e  edef unsigned in
1fd20 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66  t yDbMask;.# def
1fd30 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d  ine DbMaskTest(M
1fd40 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28  ,I)    (((M)&(((
1fd50 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
1fd60 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44  )!=0).# define D
1fd70 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20  bMaskZero(M)    
1fd80 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65    (M)=0.# define
1fd90 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
1fda0 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d      (M)|=(((yDbM
1fdb0 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64  ask)1)<<(I)).# d
1fdc0 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
1fdd0 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a  ero(M)   (M)==0.
1fde0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
1fdf0 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21  onZero(M)   (M)!
1fe00 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  =0.#endif../*.**
1fe10 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63   An SQL parser c
1fe20 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20  ontext.  A copy 
1fe30 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
1fe40 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f  e is passed thro
1fe50 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  ugh.** the parse
1fe60 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20  r and down into 
1fe70 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61  all the parser a
1fe80 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e  ction routine in
1fe90 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72   order to.** car
1fea0 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d  ry around inform
1feb0 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c  ation that is gl
1fec0 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69  obal to the enti
1fed0 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20  re parse..**.** 
1fee0 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73  The structure is
1fef0 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77   divided into tw
1ff00 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74  o parts.  When t
1ff10 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f  he parser and co
1ff20 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63  de.** generate c
1ff30 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72  all themselves r
1ff40 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20  ecursively, the 
1ff50 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68  first part of th
1ff60 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69  e structure.** i
1ff70 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74  s constant but t
1ff80 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69  he second part i
1ff90 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62  s reset at the b
1ffa0 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64  eginning and end
1ffb0 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75   of.** each recu
1ffc0 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rsion..**.** The
1ffd0 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20   nTableLock and 
1ffe0 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61  aTableLock varia
1fff0 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73  bles are only us
20000 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64  ed if the shared
20010 2d 63 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72  -cache.** featur
20020 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66  e is enabled (if
20030 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75   sqlite3Tsd()->u
20040 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20  seSharedData is 
20050 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a  true). They are.
20060 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
20070 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c   the set of tabl
20080 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64  e-locks required
20090 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
200a0 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69  t being.** compi
200b0 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71  led. Function sq
200c0 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29  lite3TableLock()
200d0 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
200e0 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a  entries to the.*
200f0 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63  * list..*/.struc
20100 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69  t Parse {.  sqli
20110 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
20120 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74   /* The main dat
20130 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20  abase structure 
20140 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
20150 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  sg;       /* An 
20160 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
20170 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  .  Vdbe *pVdbe; 
20180 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e          /* An en
20190 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69  gine for executi
201a0 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65  ng database byte
201b0 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  code */.  int rc
201c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
201d0 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
201e0 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  om execution */.
201f0 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74    u8 colNamesSet
20200 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61  ;      /* TRUE a
20210 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61  fter OP_ColumnNa
20220 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75  me has been issu
20230 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20  ed to pVdbe */. 
20240 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b   u8 checkSchema;
20250 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20        /* Causes 
20260 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
20270 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  eck after an err
20280 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65  or */.  u8 neste
20290 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
202a0 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
202b0 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61   calls to the pa
202c0 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61  rser/code genera
202d0 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  tor */.  u8 nTem
202e0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
202f0 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f   Number of tempo
20300 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69  rary registers i
20310 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a  n aTempReg[] */.
20320 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74    u8 isMultiWrit
20330 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  e;     /* True i
20340 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
20350 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75  modify/insert mu
20360 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20  ltiple rows */. 
20370 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20   u8 mayAbort;   
20380 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
20390 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74   statement may t
203a0 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
203b0 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ception */.  u8 
203c0 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20  hasCompound;    
203d0 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76    /* Need to inv
203e0 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  oke convertCompo
203f0 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
20400 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b  ery() */.  u8 ok
20410 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20  ConstFactor;    
20420 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20  /* OK to factor 
20430 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f  out constants */
20440 0a 20 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f  .  u8 disableLoo
20450 6b 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65  kaside; /* Numbe
20460 72 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61  r of times looka
20470 73 69 64 65 20 68 61 73 20 62 65 65 6e 20 64 69  side has been di
20480 73 61 62 6c 65 64 20 2a 2f 0a 20 20 69 6e 74 20  sabled */.  int 
20490 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  nRangeReg;      
204a0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
204b0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
204c0 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
204d0 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t iRangeReg;    
204e0 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69     /* First regi
204f0 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72  ster in temporar
20500 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
20510 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
20520 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
20530 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73  mber of errors s
20540 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61  een */.  int nTa
20550 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
20560 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69   Number of previ
20570 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  ously allocated 
20580 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a  VDBE cursors */.
20590 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
205a0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
205b0 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
205c0 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
205d0 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20    int nOpAlloc; 
205e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
205f0 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61   of slots alloca
20600 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70  ted for Vdbe.aOp
20610 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70  [] */.  int szOp
20620 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20  Alloc;       /* 
20630 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  Bytes of memory 
20640 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
20650 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a  for Vdbe.aOp[] *
20660 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66 54 61 62  /.  int iSelfTab
20670 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c  ;        /* Tabl
20680 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
20690 68 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 65 78  h an index on ex
206a0 70 72 2c 20 6f 72 20 6e 65 67 61 74 69 76 65 0a  pr, or negative.
206b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206c0 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65         ** of the
206d0 20 62 61 73 65 20 72 65 67 69 73 74 65 72 20 64   base register d
206e0 75 72 69 6e 67 20 63 68 65 63 6b 2d 63 6f 6e 73  uring check-cons
206f0 74 72 61 69 6e 74 20 65 76 61 6c 20 2a 2f 0a 20  traint eval */. 
20700 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20   int nLabel;    
20710 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20720 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a  of labels used *
20730 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b  /.  int *aLabel;
20740 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
20750 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61  e to hold the la
20760 62 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  bels */.  ExprLi
20770 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f  st *pConstExpr;/
20780 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
20790 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65  ssions */.  Toke
207a0 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65  n constraintName
207b0 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  ;/* Name of the 
207c0 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65  constraint curre
207d0 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65  ntly being parse
207e0 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77  d */.  yDbMask w
207f0 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53  riteMask;   /* S
20800 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61  tart a write tra
20810 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73  nsaction on thes
20820 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  e databases */. 
20830 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d   yDbMask cookieM
20840 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b  ask;  /* Bitmask
20850 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66   of schema verif
20860 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ied databases */
20870 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b  .  int regRowid;
20880 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
20890 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69  ter holding rowi
208a0 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c  d of CREATE TABL
208b0 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  E entry */.  int
208c0 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20   regRoot;       
208d0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
208e0 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20  lding root page 
208f0 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f  number for new o
20900 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20  bjects */.  int 
20910 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20  nMaxArg;        
20920 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73   /* Max args pas
20930 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63  sed to user func
20940 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67  tion by sub-prog
20950 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65  ram */.  int nSe
20960 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  lect;         /*
20970 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43   Number of SELEC
20980 54 20 73 74 6d 74 73 2e 20 43 6f 75 6e 74 65 72  T stmts. Counter
20990 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 49   for Select.selI
209a0 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  d */.#ifndef SQL
209b0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
209c0 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62  CACHE.  int nTab
209d0 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f  leLock;        /
209e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b  * Number of lock
209f0 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20  s in aTableLock 
20a00 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a  */.  TableLock *
20a10 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52  aTableLock; /* R
20a20 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f  equired table lo
20a30 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63  cks for shared-c
20a40 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e  ache mode */.#en
20a50 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  dif.  AutoincInf
20a60 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e  o *pAinc;  /* In
20a70 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
20a80 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f  AUTOINCREMENT co
20a90 75 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61 72 73  unters */.  Pars
20aa0 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20  e *pToplevel;   
20ab0 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74   /* Parse struct
20ac0 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f  ure for main pro
20ad0 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a  gram (or NULL) *
20ae0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67  /.  Table *pTrig
20af0 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c  gerTab;  /* Tabl
20b00 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62  e triggers are b
20b10 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a  eing coded for *
20b20 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61  /.  int addrCrTa
20b30 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72  b;       /* Addr
20b40 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65  ess of OP_Create
20b50 42 74 72 65 65 20 6f 70 63 6f 64 65 20 6f 6e 20  Btree opcode on 
20b60 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
20b70 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70    u32 nQueryLoop
20b80 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75  ;      /* Est nu
20b90 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f  mber of iteratio
20ba0 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31  ns of a query (1
20bb0 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20  0*log2(N)) */.  
20bc0 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20  u32 oldmask;    
20bd0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
20be0 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  old.* columns re
20bf0 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33  ferenced */.  u3
20c00 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20  2 newmask;      
20c10 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65     /* Mask of ne
20c20 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  w.* columns refe
20c30 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65  renced */.  u8 e
20c40 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20  TriggerOp;      
20c50 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54   /* TK_UPDATE, T
20c60 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44  K_INSERT or TK_D
20c70 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f  ELETE */.  u8 eO
20c80 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
20c90 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
20ca0 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f  NFLICT policy fo
20cb0 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20  r trigger steps 
20cc0 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54  */.  u8 disableT
20cd0 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75  riggers;  /* Tru
20ce0 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69  e to disable tri
20cf0 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a  ggers */..  /***
20d00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d40 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65  *******.  ** Fie
20d50 6c 64 73 20 61 62 6f 76 65 20 6d 75 73 74 20 62  lds above must b
20d60 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  e initialized to
20d70 20 7a 65 72 6f 2e 20 20 54 68 65 20 66 69 65 6c   zero.  The fiel
20d80 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a  ds that follow,.
20d90 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65    ** down to the
20da0 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
20db0 65 20 72 65 63 75 72 73 69 76 65 20 73 65 63 74  e recursive sect
20dc0 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64  ion, do not need
20dd0 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74   to be.  ** init
20de0 69 61 6c 69 7a 65 64 20 61 73 20 74 68 65 79 20  ialized as they 
20df0 77 69 6c 6c 20 62 65 20 73 65 74 20 62 65 66 6f  will be set befo
20e00 72 65 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  re being used.  
20e10 54 68 65 20 62 6f 75 6e 64 61 72 79 20 69 73 0a  The boundary is.
20e20 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20    ** determined 
20e30 62 79 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  by offsetof(Pars
20e40 65 2c 61 54 65 6d 70 52 65 67 29 2e 0a 20 20 2a  e,aTempReg)..  *
20e50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e  *********/..  in
20ea0 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20  t aTempReg[8];  
20eb0 20 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67        /* Holding
20ec0 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72   area for tempor
20ed0 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f  ary registers */
20ee0 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f  .  Token sNameTo
20ef0 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f  ken;       /* To
20f00 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69  ken with unquali
20f10 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65  fied schema obje
20f20 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a  ct name */..  /*
20f30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20f40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20f50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20f60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20f70 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f  *******.  ** Abo
20f80 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ve is constant b
20f90 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e  etween recursion
20fa0 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73  s.  Below is res
20fb0 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  et before and af
20fc0 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65  ter.  ** each re
20fd0 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f  cursion.  The bo
20fe0 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74  undary between t
20ff0 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73  hese two regions
21000 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20   is determined. 
21010 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74   ** using offset
21020 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f  of(Parse,sLastTo
21030 6b 65 6e 29 20 73 6f 20 74 68 65 20 73 4c 61 73  ken) so the sLas
21040 74 54 6f 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73  tToken field mus
21050 74 20 62 65 20 74 68 65 0a 20 20 2a 2a 20 66 69  t be the.  ** fi
21060 72 73 74 20 66 69 65 6c 64 20 69 6e 20 74 68 65  rst field in the
21070 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f   recursive regio
21080 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
21090 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
210a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
210b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
210c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
210d0 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b    Token sLastTok
210e0 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  en;       /* The
210f0 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73   last token pars
21100 65 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56  ed */.  ynVar nV
21110 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
21120 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27    /* Number of '
21130 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65  ?' variables see
21140 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20  n in the SQL so 
21150 66 61 72 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53  far */.  u8 iPkS
21160 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
21170 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53     /* ASC or DES
21180 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52  C for INTEGER PR
21190 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75  IMARY KEY */.  u
211a0 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  8 explain;      
211b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
211c0 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
211d0 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e  flag is found on
211e0 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69   the query */.#i
211f0 66 20 21 28 64 65 66 69 6e 65 64 28 53 51 4c 49  f !(defined(SQLI
21200 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
21210 41 42 4c 45 29 20 26 26 20 64 65 66 69 6e 65 64  ABLE) && defined
21220 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54  (SQLITE_OMIT_ALT
21230 45 52 54 41 42 4c 45 29 29 0a 20 20 75 38 20 65  ERTABLE)).  u8 e
21240 50 61 72 73 65 4d 6f 64 65 3b 20 20 20 20 20 20  ParseMode;      
21250 20 20 20 20 20 20 2f 2a 20 50 41 52 53 45 5f 4d        /* PARSE_M
21260 4f 44 45 5f 58 58 58 20 63 6f 6e 73 74 61 6e 74  ODE_XXX constant
21270 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
21280 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
21290 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e  IRTUALTABLE.  in
212a0 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  t nVtabLock;    
212b0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
212c0 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62  r of virtual tab
212d0 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23  les to lock */.#
212e0 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48 65 69  endif.  int nHei
212f0 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ght;            
21300 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
21310 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63  tree height of c
21320 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63  urrent sub-selec
21330 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  t */.#ifndef SQL
21340 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
21350 0a 20 20 69 6e 74 20 61 64 64 72 45 78 70 6c 61  .  int addrExpla
21360 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  in;          /* 
21370 41 64 64 72 65 73 73 20 6f 66 20 63 75 72 72 65  Address of curre
21380 6e 74 20 4f 50 5f 45 78 70 6c 61 69 6e 20 6f 70  nt OP_Explain op
21390 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  code */.#endif. 
213a0 20 56 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b 20   VList *pVList; 
213b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
213c0 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 76 61  pping between va
213d0 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e 64  riable names and
213e0 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56 64   numbers */.  Vd
213f0 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20  be *pReprepare; 
21400 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65          /* VM be
21410 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28  ing reprepared (
21420 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
21430 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ()) */.  const c
21440 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20  har *zTail;     
21450 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65     /* All SQL te
21460 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  xt past the last
21470 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65   semicolon parse
21480 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  d */.  Table *pN
21490 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  ewTable;        
214a0 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e   /* A table bein
214b0 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  g constructed by
214c0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
214d0 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 77 49 6e  .  Index *pNewIn
214e0 64 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  dex;         /* 
214f0 41 6e 20 69 6e 64 65 78 20 62 65 69 6e 67 20 63  An index being c
21500 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52  onstructed by CR
21510 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20  EATE INDEX */.  
21520 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69  Trigger *pNewTri
21530 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69  gger;     /* Tri
21540 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74  gger under const
21550 72 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45  ruct by a CREATE
21560 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f   TRIGGER */.  co
21570 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
21580 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36  ontext; /* The 6
21590 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  th parameter to 
215a0 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61  db->xAuth callba
215b0 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  cks */.#ifndef S
215c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
215d0 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20  ALTABLE.  Token 
215e0 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
215f0 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20      /* Complete 
21600 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65  text of a module
21610 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54   argument */.  T
21620 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63  able **apVtabLoc
21630 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  k;       /* Poin
21640 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74  ter to virtual t
21650 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f  ables needing lo
21660 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  cking */.#endif.
21670 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65    Table *pZombie
21680 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  Tab;        /* L
21690 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a  ist of Table obj
216a0 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61  ects to delete a
216b0 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f  fter code gen */
216c0 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
216d0 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20  TriggerPrg;  /* 
216e0 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63  Linked list of c
216f0 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f  oded triggers */
21700 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
21710 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21720 43 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61  Current WITH cla
21730 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  use, or NULL */.
21740 20 20 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46    With *pWithToF
21750 72 65 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46  ree;        /* F
21760 72 65 65 20 74 68 69 73 20 57 49 54 48 20 6f 62  ree this WITH ob
21770 6a 65 63 74 20 61 74 20 74 68 65 20 65 6e 64 20  ject at the end 
21780 6f 66 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a  of the parse */.
21790 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
217a0 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20  MIT_ALTERTABLE. 
217b0 20 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 2a 70 52   RenameToken *pR
217c0 65 6e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 54 6f  ename;     /* To
217d0 6b 65 6e 73 20 73 75 62 6a 65 63 74 20 74 6f 20  kens subject to 
217e0 72 65 6e 61 6d 69 6e 67 20 62 79 20 41 4c 54 45  renaming by ALTE
217f0 52 20 54 41 42 4c 45 20 2a 2f 0a 23 65 6e 64 69  R TABLE */.#endi
21800 66 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 50 41  f.};..#define PA
21810 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 20  RSE_MODE_NORMAL 
21820 20 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65         0.#define
21830 20 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c   PARSE_MODE_DECL
21840 41 52 45 5f 56 54 41 42 20 20 31 0a 23 64 65 66  ARE_VTAB  1.#def
21850 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 52  ine PARSE_MODE_R
21860 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 20 32 0a 23  ENAME_COLUMN 2.#
21870 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44  define PARSE_MOD
21880 45 5f 52 45 4e 41 4d 45 5f 54 41 42 4c 45 20 20  E_RENAME_TABLE  
21890 33 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61  3../*.** Sizes a
218a0 6e 64 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 76  nd pointers of v
218b0 61 72 69 6f 75 73 20 70 61 72 74 73 20 6f 66 20  arious parts of 
218c0 74 68 65 20 50 61 72 73 65 20 6f 62 6a 65 63 74  the Parse object
218d0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  ..*/.#define PAR
218e0 53 45 5f 48 44 52 5f 53 5a 20 6f 66 66 73 65 74  SE_HDR_SZ offset
218f0 6f 66 28 50 61 72 73 65 2c 61 54 65 6d 70 52 65  of(Parse,aTempRe
21900 67 29 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20  g) /* Recursive 
21910 70 61 72 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63  part w/o aColCac
21920 68 65 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  he*/.#define PAR
21930 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 20 6f 66  SE_RECURSE_SZ of
21940 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61  fsetof(Parse,sLa
21950 73 74 54 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52  stToken)    /* R
21960 65 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f  ecursive part */
21970 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54  .#define PARSE_T
21980 41 49 4c 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50  AIL_SZ (sizeof(P
21990 61 72 73 65 29 2d 50 41 52 53 45 5f 52 45 43 55  arse)-PARSE_RECU
219a0 52 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72  RSE_SZ) /* Non-r
219b0 65 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f  ecursive part */
219c0 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54  .#define PARSE_T
219d0 41 49 4c 28 58 29 20 28 28 28 63 68 61 72 2a 29  AIL(X) (((char*)
219e0 28 58 29 29 2b 50 41 52 53 45 5f 52 45 43 55 52  (X))+PARSE_RECUR
219f0 53 45 5f 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74  SE_SZ)  /* Point
21a00 65 72 20 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f  er to tail */../
21a10 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
21a20 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
21a30 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f  side an sqlite3_
21a40 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63  declare_vtab() c
21a50 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  all..*/.#ifdef S
21a60 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
21a70 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e  ALTABLE.  #defin
21a80 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
21a90 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  B 0.#else.  #def
21aa0 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
21ab0 54 41 42 20 28 70 50 61 72 73 65 2d 3e 65 50 61  TAB (pParse->ePa
21ac0 72 73 65 4d 6f 64 65 3d 3d 50 41 52 53 45 5f 4d  rseMode==PARSE_M
21ad0 4f 44 45 5f 44 45 43 4c 41 52 45 5f 56 54 41 42  ODE_DECLARE_VTAB
21ae0 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ).#endif..#if de
21af0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
21b00 54 5f 41 4c 54 45 52 54 41 42 4c 45 29 0a 20 20  T_ALTERTABLE).  
21b10 23 64 65 66 69 6e 65 20 49 4e 5f 52 45 4e 41 4d  #define IN_RENAM
21b20 45 5f 4f 42 4a 45 43 54 20 30 0a 23 65 6c 73 65  E_OBJECT 0.#else
21b30 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 52 45  .  #define IN_RE
21b40 4e 41 4d 45 5f 4f 42 4a 45 43 54 20 28 70 50 61  NAME_OBJECT (pPa
21b50 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3e  rse->eParseMode>
21b60 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41  =PARSE_MODE_RENA
21b70 4d 45 5f 43 4f 4c 55 4d 4e 29 0a 23 65 6e 64 69  ME_COLUMN).#endi
21b80 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
21b90 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
21ba0 41 4c 54 41 42 4c 45 29 20 26 26 20 64 65 66 69  ALTABLE) && defi
21bb0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
21bc0 41 4c 54 45 52 54 41 42 4c 45 29 0a 20 20 23 64  ALTERTABLE).  #d
21bd0 65 66 69 6e 65 20 49 4e 5f 53 50 45 43 49 41 4c  efine IN_SPECIAL
21be0 5f 50 41 52 53 45 20 30 0a 23 65 6c 73 65 0a 20  _PARSE 0.#else. 
21bf0 20 23 64 65 66 69 6e 65 20 49 4e 5f 53 50 45 43   #define IN_SPEC
21c00 49 41 4c 5f 50 41 52 53 45 20 28 70 50 61 72 73  IAL_PARSE (pPars
21c10 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 21 3d 50  e->eParseMode!=P
21c20 41 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c  ARSE_MODE_NORMAL
21c30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
21c40 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
21c50 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
21c60 75 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65  ucture can be de
21c70 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63  clared on a stac
21c80 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f  k and used.** to
21c90 20 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e   save the Parse.
21ca0 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c  zAuthContext val
21cb0 75 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ue so that it ca
21cc0 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61  n be restored la
21cd0 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ter..*/.struct A
21ce0 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63  uthContext {.  c
21cf0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
21d00 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75  Context;   /* Pu
21d10 74 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41  t saved Parse.zA
21d20 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20  uthContext here 
21d30 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72  */.  Parse *pPar
21d40 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
21d50 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74   /* The Parse st
21d60 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f  ructure */.};../
21d70 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c  *.** Bitfield fl
21d80 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65  ags for P5 value
21d90 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f   in various opco
21da0 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  des..**.** Value
21db0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
21dc0 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
21dd0 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c  t()):.**    OPFL
21de0 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
21df0 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  == SQLITE_FUNC_L
21e00 45 4e 47 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c  ENGTH.**    OPFL
21e10 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20  AG_TYPEOFARG    
21e20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54  == SQLITE_FUNC_T
21e30 59 50 45 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c  YPEOF.**    OPFL
21e40 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
21e50 3d 3d 20 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  == BTREE_BULKLOA
21e60 44 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53  D.**    OPFLAG_S
21e70 45 45 4b 45 51 20 20 20 20 20 20 20 3d 3d 20 42  EEKEQ       == B
21e80 54 52 45 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20  TREE_SEEK_EQ.** 
21e90 20 20 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c     OPFLAG_FORDEL
21ea0 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f  ETE    == BTREE_
21eb0 46 4f 52 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20  FORDELETE.**    
21ec0 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
21ed0 49 4f 4e 20 3d 3d 20 42 54 52 45 45 5f 53 41 56  ION == BTREE_SAV
21ee0 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20  EPOSITION.**    
21ef0 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
21f00 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 41 55 58      == BTREE_AUX
21f10 44 45 4c 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e  DELETE.*/.#defin
21f20 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
21f30 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
21f40 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65 74  * OP_Insert: Set
21f50 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e   to update db->n
21f60 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20  Change */.      
21f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21f90 2a 20 41 6c 73 6f 20 75 73 65 64 20 69 6e 20 50  * Also used in P
21fa0 32 20 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50  2 (not P5) of OP
21fb0 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69  _Delete */.#defi
21fc0 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20  ne OPFLAG_EPHEM 
21fd0 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
21fe0 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70  /* OP_Column: Ep
21ff0 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69  hemeral output i
22000 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20  s ok */.#define 
22010 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
22020 20 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20       0x20    /* 
22030 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
22040 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23  ->lastRowid */.#
22050 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53  define OPFLAG_IS
22060 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34  UPDATE      0x04
22070 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49      /* This OP_I
22080 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20  nsert is an sql 
22090 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
220a0 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
220b0 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f         0x08    /
220c0 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79  * This is likely
220d0 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
220e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
220f0 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
22100 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20   0x10    /* Try 
22110 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20  to avoid a seek 
22120 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29  in BtreeInsert()
22130 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22140 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20 20  AG_ISNOOP       
22150 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44   0x40    /* OP_D
22160 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d 75  elete does pre-u
22170 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20  pdate-hook only 
22180 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22190 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20  G_LENGTHARG     
221a0 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x40    /* OP_Co
221b0 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
221c0 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23  or length() */.#
221d0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59  define OPFLAG_TY
221e0 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30  PEOFARG     0x80
221f0 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
22200 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74   only used for t
22210 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69  ypeof() */.#defi
22220 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  ne OPFLAG_BULKCS
22230 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  R       0x01    
22240 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65  /* OP_Open** use
22250 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63  d to open bulk c
22260 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  ursor */.#define
22270 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20   OPFLAG_SEEKEQ  
22280 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
22290 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f   OP_Open** curso
222a0 72 20 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f  r uses EQ seek o
222b0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  nly */.#define O
222c0 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20  PFLAG_FORDELETE 
222d0 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f      0x08    /* O
222e0 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75 73  P_Open should us
222f0 65 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54  e BTREE_FORDELET
22300 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
22310 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20  LAG_P2ISREG     
22320 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20    0x10    /* P2 
22330 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20  to OP_Open** is 
22340 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  a register numbe
22350 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
22360 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20  LAG_PERMUTE     
22370 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
22380 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65  Compare: use the
22390 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a   permutation */.
223a0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53  #define OPFLAG_S
223b0 41 56 45 50 4f 53 49 54 49 4f 4e 20 20 30 78 30  AVEPOSITION  0x0
223c0 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  2    /* OP_Delet
223d0 65 2f 49 6e 73 65 72 74 3a 20 73 61 76 65 20 63  e/Insert: save c
223e0 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65  ursor pos */.#de
223f0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58 44  fine OPFLAG_AUXD
22400 45 4c 45 54 45 20 20 20 20 20 30 78 30 34 20 20  ELETE     0x04  
22410 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20    /* OP_Delete: 
22420 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c 45 54  index in a DELET
22430 45 20 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  E op */.#define 
22440 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d 41  OPFLAG_NOCHNG_MA
22450 47 49 43 20 20 30 78 36 64 20 20 20 20 2f 2a 20  GIC  0x6d    /* 
22460 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 73  OP_MakeRecord: s
22470 65 72 69 61 6c 74 79 70 65 20 31 30 20 69 73 20  erialtype 10 is 
22480 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63  ok */../*. * Eac
22490 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e  h trigger presen
224a0 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
224b0 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72  e schema is stor
224c0 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63  ed as an instanc
224d0 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54  e of. * struct T
224e0 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f  rigger.. *. * Po
224f0 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e  inters to instan
22500 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
22510 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64  igger are stored
22520 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a   in two ways.. *
22530 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67   1. In the "trig
22540 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65  Hash" hash table
22550 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71   (part of the sq
22560 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72  lite3* that repr
22570 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20 20  esents the. *   
22580 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73   database). This
22590 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20   allows Trigger 
225a0 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65  structures to be
225b0 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61   retrieved by na
225c0 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72  me.. * 2. All tr
225d0 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65  iggers associate
225e0 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  d with a single 
225f0 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e  table form a lin
22600 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20  ked list, using 
22610 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20  the. *    pNext 
22620 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74  member of struct
22630 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e   Trigger. A poin
22640 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ter to the first
22650 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a   element of the.
22660 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73   *    linked lis
22670 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74  t is stored as t
22680 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65  he "pTrigger" me
22690 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f  mber of the asso
226a0 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72  ciated. *    str
226b0 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a  uct Table.. *. *
226c0 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   The "step_list"
226d0 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74   member points t
226e0 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
226f0 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20  ent of a linked 
22700 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69  list. * containi
22710 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ng the SQL state
22720 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
22730 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70  as the trigger p
22740 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75  rogram.. */.stru
22750 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63  ct Trigger {.  c
22760 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
22770 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61         /* The na
22780 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  me of the trigge
22790 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r               
227a0 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68           */.  ch
227b0 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20  ar *table;      
227c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62        /* The tab
227d0 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
227e0 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
227f0 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20  applies */.  u8 
22800 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
22810 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
22820 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
22830 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20  ATE, TK_INSERT  
22840 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74         */.  u8 t
22850 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20  r_tm;           
22860 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52      /* One of TR
22870 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52  IGGER_BEFORE, TR
22880 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20  IGGER_AFTER */. 
22890 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20   Expr *pWhen;   
228a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
228b0 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
228c0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d  he expression (m
228d0 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20  ay be NULL) */. 
228e0 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e   IdList *pColumn
228f0 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  s;       /* If t
22900 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45  his is an UPDATE
22910 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74   OF <column-list
22920 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20  > trigger,.     
22930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22940 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c          the <col
22950 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f  umn-list> is sto
22960 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  red here */.  Sc
22970 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
22980 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
22990 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
229a0 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65  rigger */.  Sche
229b0 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20  ma *pTabSchema; 
229c0 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
229d0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
229e0 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  le */.  TriggerS
229f0 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20  tep *step_list; 
22a00 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20  /* Link list of 
22a10 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
22a20 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20  steps           
22a30 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a    */.  Trigger *
22a40 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
22a50 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61  * Next trigger a
22a60 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
22a70 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  he table */.};..
22a80 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20  /*.** A trigger 
22a90 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f  is either a BEFO
22aa0 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74  RE or an AFTER t
22ab0 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c  rigger.  The fol
22ac0 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  lowing constants
22ad0 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68  .** determine wh
22ae0 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ich..**.** If th
22af0 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65  ere are multiple
22b00 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d   triggers, you m
22b10 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46  ight of some BEF
22b20 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54  ORE and some AFT
22b30 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63  ER..** In that c
22b40 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61  ases, the consta
22b50 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65  nts below can be
22b60 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a   ORed together..
22b70 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47  */.#define TRIGG
22b80 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65  ER_BEFORE  1.#de
22b90 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54  fine TRIGGER_AFT
22ba0 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e  ER   2../*. * An
22bb0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72   instance of str
22bc0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
22bd0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
22be0 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74   a single SQL st
22bf0 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20  atement. * that 
22c00 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74  is a part of a t
22c10 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a  rigger-program..
22c20 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20   *. * Instances 
22c30 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
22c40 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64  rStep are stored
22c50 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e   in a singly lin
22c60 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64  ked list (linked
22c70 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70  . * using the "p
22c80 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65  Next" member) re
22c90 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20  ferenced by the 
22ca0 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
22cb0 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73 73  er of the. * ass
22cc0 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54  ociated struct T
22cd0 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e  rigger instance.
22ce0 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
22cf0 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64  nt of the linked
22d00 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20   list is. * the 
22d10 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68  first step of th
22d20 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  e trigger-progra
22d30 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70  m.. *. * The "op
22d40 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74  " member indicat
22d50 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20  es whether this 
22d60 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22  is a "DELETE", "
22d70 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45  INSERT", "UPDATE
22d80 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22  " or. * "SELECT"
22d90 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20   statement. The 
22da0 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20  meanings of the 
22db0 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73  other members is
22dc0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
22dd0 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22  he. * value of "
22de0 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  op" as follows:.
22df0 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
22e00 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e  INSERT). * orcon
22e10 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74  f    -> stores t
22e20 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  he ON CONFLICT a
22e30 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c  lgorithm. * pSel
22e40 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ect   -> If this
22e50 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
22e60 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e  TO ... SELECT ..
22e70 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
22e80 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
22e90 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20    this stores a 
22ea0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53  pointer to the S
22eb0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
22ec0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
22ed0 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
22ee0 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
22ef0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69  f the table to i
22f00 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70  nsert into.. * p
22f10 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74  ExprList -> If t
22f20 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
22f30 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53   INTO ... VALUES
22f40 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
22f50 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
22f60 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
22f70 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e   values to be in
22f80 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73  serted. Otherwis
22f90 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69  e NULL.. * pIdLi
22fa0 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  st   -> If this 
22fb0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
22fc0 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e  O ... (<column-n
22fd0 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e  ames>) VALUES ..
22fe0 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
22ff0 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65    statement, the
23000 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68  n this stores th
23010 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74  e column-names t
23020 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20  o be. *         
23030 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e       inserted in
23040 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  to.. *. * (op ==
23050 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a   TK_DELETE). * z
23060 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
23070 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
23080 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65   table to delete
23090 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65   from.. * pWhere
230a0 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
230b0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44   clause of the D
230c0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
230d0 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
230e0 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
230f0 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
23100 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ULL.. *. * (op =
23110 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20  = TK_UPDATE). * 
23120 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
23130 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
23140 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74  e table to updat
23150 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  e.. * pWhere    
23160 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
23170 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54  use of the UPDAT
23180 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
23190 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
231a0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
231b0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
231c0 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
231d0 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63   A list of the c
231e0 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65  olumns to update
231f0 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73   and the express
23200 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20  ions to update. 
23210 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
23220 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69  hem to. See sqli
23230 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75  te3Update() docu
23240 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43  mentation of "pC
23250 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20  hanges". *      
23260 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74          argument
23270 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20  .. *. */.struct 
23280 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20  TriggerStep {.  
23290 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
232a0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
232b0 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
232c0 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20  ATE, TK_INSERT, 
232d0 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75  TK_SELECT */.  u
232e0 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  8 orconf;       
232f0 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61      /* OE_Rollba
23300 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69  ck etc. */.  Tri
23310 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20  gger *pTrig;    
23320 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72    /* The trigger
23330 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20   that this step 
23340 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a  is a part of */.
23350 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
23360 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54  t;     /* SELECT
23370 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48   statement or RH
23380 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f  S of INSERT INTO
23390 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20   SELECT ... */. 
233a0 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20   char *zTarget; 
233b0 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20        /* Target 
233c0 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45  table for DELETE
233d0 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54  , UPDATE, INSERT
233e0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
233f0 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  re;        /* Th
23400 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
23410 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  or DELETE or UPD
23420 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45  ATE steps */.  E
23430 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69  xprList *pExprLi
23440 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73  st; /* SET claus
23450 65 20 66 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  e for UPDATE */.
23460 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73    IdList *pIdLis
23470 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  t;     /* Column
23480 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52   names for INSER
23490 54 20 2a 2f 0a 20 20 55 70 73 65 72 74 20 2a 70  T */.  Upsert *p
234a0 55 70 73 65 72 74 3b 20 20 20 20 20 2f 2a 20 55  Upsert;     /* U
234b0 70 73 65 72 74 20 63 6c 61 75 73 65 73 20 6f 6e  psert clauses on
234c0 20 61 6e 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20   an INSERT */.  
234d0 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20  char *zSpan;    
234e0 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
234f0 20 53 51 4c 20 74 65 78 74 20 6f 66 20 74 68 69   SQL text of thi
23500 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 54  s command */.  T
23510 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78  riggerStep *pNex
23520 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74  t;  /* Next in t
23530 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a  he link-list */.
23540 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
23550 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65  Last;  /* Last e
23560 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c  lement in link-l
23570 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31  ist. Valid for 1
23580 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a  st elem only */.
23590 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
235a0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
235b0 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
235c0 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  mation used by t
235d0 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a  he sqliteFix....
235e0 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74  ** routines as t
235f0 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72  hey walk the par
23600 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20  se tree to make 
23610 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e  database referen
23620 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e  ces.** explicit.
23630 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
23640 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78  ct DbFixer DbFix
23650 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78  er;.struct DbFix
23660 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  er {.  Parse *pP
23670 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68  arse;      /* Th
23680 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78  e parsing contex
23690 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67  t.  Error messag
236a0 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20  es written here 
236b0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
236c0 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20  hema;    /* Fix 
236d0 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63  items to this sc
236e0 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56  hema */.  int bV
236f0 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a  arOnly;       /*
23700 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61   Check for varia
23710 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f  ble references o
23720 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  nly */.  const c
23730 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20  har *zDb;    /* 
23740 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62  Make sure all ob
23750 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69  jects are contai
23760 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61  ned in this data
23770 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
23780 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a  char *zType;  /*
23790 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e   Type of the con
237a0 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
237b0 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
237c0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65   */.  const Toke
237d0 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d  n *pName; /* Nam
237e0 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
237f0 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
23800 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
23810 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  };../*.** An obj
23820 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63  ected used to ac
23830 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78  cumulate the tex
23840 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68  t of a string wh
23850 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74  ere we.** do not
23860 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f   necessarily kno
23870 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74  w how big the st
23880 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20  ring will be in 
23890 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
238a0 63 74 20 73 71 6c 69 74 65 33 5f 73 74 72 20 7b  ct sqlite3_str {
238b0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
238c0 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f          /* Optio
238d0 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72  nal database for
238e0 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e   lookaside.  Can
238f0 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68   be NULL */.  ch
23900 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20  ar *zText;      
23910 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67     /* The string
23920 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61   collected so fa
23930 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c  r */.  u32  nAll
23940 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  oc;         /* A
23950 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61  mount of space a
23960 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78  llocated in zTex
23970 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c  t */.  u32  mxAl
23980 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  loc;        /* M
23990 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61  aximum allowed a
239a0 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f  llocation.  0 fo
239b0 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67  r no malloc usag
239c0 65 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68 61  e */.  u32  nCha
239d0 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  r;          /* L
239e0 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
239f0 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ing so far */.  
23a00 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20  u8   accError;  
23a10 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e       /* SQLITE_N
23a20 4f 4d 45 4d 20 6f 72 20 53 51 4c 49 54 45 5f 54  OMEM or SQLITE_T
23a30 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20 20  OOBIG */.  u8   
23a40 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20 20  printfFlags;    
23a50 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  /* SQLITE_PRINTF
23a60 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a   flags below */.
23a70 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  };.#define SQLIT
23a80 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41  E_PRINTF_INTERNA
23a90 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74 65 72  L 0x01  /* Inter
23aa0 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e  nal-use-only con
23ab0 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65 64 20  verters allowed 
23ac0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
23ad0 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43  E_PRINTF_SQLFUNC
23ae0 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c 20 66    0x02  /* SQL f
23af0 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
23b00 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20 2a 2f  s to VXPrintf */
23b10 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
23b20 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 20  PRINTF_MALLOCED 
23b30 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66  0x04  /* True if
23b40 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f 63 61   xText is alloca
23b50 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a 23 64  ted space */..#d
23b60 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63 65 64  efine isMalloced
23b70 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72 69 6e  (X)  (((X)->prin
23b80 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49 54 45  tfFlags & SQLITE
23b90 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44  _PRINTF_MALLOCED
23ba0 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20  )!=0).../*.** A 
23bb0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
23bc0 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
23bd0 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65  d to communicate
23be0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
23bf0 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74  from sqlite3Init
23c00 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68   and OP_ParseSch
23c10 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c  ema into the sql
23c20 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
23c30 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
23c40 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  uct {.  sqlite3 
23c50 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  *db;        /* T
23c60 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69 6e  he database bein
23c70 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
23c80 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d  .  char **pzErrM
23c90 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20  sg;    /* Error 
23ca0 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20 68  message stored h
23cb0 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  ere */.  int iDb
23cc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
23cd0 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62  0 for main datab
23ce0 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50  ase.  1 for TEMP
23cf0 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48  , 2.. for ATTACH
23d00 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  ed */.  int rc; 
23d10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
23d20 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65  esult code store
23d30 64 20 68 65 72 65 20 2a 2f 0a 20 20 75 33 32 20  d here */.  u32 
23d40 6d 49 6e 69 74 46 6c 61 67 73 3b 20 20 20 20 20  mInitFlags;     
23d50 2f 2a 20 46 6c 61 67 73 20 63 6f 6e 74 72 6f 6c  /* Flags control
23d60 6c 69 6e 67 20 65 72 72 6f 72 20 6d 65 73 73 61  ling error messa
23d70 67 65 73 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74  ges */.} InitDat
23d80 61 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  a;../*.** Allowe
23d90 64 20 76 61 6c 75 65 73 20 66 6f 72 20 6d 49 6e  d values for mIn
23da0 69 74 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  itFlags.*/.#defi
23db0 6e 65 20 49 4e 49 54 46 4c 41 47 5f 41 6c 74 65  ne INITFLAG_Alte
23dc0 72 54 61 62 6c 65 20 20 20 30 78 30 30 30 31 20  rTable   0x0001 
23dd0 20 2f 2a 20 54 68 69 73 20 69 73 20 61 20 72 65   /* This is a re
23de0 70 61 72 73 65 20 61 66 74 65 72 20 41 4c 54 45  parse after ALTE
23df0 52 20 54 41 42 4c 45 20 2a 2f 0a 0a 2f 2a 0a 2a  R TABLE */../*.*
23e00 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74  * Structure cont
23e10 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f  aining global co
23e20 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61  nfiguration data
23e30 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite 
23e40 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  library..**.** T
23e50 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c  his structure al
23e60 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65  so contains some
23e70 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69   state informati
23e80 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71  on..*/.struct Sq
23e90 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20  lite3Config {.  
23ea0 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20  int bMemstat;   
23eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ec0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
23ed0 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75  ble memory statu
23ee0 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65  s */.  int bCore
23ef0 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
23f00 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
23f10 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20   to enable core 
23f20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e  mutexing */.  in
23f30 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20  t bFullMutex;   
23f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f50 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
23f60 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20  e full mutexing 
23f70 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72  */.  int bOpenUr
23f80 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
23f90 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
23fa0 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65  o interpret file
23fb0 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f  names as URIs */
23fc0 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20  .  int bUseCis; 
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fe0 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65       /* Use cove
23ff0 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72  ring indices for
24000 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20   full-scans */. 
24010 20 69 6e 74 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f   int bSmallMallo
24020 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
24030 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c 61 72 67     /* Avoid larg
24040 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
24050 69 6f 6e 73 20 69 66 20 74 72 75 65 20 2a 2f 0a  ions if true */.
24060 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20    int mxStrlen; 
24070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24080 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
24090 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a  tring length */.
240a0 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75    int neverCorru
240b0 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pt;             
240c0 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
240d0 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66  is always well-f
240e0 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73  ormed */.  int s
240f0 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  zLookaside;     
24100 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24110 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
24120 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f  e buffer size */
24130 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64  .  int nLookasid
24140 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
24150 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
24160 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
24170 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20   count */.  int 
24180 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20  nStmtSpill;     
24190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
241a0 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70   Stmt-journal sp
241b0 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65  ill-to-disk thre
241c0 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74  shold */.  sqlit
241d0 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d  e3_mem_methods m
241e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
241f0 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79  Low-level memory
24200 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65   allocation inte
24210 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
24220 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
24230 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20   mutex;      /* 
24240 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20  Low-level mutex 
24250 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
24260 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65  qlite3_pcache_me
24270 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20  thods2 pcache2; 
24280 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61   /* Low-level pa
24290 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61  ge-cache interfa
242a0 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48  ce */.  void *pH
242b0 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
242c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61            /* Hea
242d0 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20  p storage space 
242e0 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20  */.  int nHeap; 
242f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24300 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
24310 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69  f pHeap[] */.  i
24320 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b  nt mnReq, mxReq;
24330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24340 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20   /* Min and max 
24350 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69  heap requests si
24360 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  zes */.  sqlite3
24370 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20  _int64 szMmap;  
24380 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d             /* mm
24390 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f  ap() space per o
243a0 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71  pen file */.  sq
243b0 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d  lite3_int64 mxMm
243c0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
243d0 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65  /* Maximum value
243e0 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20   for szMmap */. 
243f0 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20   void *pPage;   
24400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24410 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65     /* Page cache
24420 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
24430 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20   szPage;        
24440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24450 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70  * Size of each p
24460 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  age in pPage[] *
24470 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20  /.  int nPage;  
24480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24490 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
244a0 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67  of pages in pPag
244b0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50  e[] */.  int mxP
244c0 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20  arserStack;     
244d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61             /* ma
244e0 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74  ximum depth of t
244f0 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20  he parser stack 
24500 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43  */.  int sharedC
24510 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20  acheEnabled;    
24520 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69         /* true i
24530 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  f shared-cache m
24540 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  ode enabled */. 
24550 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20   u32 szPma;     
24560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24570 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f     /* Maximum So
24580 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f  rter PMA size */
24590 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20  .  /* The above 
245a0 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c  might be initial
245b0 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f  ized to non-zero
245c0 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
245d0 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a   need to always.
245e0 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62    ** initially b
245f0 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e  e zero, however.
24600 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74   */.  int isInit
24610 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24620 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
24630 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61  after initializa
24640 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65  tion has finishe
24650 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f  d */.  int inPro
24660 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20  gress;          
24670 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
24680 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a   while initializ
24690 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
246a0 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74  s */.  int isMut
246b0 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  exInit;         
246c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
246d0 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61   after mutexes a
246e0 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  re initialized *
246f0 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63  /.  int isMalloc
24700 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
24710 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
24720 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
24730 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
24740 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b  nt isPCacheInit;
24750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24760 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
24770 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
24780 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ized */.  int nR
24790 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  efInitMutex;    
247a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
247b0 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f  umber of users o
247c0 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a  f pInitMutex */.
247d0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
247e0 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  *pInitMutex;    
247f0 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65      /* Mutex use
24800 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69  d by sqlite3_ini
24810 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76  tialize() */.  v
24820 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64  oid (*xLog)(void
24830 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
24840 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20  *); /* Function 
24850 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20  for logging */. 
24860 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20   void *pLogArg; 
24870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24880 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
24890 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28  rgument to xLog(
248a0 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ) */.#ifdef SQLI
248b0 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47  TE_ENABLE_SQLLOG
248c0 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67  .  void(*xSqllog
248d0 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
248e0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e  ,const char*, in
248f0 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c  t);.  void *pSql
24900 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23  logArg;.#endif.#
24910 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42  ifdef SQLITE_VDB
24920 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20  E_COVERAGE.  /* 
24930 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  The following ca
24940 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e  llback (if not N
24950 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ULL) is invoked 
24960 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72  on every VDBE br
24970 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74  anch.  ** operat
24980 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61  ion.  Set the ca
24990 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c  llback using SQL
249a0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42  ITE_TESTCTRL_VDB
249b0 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f  E_COVERAGE..  */
249c0 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42  .  void (*xVdbeB
249d0 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 75 6e 73  ranch)(void*,uns
249e0 69 67 6e 65 64 20 69 53 72 63 4c 69 6e 65 2c 75  igned iSrcLine,u
249f0 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b  8 eThis,u8 eMx);
24a00 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f    /* Callback */
24a10 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72  .  void *pVdbeBr
24a20 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20  anchArg;        
24a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24a50 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  1st argument */.
24a60 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
24a70 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
24a80 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61  .  int (*xTestCa
24a90 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20  llback)(int);   
24aa0 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20       /* Invoked 
24ab0 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  by sqlite3FaultS
24ac0 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  im() */.#endif. 
24ad0 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46   int bLocaltimeF
24ae0 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20  ault;           
24af0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61     /* True to fa
24b00 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63  il localtime() c
24b10 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4f  alls */.  int iO
24b20 6e 63 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c  nceResetThreshol
24b30 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  d;          /* W
24b40 68 65 6e 20 74 6f 20 72 65 73 65 74 20 4f 50 5f  hen to reset OP_
24b50 4f 6e 63 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f  Once counters */
24b60 0a 20 20 75 33 32 20 73 7a 53 6f 72 74 65 72 52  .  u32 szSorterR
24b70 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ef;             
24b80 20 20 20 20 20 2f 2a 20 4d 69 6e 20 73 69 7a 65       /* Min size
24b90 20 69 6e 20 62 79 74 65 73 20 74 6f 20 75 73 65   in bytes to use
24ba0 20 73 6f 72 74 65 72 2d 72 65 66 73 20 2a 2f 0a   sorter-refs */.
24bb0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d  };../*.** This m
24bc0 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
24bd0 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20  ide of assert() 
24be0 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e  statements to in
24bf0 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74  dicate that.** t
24c00 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c  he assert is onl
24c10 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c  y valid on a wel
24c20 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
24c30 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a  e.  Instead of:.
24c40 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
24c50 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65  ( X );.**.** One
24c60 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20   writes:.**.**  
24c70 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20     assert( X || 
24c80 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a  CORRUPT_DB );.**
24c90 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69  .** CORRUPT_DB i
24ca0 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f  s true during no
24cb0 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20  rmal operation. 
24cc0 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73   CORRUPT_DB does
24cd0 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a   not indicate.**
24ce0 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61   that the databa
24cf0 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79  se is definitely
24d00 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74   corrupt, only t
24d10 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20  hat it might be 
24d20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20  corrupt..** For 
24d30 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c  most test cases,
24d40 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73   CORRUPT_DB is s
24d50 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e  et to false usin
24d60 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73  g a special.** s
24d70 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
24d80 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61  rol().  This ena
24d90 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74  bles assert() st
24da0 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76  atements to prov
24db0 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74  e.** things that
24dc0 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65   are always true
24dd0 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64   for well-formed
24de0 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
24df0 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44  define CORRUPT_D
24e00 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69  B  (sqlite3Confi
24e10 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d  g.neverCorrupt==
24e20 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78  0)../*.** Contex
24e30 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64  t pointer passed
24e40 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68   down through th
24e50 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a  e tree-walk..*/.
24e60 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a  struct Walker {.
24e70 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
24e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
24ea0 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
24eb0 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72  */.  int (*xExpr
24ec0 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
24ed0 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f  *, Expr*);     /
24ee0 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65  * Callback for e
24ef0 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
24f00 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c  int (*xSelectCal
24f10 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53  lback)(Walker*,S
24f20 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c  elect*);  /* Cal
24f30 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
24f40 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  s */.  void (*xS
24f50 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28  electCallback2)(
24f60 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29  Walker*,Select*)
24f70 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62  ;/* Second callb
24f80 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
24f90 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44  */.  int walkerD
24fa0 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  epth;           
24fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24fc0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71  * Number of subq
24fd0 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65  ueries */.  u8 e
24fe0 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
24ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25000 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c        /* A small
25010 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65   processing code
25020 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20   */.  union {   
25030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25050 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f  /* Extra data fo
25060 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  r callback */.  
25070 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
25080 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  NC;             
25090 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
250a0 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f  aming context */
250b0 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  .    int n;     
250c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
250e0 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  * A counter */. 
250f0 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20     int iCur;    
25100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25110 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25120 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  A cursor number 
25130 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a  */.    SrcList *
25140 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20  pSrcList;       
25150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25160 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20   /* FROM clause 
25170 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72  */.    struct Sr
25180 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e  cCount *pSrcCoun
25190 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
251a0 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c   /* Counting col
251b0 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a  umn references *
251c0 2f 0a 20 20 20 20 73 74 72 75 63 74 20 43 43 75  /.    struct CCu
251d0 72 48 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74  rHint *pCCurHint
251e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
251f0 2f 2a 20 55 73 65 64 20 62 79 20 63 6f 64 65 43  /* Used by codeC
25200 75 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20  ursorHint() */. 
25210 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20     int *aiCol;  
25220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25230 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25240 61 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20  array of column 
25250 69 6e 64 65 78 65 73 20 2a 2f 0a 20 20 20 20 73  indexes */.    s
25260 74 72 75 63 74 20 49 64 78 43 6f 76 65 72 20 2a  truct IdxCover *
25270 70 49 64 78 43 6f 76 65 72 3b 20 20 20 20 20 20  pIdxCover;      
25280 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63           /* Chec
25290 6b 20 66 6f 72 20 69 6e 64 65 78 20 63 6f 76 65  k for index cove
252a0 72 61 67 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  rage */.    stru
252b0 63 74 20 49 64 78 45 78 70 72 54 72 61 6e 73 20  ct IdxExprTrans 
252c0 2a 70 49 64 78 54 72 61 6e 73 3b 20 20 20 20 20  *pIdxTrans;     
252d0 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74        /* Convert
252e0 20 69 64 78 65 64 20 65 78 70 72 20 74 6f 20 63   idxed expr to c
252f0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70  olumn */.    Exp
25300 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
25310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25320 20 20 20 20 20 20 20 2f 2a 20 47 52 4f 55 50 20         /* GROUP 
25330 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  BY clause */.   
25340 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
25350 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25360 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 41             /* HA
25370 56 49 4e 47 20 74 6f 20 57 48 45 52 45 20 63 6c  VING to WHERE cl
25380 61 75 73 65 20 63 74 78 20 2a 2f 0a 20 20 20 20  ause ctx */.    
25390 73 74 72 75 63 74 20 57 69 6e 64 6f 77 52 65 77  struct WindowRew
253a0 72 69 74 65 20 2a 70 52 65 77 72 69 74 65 3b 20  rite *pRewrite; 
253b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 69 6e            /* Win
253c0 64 6f 77 20 72 65 77 72 69 74 65 20 63 6f 6e 74  dow rewrite cont
253d0 65 78 74 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  ext */.    struc
253e0 74 20 57 68 65 72 65 43 6f 6e 73 74 20 2a 70 43  t WhereConst *pC
253f0 6f 6e 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  onst;           
25400 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c       /* WHERE cl
25410 61 75 73 65 20 63 6f 6e 73 74 61 6e 74 73 20 2a  ause constants *
25420 2f 0a 20 20 20 20 73 74 72 75 63 74 20 52 65 6e  /.    struct Ren
25430 61 6d 65 43 74 78 20 2a 70 52 65 6e 61 6d 65 3b  ameCtx *pRename;
25440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25450 2f 2a 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e  /* RENAME COLUMN
25460 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 7d 20   context */.  } 
25470 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72  u;.};../* Forwar
25480 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a  d declarations *
25490 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  /.int sqlite3Wal
254a0 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45  kExpr(Walker*, E
254b0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
254c0 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57  e3WalkExprList(W
254d0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  alker*, ExprList
254e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
254f0 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72  alkSelect(Walker
25500 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
25510 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
25520 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  ctExpr(Walker*, 
25530 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
25540 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46  lite3WalkSelectF
25550 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  rom(Walker*, Sel
25560 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
25570 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57  e3ExprWalkNoop(W
25580 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
25590 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
255a0 74 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72  tWalkNoop(Walker
255b0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
255c0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
255d0 6c 6b 46 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20  lkFail(Walker*, 
255e0 53 65 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65 66  Select*);.#ifdef
255f0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f   SQLITE_DEBUG.vo
25600 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
25610 57 61 6c 6b 41 73 73 65 72 74 32 28 57 61 6c 6b  WalkAssert2(Walk
25620 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23  er*, Select*);.#
25630 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  endif../*.** Ret
25640 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  urn code from th
25650 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c  e parse-tree wal
25660 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20  king primitives 
25670 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c  and their.** cal
25680 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69  lbacks..*/.#defi
25690 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20  ne WRC_Continue 
256a0 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e     0   /* Contin
256b0 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69  ue down into chi
256c0 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ldren */.#define
256d0 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20   WRC_Prune      
256e0 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69   1   /* Omit chi
256f0 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e  ldren but contin
25700 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69  ue walking sibli
25710 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ngs */.#define W
25720 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32  RC_Abort       2
25730 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68     /* Abandon th
25740 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a  e tree walk */..
25750 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
25760 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
25770 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61  ure represents a
25780 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d   set of one or m
25790 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d  ore CTEs.** (com
257a0 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
257b0 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62  sions) created b
257c0 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20  y a single WITH 
257d0 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
257e0 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e  t With {.  int n
257f0 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cte;            
25800 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
25810 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20  mber of CTEs in 
25820 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20  the WITH clause 
25830 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65  */.  With *pOute
25840 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
25850 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69       /* Containi
25860 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20  ng WITH clause, 
25870 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72  or NULL */.  str
25880 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20  uct Cte {       
25890 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
258a0 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20  For each CTE in 
258b0 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e  the WITH clause.
258c0 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ... */.    char 
258d0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
258e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
258f0 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a  me of this CTE *
25900 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  /.    ExprList *
25910 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20  pCols;          
25920 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
25930 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e   explicit column
25940 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20   names, or NULL 
25950 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
25960 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
25970 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
25980 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73  finition of this
25990 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73   CTE */.    cons
259a0 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b  t char *zCteErr;
259b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
259c0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72  rror message for
259d0 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65   circular refere
259e0 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d  nces */.  } a[1]
259f0 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  ;.};..#ifdef SQL
25a00 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
25a10 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
25a20 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65  he TreeView obje
25a30 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 70  ct is used for p
25a40 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74  rinting the cont
25a50 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73  ent of.** data s
25a60 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c  tructures on sql
25a70 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
25a80 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c  ) using a tree-l
25a90 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72  ike view..*/.str
25aa0 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20  uct TreeView {. 
25ab0 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20   int iLevel;    
25ac0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
25ad0 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74  h level of the t
25ae0 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f  ree we are on */
25af0 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30  .  u8  bLine[100
25b00 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72  ];         /* Dr
25b10 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63  aw vertical in c
25b20 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65  olumn i if bLine
25b30 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d  [i] is true */.}
25b40 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
25b50 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a  TE_DEBUG */../*.
25b60 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69  ** This object i
25b70 73 20 75 73 65 64 20 69 6e 20 76 61 72 69 6f 69  s used in varioi
25b80 75 73 20 77 61 79 73 2c 20 61 6c 6c 20 72 65 6c  us ways, all rel
25b90 61 74 65 64 20 74 6f 20 77 69 6e 64 6f 77 20 66  ated to window f
25ba0 75 6e 63 74 69 6f 6e 73 0a 2a 2a 0a 2a 2a 20 20  unctions.**.**  
25bb0 20 28 31 29 20 41 20 73 69 6e 67 6c 65 20 69 6e   (1) A single in
25bc0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
25bd0 74 72 75 63 74 75 72 65 20 69 73 20 61 74 74 61  tructure is atta
25be0 63 68 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 20  ched to the.**  
25bf0 20 20 20 20 20 74 68 65 20 45 78 70 72 2e 70 57       the Expr.pW
25c00 69 6e 20 66 69 65 6c 64 20 66 6f 72 20 65 61 63  in field for eac
25c10 68 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  h window functio
25c20 6e 20 69 6e 20 61 6e 20 65 78 70 72 65 73 73 69  n in an expressi
25c30 6f 6e 20 74 72 65 65 2e 0a 2a 2a 20 20 20 20 20  on tree..**     
25c40 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20 68 6f    This object ho
25c50 6c 64 73 20 74 68 65 20 69 6e 66 6f 72 6d 61 74  lds the informat
25c60 69 6f 6e 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  ion contained in
25c70 20 74 68 65 20 4f 56 45 52 20 63 6c 61 75 73 65   the OVER clause
25c80 2c 0a 2a 2a 20 20 20 20 20 20 20 70 6c 75 73 20  ,.**       plus 
25c90 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64  additional field
25ca0 73 20 75 73 65 64 20 64 75 72 69 6e 67 20 63 6f  s used during co
25cb0 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 2e 0a 2a  de generation..*
25cc0 2a 0a 2a 2a 20 20 20 28 32 29 20 41 6c 6c 20 77  *.**   (2) All w
25cd0 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20  indow functions 
25ce0 69 6e 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45  in a single SELE
25cf0 43 54 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64  CT form a linked
25d00 2d 6c 69 73 74 0a 2a 2a 20 20 20 20 20 20 20 61  -list.**       a
25d10 74 74 61 63 68 65 64 20 74 6f 20 53 65 6c 65 63  ttached to Selec
25d20 74 2e 70 57 69 6e 2e 20 20 54 68 65 20 57 69 6e  t.pWin.  The Win
25d30 64 6f 77 2e 70 46 75 6e 63 20 61 6e 64 20 57 69  dow.pFunc and Wi
25d40 6e 64 6f 77 2e 70 45 78 70 72 0a 2a 2a 20 20 20  ndow.pExpr.**   
25d50 20 20 20 20 66 69 65 6c 64 73 20 70 6f 69 6e 74      fields point
25d60 20 62 61 63 6b 20 74 6f 20 74 68 65 20 65 78 70   back to the exp
25d70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
25d80 74 68 65 20 77 69 6e 64 6f 77 20 66 75 6e 63 74  the window funct
25d90 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 33 29  ion..**.**   (3)
25da0 20 54 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68   The terms of th
25db0 65 20 57 49 4e 44 4f 57 20 63 6c 61 75 73 65 20  e WINDOW clause 
25dc0 6f 66 20 61 20 53 45 4c 45 43 54 20 61 72 65 20  of a SELECT are 
25dd0 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 74 68 69  instances of thi
25de0 73 0a 2a 2a 20 20 20 20 20 20 20 6f 62 6a 65 63  s.**       objec
25df0 74 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  t on a linked li
25e00 73 74 20 61 74 74 61 63 68 65 64 20 74 6f 20 53  st attached to S
25e10 65 6c 65 63 74 2e 70 57 69 6e 44 65 66 6e 2e 0a  elect.pWinDefn..
25e20 2a 2a 0a 2a 2a 20 54 68 65 20 75 73 65 73 20 28  **.** The uses (
25e30 31 29 20 61 6e 64 20 28 32 29 20 61 72 65 20 72  1) and (2) are r
25e40 65 61 6c 6c 79 20 74 68 65 20 73 61 6d 65 20 57  eally the same W
25e50 69 6e 64 6f 77 20 6f 62 6a 65 63 74 20 74 68 61  indow object tha
25e60 74 20 6a 75 73 74 20 68 61 70 70 65 6e 73 0a 2a  t just happens.*
25e70 2a 20 74 6f 20 62 65 20 61 63 63 65 73 73 69 62  * to be accessib
25e80 6c 65 20 69 6e 20 74 77 6f 20 64 69 66 66 65 72  le in two differ
25e90 65 6e 74 20 77 61 79 73 2e 20 20 55 73 65 20 28  ent ways.  Use (
25ea0 33 29 20 69 73 20 61 72 65 20 73 65 70 61 72 61  3) is are separa
25eb0 74 65 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73  te objects..*/.s
25ec0 74 72 75 63 74 20 57 69 6e 64 6f 77 20 7b 0a 20  truct Window {. 
25ed0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
25ee0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
25ef0 20 6f 66 20 77 69 6e 64 6f 77 20 28 6d 61 79 20   of window (may 
25f00 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45 78  be NULL) */.  Ex
25f10 70 72 4c 69 73 74 20 2a 70 50 61 72 74 69 74 69  prList *pPartiti
25f20 6f 6e 3b 20 20 20 2f 2a 20 50 41 52 54 49 54 49  on;   /* PARTITI
25f30 4f 4e 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ON BY clause */.
25f40 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64    ExprList *pOrd
25f50 65 72 42 79 3b 20 20 20 20 20 2f 2a 20 4f 52 44  erBy;     /* ORD
25f60 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ER BY clause */.
25f70 20 20 75 38 20 65 54 79 70 65 3b 20 20 20 20 20    u8 eType;     
25f80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
25f90 52 41 4e 47 45 20 6f 72 20 54 4b 5f 52 4f 57 53  RANGE or TK_ROWS
25fa0 20 2a 2f 0a 20 20 75 38 20 65 53 74 61 72 74 3b   */.  u8 eStart;
25fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25fc0 20 55 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52 52   UNBOUNDED, CURR
25fd0 45 4e 54 2c 20 50 52 45 43 45 44 49 4e 47 20 6f  ENT, PRECEDING o
25fe0 72 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20  r FOLLOWING */. 
25ff0 20 75 38 20 65 45 6e 64 3b 20 20 20 20 20 20 20   u8 eEnd;       
26000 20 20 20 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f           /* UNBO
26010 55 4e 44 45 44 2c 20 43 55 52 52 45 4e 54 2c 20  UNDED, CURRENT, 
26020 50 52 45 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c  PRECEDING or FOL
26030 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 45 78 70 72  LOWING */.  Expr
26040 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
26050 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
26060 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 50 52  n for "<expr> PR
26070 45 43 45 44 49 4e 47 22 20 2a 2f 0a 20 20 45 78  ECEDING" */.  Ex
26080 70 72 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  pr *pEnd;       
26090 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
260a0 69 6f 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20  ion for "<expr> 
260b0 46 4f 4c 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20 20  FOLLOWING" */.  
260c0 57 69 6e 64 6f 77 20 2a 70 4e 65 78 74 57 69 6e  Window *pNextWin
260d0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  ;       /* Next 
260e0 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20  window function 
260f0 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 69  belonging to thi
26100 73 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 45 78  s SELECT */.  Ex
26110 70 72 20 2a 70 46 69 6c 74 65 72 3b 20 20 20 20  pr *pFilter;    
26120 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 49 4c        /* The FIL
26130 54 45 52 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  TER expression *
26140 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75  /.  FuncDef *pFu
26150 6e 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  nc;         /* T
26160 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  he function */. 
26170 20 69 6e 74 20 69 45 70 68 43 73 72 3b 20 20 20   int iEphCsr;   
26180 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 74           /* Part
26190 69 74 69 6f 6e 20 62 75 66 66 65 72 20 6f 72 20  ition buffer or 
261a0 50 65 65 72 20 62 75 66 66 65 72 20 2a 2f 0a 20  Peer buffer */. 
261b0 20 69 6e 74 20 72 65 67 41 63 63 75 6d 3b 0a 20   int regAccum;. 
261c0 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 0a   int regResult;.
261d0 20 20 69 6e 74 20 63 73 72 41 70 70 3b 20 20 20    int csrApp;   
261e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e            /* Fun
261f0 63 74 69 6f 6e 20 63 75 72 73 6f 72 20 28 75 73  ction cursor (us
26200 65 64 20 62 79 20 6d 69 6e 2f 6d 61 78 29 20 2a  ed by min/max) *
26210 2f 0a 20 20 69 6e 74 20 72 65 67 41 70 70 3b 20  /.  int regApp; 
26220 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
26230 75 6e 63 74 69 6f 6e 20 72 65 67 69 73 74 65 72  unction register
26240 20 28 61 6c 73 6f 20 75 73 65 64 20 62 79 20 6d   (also used by m
26250 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74  in/max) */.  int
26260 20 72 65 67 50 61 72 74 3b 20 20 20 20 20 20 20   regPart;       
26270 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 69 6e       /* First in
26280 20 61 20 73 65 74 20 6f 66 20 72 65 67 69 73 74   a set of regist
26290 65 72 73 20 68 6f 6c 64 69 6e 67 20 50 41 52 54  ers holding PART
262a0 49 54 49 4f 4e 20 42 59 0a 20 20 20 20 20 20 20  ITION BY.       
262b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262c0 20 20 20 2a 2a 20 61 6e 64 20 4f 52 44 45 52 20     ** and ORDER 
262d0 42 59 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  BY values for th
262e0 65 20 77 69 6e 64 6f 77 20 2a 2f 0a 20 20 45 78  e window */.  Ex
262f0 70 72 20 2a 70 4f 77 6e 65 72 3b 20 20 20 20 20  pr *pOwner;     
26300 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
26310 69 6f 6e 20 6f 62 6a 65 63 74 20 74 68 69 73 20  ion object this 
26320 77 69 6e 64 6f 77 20 69 73 20 61 74 74 61 63 68  window is attach
26330 65 64 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e  ed to */.  int n
26340 42 75 66 66 65 72 43 6f 6c 3b 20 20 20 20 20 20  BufferCol;      
26350 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
26360 63 6f 6c 75 6d 6e 73 20 69 6e 20 62 75 66 66 65  columns in buffe
26370 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  r table */.  int
26380 20 69 41 72 67 43 6f 6c 3b 20 20 20 20 20 20 20   iArgCol;       
26390 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 6f       /* Offset o
263a0 66 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  f first argument
263b0 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69   for this functi
263c0 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 6e 64 65  on */.};..#ifnde
263d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49  f SQLITE_OMIT_WI
263e0 4e 44 4f 57 46 55 4e 43 0a 76 6f 69 64 20 73 71  NDOWFUNC.void sq
263f0 6c 69 74 65 33 57 69 6e 64 6f 77 44 65 6c 65 74  lite3WindowDelet
26400 65 28 73 71 6c 69 74 65 33 2a 2c 20 57 69 6e 64  e(sqlite3*, Wind
26410 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ow*);.void sqlit
26420 65 33 57 69 6e 64 6f 77 4c 69 73 74 44 65 6c 65  e3WindowListDele
26430 74 65 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  te(sqlite3 *db, 
26440 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64  Window *p);.Wind
26450 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f  ow *sqlite3Windo
26460 77 41 6c 6c 6f 63 28 50 61 72 73 65 2a 2c 20 69  wAlloc(Parse*, i
26470 6e 74 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20  nt, int, Expr*, 
26480 69 6e 74 20 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  int , Expr*);.vo
26490 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
264a0 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
264b0 78 70 72 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a  xpr*, Window*);.
264c0 69 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  int sqlite3Windo
264d0 77 43 6f 6d 70 61 72 65 28 50 61 72 73 65 2a 2c  wCompare(Parse*,
264e0 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77   Window*, Window
264f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26500 57 69 6e 64 6f 77 43 6f 64 65 49 6e 69 74 28 50  WindowCodeInit(P
26510 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b  arse*, Window*);
26520 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
26530 64 6f 77 43 6f 64 65 53 74 65 70 28 50 61 72 73  dowCodeStep(Pars
26540 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 57 68 65  e*, Select*, Whe
26550 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2c 20 69 6e  reInfo*, int, in
26560 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  t);.int sqlite3W
26570 69 6e 64 6f 77 52 65 77 72 69 74 65 28 50 61 72  indowRewrite(Par
26580 73 65 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  se*, Select*);.i
26590 6e 74 20 73 71 6c 69 74 65 33 45 78 70 61 6e 64  nt sqlite3Expand
265a0 53 75 62 71 75 65 72 79 28 50 61 72 73 65 2a 2c  Subquery(Parse*,
265b0 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
265c0 69 74 65 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  item*);.void sql
265d0 69 74 65 33 57 69 6e 64 6f 77 55 70 64 61 74 65  ite3WindowUpdate
265e0 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a  (Parse*, Window*
265f0 2c 20 57 69 6e 64 6f 77 2a 2c 20 46 75 6e 63 44  , Window*, FuncD
26600 65 66 2a 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71  ef*);.Window *sq
26610 6c 69 74 65 33 57 69 6e 64 6f 77 44 75 70 28 73  lite3WindowDup(s
26620 71 6c 69 74 65 33 20 2a 64 62 2c 20 45 78 70 72  qlite3 *db, Expr
26630 20 2a 70 4f 77 6e 65 72 2c 20 57 69 6e 64 6f 77   *pOwner, Window
26640 20 2a 70 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71   *p);.Window *sq
26650 6c 69 74 65 33 57 69 6e 64 6f 77 4c 69 73 74 44  lite3WindowListD
26660 75 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  up(sqlite3 *db, 
26670 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 76 6f 69 64  Window *p);.void
26680 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 46 75   sqlite3WindowFu
26690 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 23  nctions(void);.#
266a0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
266b0 6c 69 74 65 33 57 69 6e 64 6f 77 44 65 6c 65 74  lite3WindowDelet
266c0 65 28 61 2c 62 29 0a 23 20 64 65 66 69 6e 65 20  e(a,b).# define 
266d0 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e  sqlite3WindowFun
266e0 63 74 69 6f 6e 73 28 29 0a 23 20 64 65 66 69 6e  ctions().# defin
266f0 65 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41  e sqlite3WindowA
26700 74 74 61 63 68 28 61 2c 62 2c 63 29 0a 23 65 6e  ttach(a,b,c).#en
26710 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d  dif../*.** Assum
26720 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74  ing zIn points t
26730 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
26740 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61 72   of a UTF-8 char
26750 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63  acter,.** advanc
26760 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74  e zIn to point t
26770 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
26780 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54 46   of the next UTF
26790 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f  -8 character..*/
267a0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
267b0 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b  SKIP_UTF8(zIn) {
267c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267d0 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20          \.  if( 
267e0 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30  (*(zIn++))>=0xc0
267f0 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20   ){             
26800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26810 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a   \.    while( (*
26820 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38  zIn & 0xc0)==0x8
26830 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20  0 ){ zIn++; }   
26840 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20            \.  } 
26850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26880 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68     \.}../*.** Th
26890 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20  e SQLITE_*_BKPT 
268a0 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73 74  macros are subst
268b0 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20 65  itutes for the e
268c0 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a  rror codes with.
268d0 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  ** the same name
268e0 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68 65   but without the
268f0 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20   _BKPT suffix.  
26900 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76  These macros inv
26910 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  oke.** routines 
26920 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65 20  that report the 
26930 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77  line-number on w
26940 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f  hich the error o
26950 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69  riginated.** usi
26960 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  ng sqlite3_log()
26970 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20  .  The routines 
26980 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63  also provide a c
26990 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a  onvenient place.
269a0 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62 75  ** to set a debu
269b0 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e  gger breakpoint.
269c0 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  .*/.int sqlite3R
269d0 65 70 6f 72 74 45 72 72 6f 72 28 69 6e 74 20 69  eportError(int i
269e0 45 72 72 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c  Err, int lineno,
269f0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
26a00 70 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pe);.int sqlite3
26a10 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74  CorruptError(int
26a20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69  );.int sqlite3Mi
26a30 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a  suseError(int);.
26a40 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  int sqlite3Canto
26a50 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23  penError(int);.#
26a60 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f  define SQLITE_CO
26a70 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74  RRUPT_BKPT sqlit
26a80 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f  e3CorruptError(_
26a90 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
26aa0 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42   SQLITE_MISUSE_B
26ab0 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73  KPT sqlite3Misus
26ac0 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  eError(__LINE__)
26ad0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
26ae0 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71  CANTOPEN_BKPT sq
26af0 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
26b00 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66  or(__LINE__).#if
26b10 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
26b20 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f  .  int sqlite3No
26b30 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20  memError(int);. 
26b40 20 69 6e 74 20 73 71 6c 69 74 65 33 49 6f 65 72   int sqlite3Ioer
26b50 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29  rnomemError(int)
26b60 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43  ;.  int sqlite3C
26b70 6f 72 72 75 70 74 50 67 6e 6f 45 72 72 6f 72 28  orruptPgnoError(
26b80 69 6e 74 2c 50 67 6e 6f 29 3b 0a 23 20 64 65 66  int,Pgno);.# def
26b90 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  ine SQLITE_NOMEM
26ba0 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d  _BKPT sqlite3Nom
26bb0 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  emError(__LINE__
26bc0 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
26bd0 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b  E_IOERR_NOMEM_BK
26be0 50 54 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e  PT sqlite3Ioerrn
26bf0 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  omemError(__LINE
26c00 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  __).# define SQL
26c10 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f  ITE_CORRUPT_PGNO
26c20 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75  (P) sqlite3Corru
26c30 70 74 50 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49  ptPgnoError(__LI
26c40 4e 45 5f 5f 2c 28 50 29 29 0a 23 65 6c 73 65 0a  NE__,(P)).#else.
26c50 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
26c60 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54  NOMEM_BKPT SQLIT
26c70 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65  E_NOMEM.# define
26c80 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
26c90 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f  MEM_BKPT SQLITE_
26ca0 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65  IOERR_NOMEM.# de
26cb0 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  fine SQLITE_CORR
26cc0 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69  UPT_PGNO(P) sqli
26cd0 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
26ce0 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6e 64 69 66  __LINE__).#endif
26cf0 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64  ../*.** FTS3 and
26d00 20 46 54 53 34 20 62 6f 74 68 20 72 65 71 75 69   FTS4 both requi
26d10 72 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  re virtual table
26d20 20 73 75 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20   support.*/.#if 
26d30 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
26d40 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
26d50 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  ).# undef SQLITE
26d60 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20 75  _ENABLE_FTS3.# u
26d70 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
26d80 4c 45 5f 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a  LE_FTS4.#endif..
26d90 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65  /*.** FTS4 is re
26da0 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f  ally an extensio
26db0 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20  n for FTS3.  It 
26dc0 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  is enabled using
26dd0 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45   the.** SQLITE_E
26de0 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f  NABLE_FTS3 macro
26df0 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20  .  But to avoid 
26e00 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73  confusion we als
26e10 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51  o call.** the SQ
26e20 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
26e30 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20   macro to serve 
26e40 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  as an alias for 
26e50 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
26e60 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  S3..*/.#if defin
26e70 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
26e80 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e  _FTS4) && !defin
26e90 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
26ea0 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20  _FTS3).# define 
26eb0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
26ec0 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  S3 1.#endif../*.
26ed0 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68  ** The ctype.h h
26ee0 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20  eader is needed 
26ef0 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79  for non-ASCII sy
26f00 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c  stems.  It is al
26f10 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20  so.** needed by 
26f20 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69  FTS3 when FTS3 i
26f30 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  s included in th
26f40 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a  e amalgamation..
26f50 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
26f60 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c  SQLITE_ASCII) ||
26f70 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
26f80 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
26f90 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  S3) && defined(S
26fa0 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
26fb0 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c  ON)).# include <
26fc0 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a  ctype.h>.#endif.
26fd0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
26fe0 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69  wing macros mimi
26ff0 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c  c the standard l
27000 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73  ibrary functions
27010 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69   toupper(),.** i
27020 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75  sspace(), isalnu
27030 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61  m(), isdigit() a
27040 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72  nd isxdigit(), r
27050 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65  espectively. The
27060 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69  .** sqlite versi
27070 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f  ons only work fo
27080 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  r ASCII characte
27090 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  rs, regardless o
270a0 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66  f locale..*/.#if
270b0 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49  def SQLITE_ASCII
270c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
270d0 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78  3Toupper(x)  ((x
270e0 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65  )&~(sqlite3Ctype
270f0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
27100 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23  ar)(x)]&0x20)).#
27110 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
27120 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c  sspace(x)   (sql
27130 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
27140 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
27150 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20  &0x01).# define 
27160 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
27170 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
27180 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
27190 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23  har)(x)]&0x06).#
271a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
271b0 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c  salpha(x)   (sql
271c0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
271d0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
271e0 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20  &0x02).# define 
271f0 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
27200 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
27210 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
27220 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23  har)(x)]&0x04).#
27230 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
27240 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c  sxdigit(x)  (sql
27250 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
27260 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
27270 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20  &0x08).# define 
27280 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
27290 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65  )   (sqlite3Uppe
272a0 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e  rToLower[(unsign
272b0 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 20  ed char)(x)]).# 
272c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
272d0 71 75 6f 74 65 28 78 29 20 20 20 28 73 71 6c 69  quote(x)   (sqli
272e0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
272f0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
27300 30 78 38 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  0x80).#else.# de
27310 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
27320 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72  per(x)   toupper
27330 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
27340 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
27350 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
27360 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67    isspace((unsig
27370 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
27380 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
27390 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e  alnum(x)   isaln
273a0 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  um((unsigned cha
273b0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
273c0 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
273d0 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73  )   isalpha((uns
273e0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
273f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27400 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64  Isdigit(x)   isd
27410 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
27420 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
27430 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
27440 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28  t(x)  isxdigit((
27450 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
27460 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
27470 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
27480 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65  tolower((unsigne
27490 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
274a0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75  fine sqlite3Isqu
274b0 6f 74 65 28 78 29 20 20 20 28 28 78 29 3d 3d 27  ote(x)   ((x)=='
274c0 22 27 7c 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28  "'||(x)=='\''||(
274d0 78 29 3d 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60  x)=='['||(x)=='`
274e0 27 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  ').#endif.int sq
274f0 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38  lite3IsIdChar(u8
27500 29 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e  );../*.** Intern
27510 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74  al function prot
27520 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71  otypes.*/.int sq
27530 6c 69 74 65 33 53 74 72 49 43 6d 70 28 63 6f 6e  lite3StrICmp(con
27540 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
27550 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
27560 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74  e3Strlen30(const
27570 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73   char*);.char *s
27580 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65  qlite3ColumnType
27590 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b  (Column*,char*);
275a0 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
275b0 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33  StrNICmp sqlite3
275c0 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73  _strnicmp..int s
275d0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74  qlite3MallocInit
275e0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
275f0 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f  ite3MallocEnd(vo
27600 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  id);.void *sqlit
27610 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76  e3Malloc(u64);.v
27620 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
27630 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69  ocZero(u64);.voi
27640 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
27650 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c  ocZero(sqlite3*,
27660 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
27670 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
27680 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
27690 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
276a0 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74  allocRawNN(sqlit
276b0 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20  e3*, u64);.char 
276c0 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70  *sqlite3DbStrDup
276d0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
276e0 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71  char*);.char *sq
276f0 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73  lite3DbStrNDup(s
27700 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
27710 61 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20  ar*, u64);.char 
27720 2a 73 71 6c 69 74 65 33 44 62 53 70 61 6e 44 75  *sqlite3DbSpanDu
27730 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
27740 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
27750 72 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  r*);.void *sqlit
27760 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c  e3Realloc(void*,
27770 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
27780 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46  ite3DbReallocOrF
27790 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  ree(sqlite3 *, v
277a0 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
277b0 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
277c0 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  loc(sqlite3 *, v
277d0 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
277e0 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  d sqlite3DbFree(
277f0 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
27800 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
27810 46 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c  FreeNN(sqlite3*,
27820 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c   void*);.int sql
27830 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76  ite3MallocSize(v
27840 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
27850 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73  e3DbMallocSize(s
27860 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
27870 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61  .void *sqlite3Pa
27880 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  geMalloc(int);.v
27890 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46  oid sqlite3PageF
278a0 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
278b0 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65   sqlite3MemSetDe
278c0 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66  fault(void);.#if
278d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
278e0 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69  STABLE.void sqli
278f0 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48  te3BenignMallocH
27900 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f  ooks(void (*)(vo
27910 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f  id), void (*)(vo
27920 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  id));.#endif.int
27930 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72   sqlite3HeapNear
27940 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f  lyFull(void);../
27950 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20  *.** On systems 
27960 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b  with ample stack
27970 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20   space and that 
27980 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29  support alloca()
27990 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66  , make.** use of
279a0 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74   alloca() to obt
279b0 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61  ain space for la
279c0 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62  rge automatic ob
279d0 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75  jects.  By defau
279e0 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70  lt,.** obtain sp
279f0 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ace from malloc(
27a00 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c  )..**.** The all
27a10 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65  oca() routine ne
27a20 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  ver returns NULL
27a30 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
27a40 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a  se code paths.**
27a50 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20   that deal with 
27a60 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
27a70 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20  c() failures to 
27a80 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a  be unreachable..
27a90 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
27aa0 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65  _USE_ALLOCA.# de
27ab0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
27ac0 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
27ad0 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66   alloca(N).# def
27ae0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
27af0 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
27b00 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29  memset(alloca(N)
27b10 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65  , 0, N).# define
27b20 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
27b30 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64  e(D,P).#else.# d
27b40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
27b50 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
27b60 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
27b70 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69  cRaw(D,N).# defi
27b80 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
27b90 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73  llocZero(D,N)  s
27ba0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
27bb0 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  ro(D,N).# define
27bc0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
27bd0 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c  e(D,P)       sql
27be0 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a  ite3DbFree(D,P).
27bf0 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f  #endif../* Do no
27c00 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d  t allow both MEM
27c10 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33  SYS5 and MEMSYS3
27c20 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74   to be defined t
27c30 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74 68 65  ogether.  If the
27c40 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c  y.** are, disabl
27c50 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66  e MEMSYS3.*/.#if
27c60 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
27c70 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20  E_MEMSYS5.const 
27c80 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
27c90 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
27ca0 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b  etMemsys5(void);
27cb0 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  .#undef SQLITE_E
27cc0 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65  NABLE_MEMSYS3.#e
27cd0 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
27ce0 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
27cf0 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  3.const sqlite3_
27d00 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
27d10 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
27d20 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  3(void);.#endif.
27d30 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
27d40 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71  _MUTEX_OMIT.  sq
27d50 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
27d60 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74  ods const *sqlit
27d70 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76  e3DefaultMutex(v
27d80 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  oid);.  sqlite3_
27d90 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
27da0 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70  nst *sqlite3Noop
27db0 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
27dc0 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
27dd0 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28  lite3MutexAlloc(
27de0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
27df0 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69  te3MutexInit(voi
27e00 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  d);.  int sqlite
27e10 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b  3MutexEnd(void);
27e20 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
27e30 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
27e40 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69  X_OMIT) && !defi
27e50 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
27e60 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71  _NOOP).  void sq
27e70 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69  lite3MemoryBarri
27e80 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a  er(void);.#else.
27e90 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27ea0 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a  MemoryBarrier().
27eb0 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f  #endif..sqlite3_
27ec0 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 61  int64 sqlite3Sta
27ed0 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76  tusValue(int);.v
27ee0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
27ef0 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  sUp(int, int);.v
27f00 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
27f10 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b  sDown(int, int);
27f20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
27f30 74 75 73 48 69 67 68 77 61 74 65 72 28 69 6e 74  tusHighwater(int
27f40 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
27f50 74 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65 64  te3LookasideUsed
27f60 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29 3b  (sqlite3*,int*);
27f70 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d  ../* Access to m
27f80 75 74 65 78 65 73 20 75 73 65 64 20 62 79 20 73  utexes used by s
27f90 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29 20  qlite3_status() 
27fa0 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  */.sqlite3_mutex
27fb0 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65 31   *sqlite3Pcache1
27fc0 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c  Mutex(void);.sql
27fd0 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
27fe0 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76  te3MallocMutex(v
27ff0 6f 69 64 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e  oid);..#if defin
28000 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
28010 5f 4d 55 4c 54 49 54 48 52 45 41 44 45 44 5f 43  _MULTITHREADED_C
28020 48 45 43 4b 53 29 20 26 26 20 21 64 65 66 69 6e  HECKS) && !defin
28030 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
28040 4f 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c 69 74  OMIT).void sqlit
28050 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e  e3MutexWarnOnCon
28060 74 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f  tention(sqlite3_
28070 6d 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a 23  mutex*);.#else.#
28080 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
28090 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e  utexWarnOnConten
280a0 74 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a 0a  tion(x).#endif..
280b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
280c0 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
280d0 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  NT.  int sqlite3
280e0 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23  IsNaN(double);.#
280f0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
28100 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30  lite3IsNaN(X)  0
28110 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
28120 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
28130 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
28140 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
28150 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51  rmation about SQ
28160 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61  L.** functions a
28170 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72  rguments that ar
28180 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  e the parameters
28190 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29   to the printf()
281a0 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74   function..*/.st
281b0 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d  ruct PrintfArgum
281c0 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72  ents {.  int nAr
281d0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
281e0 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65    /* Total numbe
281f0 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
28200 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20  /.  int nUsed;  
28210 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
28220 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
28230 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  nts used so far 
28240 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  */.  sqlite3_val
28250 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a  ue **apArg;   /*
28260 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61   The argument va
28270 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72  lues */.};..char
28280 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66   *sqlite3MPrintf
28290 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
282a0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61  char*, ...);.cha
282b0 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e  r *sqlite3VMPrin
282c0 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
282d0 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74  t char*, va_list
282e0 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
282f0 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20  QLITE_DEBUG) || 
28300 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
28310 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20  AVE_OS_TRACE).  
28320 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75  void sqlite3Debu
28330 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68  gPrintf(const ch
28340 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69  ar*, ...);.#endi
28350 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
28360 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69  LITE_TEST).  voi
28370 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65  d *sqlite3TestTe
28380 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68  xtToPtr(const ch
28390 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
283a0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
283b0 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73  _DEBUG).  void s
283c0 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78  qlite3TreeViewEx
283d0 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  pr(TreeView*, co
283e0 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a  nst Expr*, u8);.
283f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
28400 65 65 56 69 65 77 42 61 72 65 45 78 70 72 4c 69  eeViewBareExprLi
28410 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  st(TreeView*, co
28420 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  nst ExprList*, c
28430 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
28440 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
28450 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65  iewExprList(Tree
28460 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70  View*, const Exp
28470 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73  rList*, u8, cons
28480 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
28490 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
284a0 53 65 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a  Select(TreeView*
284b0 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c  , const Select*,
284c0 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c   u8);.  void sql
284d0 69 74 65 33 54 72 65 65 56 69 65 77 57 69 74 68  ite3TreeViewWith
284e0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
284f0 74 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 69  t With*, u8);.#i
28500 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
28510 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 76  T_WINDOWFUNC.  v
28520 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
28530 69 65 77 57 69 6e 64 6f 77 28 54 72 65 65 56 69  iewWindow(TreeVi
28540 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 6e 64 6f  ew*, const Windo
28550 77 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20  w*, u8);.  void 
28560 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57  sqlite3TreeViewW
28570 69 6e 46 75 6e 63 28 54 72 65 65 56 69 65 77 2a  inFunc(TreeView*
28580 2c 20 63 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c  , const Window*,
28590 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 23 65 6e   u8);.#endif.#en
285a0 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74  dif...void sqlit
285b0 65 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72  e3SetString(char
285c0 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63   **, sqlite3*, c
285d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
285e0 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73  d sqlite3ErrorMs
285f0 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  g(Parse*, const 
28600 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
28610 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65  d sqlite3Dequote
28620 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  (char*);.void sq
28630 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54  lite3TokenInit(T
28640 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e  oken*,char*);.in
28650 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64  t sqlite3Keyword
28660 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67  Code(const unsig
28670 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  ned char*, int);
28680 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50  .int sqlite3RunP
28690 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f  arser(Parse*, co
286a0 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20  nst char*, char 
286b0 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
286c0 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61  3FinishCoding(Pa
286d0 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
286e0 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72  e3GetTempReg(Par
286f0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
28700 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67  e3ReleaseTempReg
28710 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e  (Parse*,int);.in
28720 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
28730 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
28740 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
28750 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28  eleaseTempRange(
28760 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
28770 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65  .void sqlite3Cle
28780 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50  arTempRegCache(P
28790 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53  arse*);.#ifdef S
287a0 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20  QLITE_DEBUG.int 
287b0 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e  sqlite3NoTempsIn
287c0 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
287d0 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78  ,int);.#endif.Ex
287e0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
287f0 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e  lloc(sqlite3*,in
28800 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69  t,const Token*,i
28810 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
28820 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c  e3Expr(sqlite3*,
28830 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
28840 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
28850 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73  prAttachSubtrees
28860 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
28870 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  Expr*,Expr*);.Ex
28880 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72  pr *sqlite3PExpr
28890 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78  (Parse*, int, Ex
288a0 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  pr*, Expr*);.voi
288b0 64 20 73 71 6c 69 74 65 33 50 45 78 70 72 41 64  d sqlite3PExprAd
288c0 64 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20  dSelect(Parse*, 
288d0 45 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  Expr*, Select*);
288e0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
288f0 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45  prAnd(sqlite3*,E
28900 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  xpr*, Expr*);.Ex
28910 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46  pr *sqlite3ExprF
28920 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45  unction(Parse*,E
28930 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
28940 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28950 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61  ite3ExprAssignVa
28960 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20  rNumber(Parse*, 
28970 45 78 70 72 2a 2c 20 75 33 32 29 3b 0a 76 6f 69  Expr*, u32);.voi
28980 64 20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c  d sqlite3ExprDel
28990 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
289a0 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  pr*);.ExprList *
289b0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41  sqlite3ExprListA
289c0 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70  ppend(Parse*,Exp
289d0 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 45  rList*,Expr*);.E
289e0 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
289f0 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 56 65  ExprListAppendVe
28a00 63 74 6f 72 28 50 61 72 73 65 2a 2c 45 78 70 72  ctor(Parse*,Expr
28a10 4c 69 73 74 2a 2c 49 64 4c 69 73 74 2a 2c 45 78  List*,IdList*,Ex
28a20 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
28a30 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 6f 72  e3ExprListSetSor
28a40 74 4f 72 64 65 72 28 45 78 70 72 4c 69 73 74 2a  tOrder(ExprList*
28a50 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
28a60 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61  te3ExprListSetNa
28a70 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  me(Parse*,ExprLi
28a80 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  st*,Token*,int);
28a90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28aa0 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61 72  rListSetSpan(Par
28ab0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 63 6f  se*,ExprList*,co
28ac0 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
28ad0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
28ae0 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65  ite3ExprListDele
28af0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
28b00 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c  rList*);.u32 sql
28b10 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c 61 67  ite3ExprListFlag
28b20 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74  s(const ExprList
28b30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
28b40 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68  nit(sqlite3*, ch
28b50 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar**);.int sqlit
28b60 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76  e3InitCallback(v
28b70 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a  oid*, int, char*
28b80 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20  *, char**);.int 
28b90 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65 28 73  sqlite3InitOne(s
28ba0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 68  qlite3*, int, ch
28bb0 61 72 2a 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  ar**, u32);.void
28bc0 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50   sqlite3Pragma(P
28bd0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
28be0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  en*,Token*,int);
28bf0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
28c00 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
28c10 45 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65  E.Module *sqlite
28c20 33 50 72 61 67 6d 61 56 74 61 62 52 65 67 69 73  3PragmaVtabRegis
28c30 74 65 72 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ter(sqlite3*,con
28c40 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 3b  st char *zName);
28c50 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
28c60 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
28c70 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
28c80 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
28c90 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
28ca0 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69  chema(sqlite3*,i
28cb0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28cc0 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73  3CollapseDatabas
28cd0 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29  eArray(sqlite3*)
28ce0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
28cf0 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e  mmitInternalChan
28d00 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ges(sqlite3*);.v
28d10 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
28d20 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c  eColumnNames(sql
28d30 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69  ite3*,Table*);.i
28d40 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  nt sqlite3Column
28d50 73 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50 61  sFromExprList(Pa
28d60 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  rse*,ExprList*,i
28d70 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76  16*,Column**);.v
28d80 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
28d90 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 41 6e  tAddColumnTypeAn
28da0 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72 73 65  dCollation(Parse
28db0 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63 74 2a  *,Table*,Select*
28dc0 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
28dd0 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65  3ResultSetOfSele
28de0 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74  ct(Parse*,Select
28df0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28e00 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28  OpenMasterTable(
28e10 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49  Parse *, int);.I
28e20 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69  ndex *sqlite3Pri
28e30 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62  maryKeyIndex(Tab
28e40 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65  le*);.i16 sqlite
28e50 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49  3ColumnOfIndex(I
28e60 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69  ndex*, i16);.voi
28e70 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61  d sqlite3StartTa
28e80 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
28e90 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
28ea0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53  ,int,int);.#if S
28eb0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44  QLITE_ENABLE_HID
28ec0 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f  DEN_COLUMNS.  vo
28ed0 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  id sqlite3Column
28ee0 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61  PropertiesFromNa
28ef0 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d  me(Table*, Colum
28f00 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  n*);.#else.# def
28f10 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  ine sqlite3Colum
28f20 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e  nPropertiesFromN
28f30 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f  ame(T,C) /* no-o
28f40 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64  p */.#endif.void
28f50 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
28f60 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  n(Parse*,Token*,
28f70 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
28f80 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28  lite3AddNotNull(
28f90 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
28fa0 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69  id sqlite3AddPri
28fb0 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20  maryKey(Parse*, 
28fc0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
28fd0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
28fe0 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43  sqlite3AddCheckC
28ff0 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
29000 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
29010 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74  qlite3AddDefault
29020 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70  Value(Parse*,Exp
29030 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
29040 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
29050 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c  d sqlite3AddColl
29060 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20  ateType(Parse*, 
29070 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
29080 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61  lite3EndTable(Pa
29090 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
290a0 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a  n*,u8,Select*);.
290b0 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
290c0 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  Uri(const char*,
290d0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69  const char*,unsi
290e0 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20  gned int*,.     
290f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
29100 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61  qlite3_vfs**,cha
29110 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74  r**,char **);.Bt
29120 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61  ree *sqlite3DbNa
29130 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65  meToBtree(sqlite
29140 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
29150 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
29160 55 4e 54 45 53 54 41 42 4c 45 0a 23 20 64 65 66  UNTESTABLE.# def
29170 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74  ine sqlite3Fault
29180 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b  Sim(X) SQLITE_OK
29190 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c  .#else.  int sql
291a0 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74  ite3FaultSim(int
291b0 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65  );.#endif..Bitve
291c0 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63  c *sqlite3Bitvec
291d0 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74  Create(u32);.int
291e0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
291f0 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  st(Bitvec*, u32)
29200 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
29210 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42  vecTestNotNull(B
29220 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e  itvec*, u32);.in
29230 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  t sqlite3BitvecS
29240 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  et(Bitvec*, u32)
29250 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
29260 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63  tvecClear(Bitvec
29270 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a  *, u32, void*);.
29280 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
29290 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63  ecDestroy(Bitvec
292a0 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42  *);.u32 sqlite3B
292b0 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63  itvecSize(Bitvec
292c0 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
292d0 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e  TE_UNTESTABLE.in
292e0 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42  t sqlite3BitvecB
292f0 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69  uiltinTest(int,i
29300 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f  nt*);.#endif..Ro
29310 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77  wSet *sqlite3Row
29320 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  SetInit(sqlite3*
29330 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
29340 6f 77 53 65 74 44 65 6c 65 74 65 28 76 6f 69 64  owSetDelete(void
29350 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29360 52 6f 77 53 65 74 43 6c 65 61 72 28 76 6f 69 64  RowSetClear(void
29370 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29380 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77  RowSetInsert(Row
29390 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20  Set*, i64);.int 
293a0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73  sqlite3RowSetTes
293b0 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69  t(RowSet*, int i
293c0 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74  Batch, i64);.int
293d0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
293e0 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a  xt(RowSet*, i64*
293f0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
29400 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65  CreateView(Parse
29410 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
29420 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
29430 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74  ,Select*,int,int
29440 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
29450 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
29460 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53  W) || !defined(S
29470 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
29480 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73  ALTABLE).  int s
29490 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
294a0 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  umnNames(Parse*,
294b0 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23  Table*);.#else.#
294c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
294d0 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
294e0 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a  s(A,B) 0.#endif.
294f0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
29500 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e  ATTACHED>30.  in
29510 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41  t sqlite3DbMaskA
29520 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b  llZero(yDbMask);
29530 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
29540 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61  ite3DropTable(Pa
29550 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
29560 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
29570 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54  sqlite3CodeDropT
29580 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62  able(Parse*, Tab
29590 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  le*, int, int);.
295a0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
295b0 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
295c0 2c 20 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20  , Table*);.void 
295d0 73 71 6c 69 74 65 33 46 72 65 65 49 6e 64 65 78  sqlite3FreeIndex
295e0 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78  (sqlite3*, Index
295f0 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
29600 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
29610 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c  EMENT.  void sql
29620 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
29630 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50  tBegin(Parse *pP
29640 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71  arse);.  void sq
29650 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
29660 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61  ntEnd(Parse *pPa
29670 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  rse);.#else.# de
29680 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
29690 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58  incrementBegin(X
296a0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
296b0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
296c0 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69  nd(X).#endif.voi
296d0 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28  d sqlite3Insert(
296e0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
296f0 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73  , Select*, IdLis
29700 74 2a 2c 20 69 6e 74 2c 20 55 70 73 65 72 74 2a  t*, int, Upsert*
29710 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
29720 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71  ArrayAllocate(sq
29730 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74  lite3*,void*,int
29740 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c  ,int*,int*);.IdL
29750 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
29760 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c  stAppend(Parse*,
29770 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a   IdList*, Token*
29780 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64  );.int sqlite3Id
29790 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74  ListIndex(IdList
297a0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
297b0 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
297c0 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73  SrcListEnlarge(s
297d0 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
297e0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72  *, int, int);.Sr
297f0 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
29800 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  cListAppend(sqli
29810 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
29820 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
29830 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
29840 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72  3SrcListAppendFr
29850 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53  omTerm(Parse*, S
29860 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
29870 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20   Token*,.       
29880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
298a0 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  oken*, Select*, 
298b0 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  Expr*, IdList*);
298c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
298d0 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61  ListIndexedBy(Pa
298e0 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
298f0 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
29900 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46   sqlite3SrcListF
29910 75 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20  uncArgs(Parse*, 
29920 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
29930 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
29940 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70  3IndexedByLookup
29950 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74  (Parse *, struct
29960 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
29970 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
29980 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
29990 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  pe(SrcList*);.vo
299a0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
299b0 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50  tAssignCursors(P
299c0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
299d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64  ;.void sqlite3Id
299e0 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
299f0 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  e3*, IdList*);.v
29a00 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
29a10 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
29a20 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e  *, SrcList*);.In
29a30 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f  dex *sqlite3Allo
29a40 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  cateIndexObject(
29a50 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74  sqlite3*,i16,int
29a60 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73  ,char**);.void s
29a70 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64 65  qlite3CreateInde
29a80 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  x(Parse*,Token*,
29a90 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c  Token*,SrcList*,
29aa0 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f  ExprList*,int,To
29ab0 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
29ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ad0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  Expr*, int, int,
29ae0 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
29af0 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73  e3DropIndex(Pars
29b00 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
29b10 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  t);.int sqlite3S
29b20 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65  elect(Parse*, Se
29b30 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73  lect*, SelectDes
29b40 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
29b50 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61  ite3SelectNew(Pa
29b60 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  rse*,ExprList*,S
29b70 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
29b80 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  prList*,.       
29b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ba0 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74    Expr*,ExprList
29bb0 2a 2c 75 33 32 2c 45 78 70 72 2a 29 3b 0a 76 6f  *,u32,Expr*);.vo
29bc0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
29bd0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
29be0 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65   Select*);.Table
29bf0 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
29c00 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53  Lookup(Parse*, S
29c10 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
29c20 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28  lite3IsReadOnly(
29c30 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
29c40 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29c50 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73  e3OpenTable(Pars
29c60 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e  e*, int iCur, in
29c70 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69  t iDb, Table*, i
29c80 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  nt);.#if defined
29c90 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  (SQLITE_ENABLE_U
29ca0 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
29cb0 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
29cc0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
29cd0 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69  UERY).Expr *sqli
29ce0 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61  te3LimitWhere(Pa
29cf0 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
29d00 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
29d10 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64  pr*,char*);.#end
29d20 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
29d30 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a  eleteFrom(Parse*
29d40 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
29d50 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
29d60 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
29d70 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  e3Update(Parse*,
29d80 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
29d90 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 45  ist*,Expr*,int,E
29da0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 0a  xprList*,Expr*,.
29db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29dc0 20 20 20 55 70 73 65 72 74 2a 29 3b 0a 57 68 65     Upsert*);.Whe
29dd0 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57  reInfo *sqlite3W
29de0 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a  hereBegin(Parse*
29df0 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
29e00 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ExprList*,ExprLi
29e10 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f  st*,u16,int);.vo
29e20 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45  id sqlite3WhereE
29e30 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nd(WhereInfo*);.
29e40 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 57 68  LogEst sqlite3Wh
29e50 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e  ereOutputRowCoun
29e60 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
29e70 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
29e80 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49  sDistinct(WhereI
29e90 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
29ea0 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64  e3WhereIsOrdered
29eb0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
29ec0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 72  t sqlite3WhereOr
29ed0 64 65 72 42 79 4c 69 6d 69 74 4f 70 74 4c 61 62  derByLimitOptLab
29ee0 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
29ef0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
29f00 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e  IsSorted(WhereIn
29f10 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
29f20 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61  3WhereContinueLa
29f30 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  bel(WhereInfo*);
29f40 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
29f50 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72  eBreakLabel(Wher
29f60 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
29f70 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61  ite3WhereOkOnePa
29f80 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69  ss(WhereInfo*, i
29f90 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e  nt*);.#define ON
29fa0 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30  EPASS_OFF      0
29fb0 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f          /* Use o
29fc0 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c  f ONEPASS not al
29fd0 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  lowed */.#define
29fe0 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20   ONEPASS_SINGLE 
29ff0 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e    1        /* ON
2a000 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20  EPASS valid for 
2a010 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64  a single row upd
2a020 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ate */.#define O
2a030 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20  NEPASS_MULTI    
2a040 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50  2        /* ONEP
2a050 41 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72  ASS is valid for
2a060 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
2a070 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  /.void sqlite3Ex
2a080 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43  prCodeLoadIndexC
2a090 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e  olumn(Parse*, In
2a0a0 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  dex*, int, int, 
2a0b0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2a0c0 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
2a0d0 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  mn(Parse*, Table
2a0e0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2a0f0 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
2a100 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
2a110 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65  lumnOfTable(Vdbe
2a120 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
2a130 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2a140 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d  sqlite3ExprCodeM
2a150 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ove(Parse*, int,
2a160 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2a170 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2a180 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2a190 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2a1a0 65 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28 50  e3ExprCodeCopy(P
2a1b0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2a1c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2a1d0 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62  ExprCodeFactorab
2a1e0 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  le(Parse*, Expr*
2a1f0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2a200 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69  te3ExprCodeAtIni
2a210 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
2a220 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2a230 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50  e3ExprCodeTemp(P
2a240 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2a250 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2a260 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28 50  ExprCodeTarget(P
2a270 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2a280 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2a290 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65  ExprCodeAndCache
2a2a0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2a2b0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2a2c0 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73  3ExprCodeExprLis
2a2d0 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  t(Parse*, ExprLi
2a2e0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  st*, int, int, u
2a2f0 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  8);.#define SQLI
2a300 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20  TE_ECEL_DUP     
2a310 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20   0x01  /* Deep, 
2a320 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69  not shallow copi
2a330 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
2a340 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52  LITE_ECEL_FACTOR
2a350 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74     0x02  /* Fact
2a360 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20  or out constant 
2a370 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  terms */.#define
2a380 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46   SQLITE_ECEL_REF
2a390 20 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20 55        0x04  /* U
2a3a0 73 65 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e  se ExprList.u.x.
2a3b0 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23  iOrderByCol */.#
2a3c0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
2a3d0 45 4c 5f 4f 4d 49 54 52 45 46 20 20 30 78 30 38  EL_OMITREF  0x08
2a3e0 20 20 2f 2a 20 4f 6d 69 74 20 69 66 20 45 78 70    /* Omit if Exp
2a3f0 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72  rList.u.x.iOrder
2a400 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71  ByCol */.void sq
2a410 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28  lite3ExprIfTrue(
2a420 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2a430 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2a440 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
2a450 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
2a460 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2a470 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61   sqlite3ExprIfFa
2a480 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20 45  lseDup(Parse*, E
2a490 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
2a4a0 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46  .Table *sqlite3F
2a4b0 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33  indTable(sqlite3
2a4c0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  *,const char*, c
2a4d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65  onst char*);.#de
2a4e0 66 69 6e 65 20 4c 4f 43 41 54 45 5f 56 49 45 57  fine LOCATE_VIEW
2a4f0 20 20 20 20 30 78 30 31 0a 23 64 65 66 69 6e 65      0x01.#define
2a500 20 4c 4f 43 41 54 45 5f 4e 4f 45 52 52 20 20 20   LOCATE_NOERR   
2a510 30 78 30 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69  0x02.Table *sqli
2a520 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50  te3LocateTable(P
2a530 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c  arse*,u32 flags,
2a540 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2a550 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
2a560 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
2a570 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c  ableItem(Parse*,
2a580 75 33 32 20 66 6c 61 67 73 2c 73 74 72 75 63 74  u32 flags,struct
2a590 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
2a5a0 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
2a5b0 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65  FindIndex(sqlite
2a5c0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
2a5d0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
2a5e0 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
2a5f0 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73  AndDeleteTable(s
2a600 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
2a610 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2a620 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2a630 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74  eleteIndex(sqlit
2a640 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
2a650 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2a660 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 2c  e3Vacuum(Parse*,
2a670 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2a680 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68  ite3RunVacuum(ch
2a690 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20  ar**, sqlite3*, 
2a6a0 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  int);.char *sqli
2a6b0 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e  te3NameFromToken
2a6c0 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
2a6d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2a6e0 78 70 72 43 6f 6d 70 61 72 65 28 50 61 72 73 65  xprCompare(Parse
2a6f0 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  *,Expr*, Expr*, 
2a700 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2a710 33 45 78 70 72 43 6f 6d 70 61 72 65 53 6b 69 70  3ExprCompareSkip
2a720 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  (Expr*, Expr*, i
2a730 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2a740 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28  ExprListCompare(
2a750 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c  ExprList*, ExprL
2a760 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
2a770 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69  sqlite3ExprImpli
2a780 65 73 45 78 70 72 28 50 61 72 73 65 2a 2c 45 78  esExpr(Parse*,Ex
2a790 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
2a7a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2a7b0 72 49 6d 70 6c 69 65 73 4e 6f 6e 4e 75 6c 6c 52  rImpliesNonNullR
2a7c0 6f 77 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76  ow(Expr*,int);.v
2a7d0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
2a7e0 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73  nalyzeAggregates
2a7f0 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
2a800 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2a810 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67  te3ExprAnalyzeAg
2a820 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78  gList(NameContex
2a830 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  t*,ExprList*);.i
2a840 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2a850 76 65 72 65 64 42 79 49 6e 64 65 78 28 45 78 70  veredByIndex(Exp
2a860 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 49 6e  r*, int iCur, In
2a870 64 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e 74 20  dex *pIdx);.int 
2a880 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55  sqlite3FunctionU
2a890 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72 2a  sesThisSrc(Expr*
2a8a0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62  , SrcList*);.Vdb
2a8b0 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62  e *sqlite3GetVdb
2a8c0 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64  e(Parse*);.#ifnd
2a8d0 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
2a8e0 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65  ABLE.void sqlite
2a8f0 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76  3PrngSaveState(v
2a900 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
2a910 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61  e3PrngRestoreSta
2a920 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  te(void);.#endif
2a930 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
2a940 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33  lbackAll(sqlite3
2a950 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2a960 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
2a970 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74  hema(Parse*, int
2a980 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2a990 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63  odeVerifyNamedSc
2a9a0 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e  hema(Parse*, con
2a9b0 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76  st char *zDb);.v
2a9c0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
2a9d0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
2a9e0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
2a9f0 71 6c 69 74 65 33 45 6e 64 54 72 61 6e 73 61 63  qlite3EndTransac
2aa00 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e 74 29  tion(Parse*,int)
2aa10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61  ;.void sqlite3Sa
2aa20 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20  vepoint(Parse*, 
2aa30 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  int, Token*);.vo
2aa40 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53  id sqlite3CloseS
2aa50 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65  avepoints(sqlite
2aa60 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  3 *);.void sqlit
2aa70 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43  e3LeaveMutexAndC
2aa80 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74  loseZombie(sqlit
2aa90 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
2aaa0 33 45 78 70 72 49 64 54 6f 54 72 75 65 46 61 6c  3ExprIdToTrueFal
2aab0 73 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  se(Expr*);.int s
2aac0 71 6c 69 74 65 33 45 78 70 72 54 72 75 74 68 56  qlite3ExprTruthV
2aad0 61 6c 75 65 28 63 6f 6e 73 74 20 45 78 70 72 2a  alue(const Expr*
2aae0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2aaf0 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70  prIsConstant(Exp
2ab00 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2ab10 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f  ExprIsConstantNo
2ab20 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  tJoin(Expr*);.in
2ab30 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
2ab40 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f  onstantOrFunctio
2ab50 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e  n(Expr*, u8);.in
2ab60 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
2ab70 6f 6e 73 74 61 6e 74 4f 72 47 72 6f 75 70 42 79  onstantOrGroupBy
2ab80 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2ab90 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
2aba0 73 71 6c 69 74 65 33 45 78 70 72 49 73 54 61 62  sqlite3ExprIsTab
2abb0 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a  leConstant(Expr*
2abc0 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51  ,int);.#ifdef SQ
2abd0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53  LITE_ENABLE_CURS
2abe0 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c  OR_HINTS.int sql
2abf0 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69 6e 73  ite3ExprContains
2ac00 53 75 62 71 75 65 72 79 28 45 78 70 72 2a 29 3b  Subquery(Expr*);
2ac10 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2ac20 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65 72  te3ExprIsInteger
2ac30 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69  (Expr*, int*);.i
2ac40 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  nt sqlite3ExprCa
2ac50 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78  nBeNull(const Ex
2ac60 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2ac70 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69  3ExprNeedsNoAffi
2ac80 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74  nityChange(const
2ac90 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69   Expr*, char);.i
2aca0 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69  nt sqlite3IsRowi
2acb0 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  d(const char*);.
2acc0 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
2acd0 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 0a 20  rateRowDelete(. 
2ace0 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a     Parse*,Table*
2acf0 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e  ,Trigger*,int,in
2ad00 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c  t,int,i16,u8,u8,
2ad10 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  u8,int);.void sq
2ad20 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77  lite3GenerateRow
2ad30 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72 73  IndexDelete(Pars
2ad40 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
2ad50 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
2ad60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e  ;.int sqlite3Gen
2ad70 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61  erateIndexKey(Pa
2ad80 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e  rse*, Index*, in
2ad90 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  t, int, int, int
2ada0 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76  *,Index*,int);.v
2adb0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
2adc0 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50  vePartIdxLabel(P
2add0 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  arse*,int);.int 
2ade0 73 71 6c 69 74 65 33 45 78 70 72 52 65 66 65 72  sqlite3ExprRefer
2adf0 65 6e 63 65 73 55 70 64 61 74 65 64 43 6f 6c 75  encesUpdatedColu
2ae00 6d 6e 28 45 78 70 72 2a 2c 69 6e 74 2a 2c 69 6e  mn(Expr*,int*,in
2ae10 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2ae20 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69  GenerateConstrai
2ae30 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c  ntChecks(Parse*,
2ae40 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c  Table*,int*,int,
2ae50 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20  int,int,int,.   
2ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae80 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a    u8,u8,int,int*
2ae90 2c 69 6e 74 2a 2c 55 70 73 65 72 74 2a 29 3b 0a  ,int*,Upsert*);.
2aea0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2aeb0 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20  ABLE_NULL_TRIM. 
2aec0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74   void sqlite3Set
2aed0 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 56 64 62  MakeRecordP5(Vdb
2aee0 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73  e*,Table*);.#els
2aef0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2af00 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50  e3SetMakeRecordP
2af10 35 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f  5(A,B).#endif.vo
2af20 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65  id sqlite3Comple
2af30 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73  teInsertion(Pars
2af40 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e  e*,Table*,int,in
2af50 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69  t,int,int*,int,i
2af60 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  nt,int);.int sql
2af70 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
2af80 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20  Indices(Parse*, 
2af90 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c  Table*, int, u8,
2afa0 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c   int, u8*, int*,
2afb0 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   int*);.void sql
2afc0 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70  ite3BeginWriteOp
2afd0 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  eration(Parse*, 
2afe0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2aff0 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74  sqlite3MultiWrit
2b000 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  e(Parse*);.void 
2b010 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28  sqlite3MayAbort(
2b020 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
2b030 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61  lite3HaltConstra
2b040 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
2b050 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c   int, char*, i8,
2b060 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
2b070 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69  e3UniqueConstrai
2b080 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
2b090 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
2b0a0 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72  lite3RowidConstr
2b0b0 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
2b0c0 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20  , Table*);.Expr 
2b0d0 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28  *sqlite3ExprDup(
2b0e0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
2b0f0 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  nt);.ExprList *s
2b100 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75  qlite3ExprListDu
2b110 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c  p(sqlite3*,ExprL
2b120 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69  ist*,int);.SrcLi
2b130 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
2b140 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53  stDup(sqlite3*,S
2b150 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64  rcList*,int);.Id
2b160 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
2b170 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
2b180 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74  IdList*);.Select
2b190 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44   *sqlite3SelectD
2b1a0 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  up(sqlite3*,Sele
2b1b0 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ct*,int);.void s
2b1c0 71 6c 69 74 65 33 49 6e 73 65 72 74 42 75 69 6c  qlite3InsertBuil
2b1d0 74 69 6e 46 75 6e 63 73 28 46 75 6e 63 44 65 66  tinFuncs(FuncDef
2b1e0 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20  *,int);.FuncDef 
2b1f0 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63  *sqlite3FindFunc
2b200 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tion(sqlite3*,co
2b210 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38  nst char*,int,u8
2b220 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ,u8);.void sqlit
2b230 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69  e3RegisterBuilti
2b240 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  nFunctions(void)
2b250 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2b260 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75  gisterDateTimeFu
2b270 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
2b280 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
2b290 74 65 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e  terPerConnection
2b2a0 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
2b2b0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
2b2c0 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
2b2d0 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ckOk(sqlite3*);.
2b2e0 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
2b2f0 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73  yCheckSickOrOk(s
2b300 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
2b310 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b  qlite3ChangeCook
2b320 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ie(Parse*, int);
2b330 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
2b340 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
2b350 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
2b360 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
2b370 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ).void sqlite3Ma
2b380 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61  terializeView(Pa
2b390 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
2b3a0 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45  pr*, ExprList*,E
2b3b0 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69  xpr*,int);.#endi
2b3c0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2b3d0 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20  E_OMIT_TRIGGER. 
2b3e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67   void sqlite3Beg
2b3f0 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  inTrigger(Parse*
2b400 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  , Token*,Token*,
2b410 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c  int,int,IdList*,
2b420 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  SrcList*,.      
2b430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b440 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20       Expr*,int, 
2b450 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
2b460 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65  ite3FinishTrigge
2b470 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
2b480 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rStep*, Token*);
2b490 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
2b4a0 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65  ropTrigger(Parse
2b4b0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
2b4c0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2b4d0 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
2b4e0 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a  Parse*, Trigger*
2b4f0 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
2b500 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
2b510 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
2b520 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  e*, int, ExprLis
2b530 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b  t*, int *pMask);
2b540 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
2b550 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50  te3TriggerList(P
2b560 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29  arse *, Table *)
2b570 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2b580 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50  CodeRowTrigger(P
2b590 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a  arse*, Trigger *
2b5a0 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
2b5b0 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a  , int, Table *,.
2b5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5d0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c              int,
2b5e0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
2b5f0 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
2b600 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50  wTriggerDirect(P
2b610 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20  arse *, Trigger 
2b620 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  *, Table *, int,
2b630 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
2b640 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69  id sqliteViewTri
2b650 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61  ggers(Parse*, Ta
2b660 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
2b670 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20  , ExprList*);.  
2b680 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
2b690 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71  teTriggerStep(sq
2b6a0 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53  lite3*, TriggerS
2b6b0 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  tep*);.  Trigger
2b6c0 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
2b6d0 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73  ggerSelectStep(s
2b6e0 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c  qlite3*,Select*,
2b6f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b710 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
2b720 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
2b730 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
2b740 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
2b750 49 6e 73 65 72 74 53 74 65 70 28 50 61 72 73 65  InsertStep(Parse
2b760 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74  *,Token*, IdList
2b770 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2b780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b790 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63             Selec
2b7a0 74 2a 2c 75 38 2c 55 70 73 65 72 74 2a 2c 0a 20  t*,u8,Upsert*,. 
2b7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7d0 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
2b7e0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2b7f0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
2b800 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70  sqlite3TriggerUp
2b810 64 61 74 65 53 74 65 70 28 50 61 72 73 65 2a 2c  dateStep(Parse*,
2b820 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
2b830 2c 20 45 78 70 72 2a 2c 20 75 38 2c 0a 20 20 20  , Expr*, u8,.   
2b840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b860 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
2b870 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
2b880 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
2b890 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65  lite3TriggerDele
2b8a0 74 65 53 74 65 70 28 50 61 72 73 65 2a 2c 54 6f  teStep(Parse*,To
2b8b0 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20 20 20  ken*, Expr*,.   
2b8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8e0 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
2b8f0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
2b900 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c   void sqlite3Del
2b910 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74  eteTrigger(sqlit
2b920 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a  e3*, Trigger*);.
2b930 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e    void sqlite3Un
2b940 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
2b950 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  gger(sqlite3*,in
2b960 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
2b970 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72 69    u32 sqlite3Tri
2b980 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73  ggerColmask(Pars
2b990 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72  e*,Trigger*,Expr
2b9a0 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61  List*,int,int,Ta
2b9b0 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66  ble*,int);.# def
2b9c0 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65  ine sqlite3Parse
2b9d0 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29  Toplevel(p) ((p)
2b9e0 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70  ->pToplevel ? (p
2b9f0 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28  )->pToplevel : (
2ba00 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  p)).# define sql
2ba10 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70  ite3IsToplevel(p
2ba20 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65  ) ((p)->pTopleve
2ba30 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  l==0).#else.# de
2ba40 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
2ba50 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c  gersExist(B,C,D,
2ba60 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20  E,F) 0.# define 
2ba70 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
2ba80 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69  gger(A,B).# defi
2ba90 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  ne sqlite3DropTr
2baa0 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20  iggerPtr(A,B).# 
2bab0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e  define sqlite3Un
2bac0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
2bad0 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65  gger(A,B,C).# de
2bae0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
2baf0 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43  RowTrigger(A,B,C
2bb00 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20  ,D,E,F,G,H,I).# 
2bb10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2bb20 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
2bb30 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a  ct(A,B,C,D,E,F).
2bb40 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2bb50 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59  TriggerList(X, Y
2bb60 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
2bb70 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
2bb80 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20  l(p) p.# define 
2bb90 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65  sqlite3IsTopleve
2bba0 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20  l(p) 1.# define 
2bbb0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
2bbc0 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c  lmask(A,B,C,D,E,
2bbd0 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69  F,G) 0.#endif..i
2bbe0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79  nt sqlite3JoinTy
2bbf0 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
2bc00 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2bc10 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2bc20 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79  CreateForeignKey
2bc30 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
2bc40 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72  t*, Token*, Expr
2bc50 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
2bc60 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f  d sqlite3DeferFo
2bc70 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
2bc80 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53   int);.#ifndef S
2bc90 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
2bca0 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20  RIZATION.  void 
2bcb0 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
2bcc0 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68  Parse*,Expr*,Sch
2bcd0 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a  ema*,SrcList*);.
2bce0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
2bcf0 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e  hCheck(Parse*,in
2bd00 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
2bd10 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2bd20 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
2bd30 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
2bd40 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c  textPush(Parse*,
2bd50 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63   AuthContext*, c
2bd60 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
2bd70 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
2bd80 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f  ontextPop(AuthCo
2bd90 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73  ntext*);.  int s
2bda0 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f  qlite3AuthReadCo
2bdb0 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  l(Parse*, const 
2bdc0 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68  char *, const ch
2bdd0 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  ar *, int);.#els
2bde0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2bdf0 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63  e3AuthRead(a,b,c
2be00 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,d).# define sql
2be10 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c  ite3AuthCheck(a,
2be20 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49  b,c,d,e)    SQLI
2be30 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73  TE_OK.# define s
2be40 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
2be50 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64  tPush(a,b,c).# d
2be60 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
2be70 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20  hContextPop(a)  
2be80 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64  ((void)(a)).#end
2be90 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  if.void sqlite3A
2bea0 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  ttach(Parse*, Ex
2beb0 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  pr*, Expr*, Expr
2bec0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2bed0 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Detach(Parse*, E
2bee0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2bef0 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78  te3FixInit(DbFix
2bf00 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74  er*, Parse*, int
2bf10 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2bf20 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  onst Token*);.in
2bf30 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c  t sqlite3FixSrcL
2bf40 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72  ist(DbFixer*, Sr
2bf50 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
2bf60 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62  ite3FixSelect(Db
2bf70 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  Fixer*, Select*)
2bf80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
2bf90 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45  Expr(DbFixer*, E
2bfa0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2bfb0 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62  e3FixExprList(Db
2bfc0 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  Fixer*, ExprList
2bfd0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2bfe0 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62  ixTriggerStep(Db
2bff0 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53  Fixer*, TriggerS
2c000 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tep*);.int sqlit
2c010 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61  e3AtoF(const cha
2c020 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69  r *z, double*, i
2c030 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
2c040 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e  ite3GetInt32(con
2c050 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29  st char *, int*)
2c060 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
2c070 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  i(const char*);.
2c080 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2c090 4d 49 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71  MIT_UTF16.int sq
2c0a0 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65  lite3Utf16ByteLe
2c0b0 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44  n(const void *pD
2c0c0 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b  ata, int nChar);
2c0d0 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2c0e0 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63  te3Utf8CharLen(c
2c0f0 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61  onst char *pData
2c100 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33  , int nByte);.u3
2c110 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61  2 sqlite3Utf8Rea
2c120 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c  d(const u8**);.L
2c130 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
2c140 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74  Est(u64);.LogEst
2c150 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64   sqlite3LogEstAd
2c160 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29  d(LogEst,LogEst)
2c170 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2c180 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2c190 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  LE.LogEst sqlite
2c1a0 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c  3LogEstFromDoubl
2c1b0 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69  e(double);.#endi
2c1c0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
2c1d0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
2c1e0 5f 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20  _SCANSTATUS) || 
2c1f0 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51  \.    defined(SQ
2c200 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
2c210 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c  3_OR_STAT4) || \
2c220 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
2c230 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49  ITE_EXPLAIN_ESTI
2c240 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20  MATED_ROWS).u64 
2c250 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
2c260 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64  nt(LogEst);.#end
2c270 69 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65  if.VList *sqlite
2c280 33 56 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65  3VListAdd(sqlite
2c290 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  3*,VList*,const 
2c2a0 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  char*,int,int);.
2c2b0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2c2c0 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d  te3VListNumToNam
2c2d0 65 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69  e(VList*,int);.i
2c2e0 6e 74 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e  nt sqlite3VListN
2c2f0 61 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c  ameToNum(VList*,
2c300 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
2c310 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65  ;../*.** Routine
2c320 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72  s to read and wr
2c330 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  ite variable-len
2c340 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54  gth integers.  T
2c350 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  hese used to.** 
2c360 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c  be defined local
2c370 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75  ly, but now we u
2c380 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f  se the varint ro
2c390 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74  utines in the ut
2c3a0 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f  il.c.** file..*/
2c3b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56  .int sqlite3PutV
2c3c0 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63  arint(unsigned c
2c3d0 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73  har*, u64);.u8 s
2c3e0 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28  qlite3GetVarint(
2c3f0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2c400 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75  har *, u64 *);.u
2c410 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
2c420 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67  nt32(const unsig
2c430 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20  ned char *, u32 
2c440 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2c450 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b  arintLen(u64 v);
2c460 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d  ../*.** The comm
2c470 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61  on case is for a
2c480 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20   varint to be a 
2c490 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68  single byte.  Th
2c4a0 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  ey following.** 
2c4b0 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68  macros handle th
2c4c0 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69  e common case wi
2c4d0 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72  thout a procedur
2c4e0 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e  e call, but then
2c4f0 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f   call.** the pro
2c500 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65  cedure for large
2c510 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64  r varints..*/.#d
2c520 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33  efine getVarint3
2c530 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
2c540 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29  ((*(A)<(u8)0x80)
2c550 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29  ?((B)=(u32)*(A))
2c560 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72  ,1:sqlite3GetVar
2c570 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a  int32((A),(u32 *
2c580 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  )&(B))).#define 
2c590 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  putVarint32(A,B)
2c5a0 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32    \.  (u8)(((u32
2c5b0 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f  )(B)<(u32)0x80)?
2c5c0 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20  (*(A)=(unsigned 
2c5d0 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20  char)(B)),1:\.  
2c5e0 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
2c5f0 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69  ((A),(B))).#defi
2c600 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20  ne getVarint    
2c610 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2c620 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
2c630 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74  nt    sqlite3Put
2c640 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63  Varint...const c
2c650 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65  har *sqlite3Inde
2c660 78 41 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c  xAffinityStr(sql
2c670 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  ite3*, Index*);.
2c680 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
2c690 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c  eAffinity(Vdbe*,
2c6a0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63   Table*, int);.c
2c6b0 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61  har sqlite3Compa
2c6c0 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  reAffinity(Expr 
2c6d0 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66  *pExpr, char aff
2c6e0 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  2);.int sqlite3I
2c6f0 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45  ndexAffinityOk(E
2c700 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
2c710 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a   idx_affinity);.
2c720 63 68 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c  char sqlite3Tabl
2c730 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  eColumnAffinity(
2c740 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61  Table*,int);.cha
2c750 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66  r sqlite3ExprAff
2c760 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
2c770 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  r);.int sqlite3A
2c780 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72  toi64(const char
2c790 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38  *, i64*, int, u8
2c7a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65  );.int sqlite3De
2c7b0 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73  cOrHexToI64(cons
2c7c0 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a  t char*, i64*);.
2c7d0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
2c7e0 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33  rWithMsg(sqlite3
2c7f0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
2c800 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  ar*,...);.void s
2c810 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69  qlite3Error(sqli
2c820 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
2c830 73 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72  sqlite3SystemErr
2c840 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  or(sqlite3*,int)
2c850 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48  ;.void *sqlite3H
2c860 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33  exToBlob(sqlite3
2c870 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
2c880 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c  , int n);.u8 sql
2c890 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74  ite3HexToInt(int
2c8a0 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   h);.int sqlite3
2c8b0 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73  TwoPartName(Pars
2c8c0 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  e *, Token *, To
2c8d0 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29  ken *, Token **)
2c8e0 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  ;..#if defined(S
2c8f0 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e  QLITE_NEED_ERR_N
2c900 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20  AME).const char 
2c910 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28  *sqlite3ErrName(
2c920 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  int);.#endif..#i
2c930 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2c940 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a 69  LE_DESERIALIZE.i
2c950 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 62 49  nt sqlite3MemdbI
2c960 6e 69 74 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  nit(void);.#endi
2c970 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  f..const char *s
2c980 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74  qlite3ErrStr(int
2c990 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2c9a0 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a  adSchema(Parse *
2c9b0 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71  pParse);.CollSeq
2c9c0 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c   *sqlite3FindCol
2c9d0 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38  lSeq(sqlite3*,u8
2c9e0 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72   enc, const char
2c9f0 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
2ca00 74 65 33 49 73 42 69 6e 61 72 79 28 63 6f 6e 73  te3IsBinary(cons
2ca10 74 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a 43 6f 6c  t CollSeq*);.Col
2ca20 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63  lSeq *sqlite3Loc
2ca30 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  ateCollSeq(Parse
2ca40 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20   *pParse, const 
2ca50 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c  char*zName);.Col
2ca60 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70  lSeq *sqlite3Exp
2ca70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  rCollSeq(Parse *
2ca80 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45  pParse, Expr *pE
2ca90 78 70 72 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  xpr);.CollSeq *s
2caa0 71 6c 69 74 65 33 45 78 70 72 4e 4e 43 6f 6c 6c  qlite3ExprNNColl
2cab0 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
2cac0 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b  e, Expr *pExpr);
2cad0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2cae0 43 6f 6c 6c 53 65 71 4d 61 74 63 68 28 50 61 72  CollSeqMatch(Par
2caf0 73 65 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  se*,Expr*,Expr*)
2cb00 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
2cb10 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b  xprAddCollateTok
2cb20 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  en(Parse *pParse
2cb30 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54  , Expr*, const T
2cb40 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70  oken*, int);.Exp
2cb50 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
2cb60 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50  dCollateString(P
2cb70 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73  arse*,Expr*,cons
2cb80 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a  t char*);.Expr *
2cb90 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43  sqlite3ExprSkipC
2cba0 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69  ollate(Expr*);.i
2cbb0 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43  nt sqlite3CheckC
2cbc0 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
2cbd0 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20  CollSeq *);.int 
2cbe0 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65  sqlite3CheckObje
2cbf0 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  ctName(Parse *, 
2cc00 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76  const char *);.v
2cc10 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53  oid sqlite3VdbeS
2cc20 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  etChanges(sqlite
2cc30 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  3 *, int);.int s
2cc40 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69  qlite3AddInt64(i
2cc50 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
2cc60 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36  lite3SubInt64(i6
2cc70 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
2cc80 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34  ite3MulInt64(i64
2cc90 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
2cca0 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29  te3AbsInt32(int)
2ccb0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2ccc0 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53  ENABLE_8_3_NAMES
2ccd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c  .void sqlite3Fil
2cce0 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63  eSuffix3(const c
2ccf0 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65  har*, char*);.#e
2cd00 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2cd10 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28  ite3FileSuffix3(
2cd20 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73  X,Y).#endif.u8 s
2cd30 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
2cd40 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75  (const char *z,u
2cd50 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20  8);..const void 
2cd60 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78  *sqlite3ValueTex
2cd70 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t(sqlite3_value*
2cd80 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
2cd90 65 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c  e3ValueBytes(sql
2cda0 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
2cdb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2cdc0 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65  lueSetStr(sqlite
2cdd0 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63  3_value*, int, c
2cde0 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 0a  onst void *,u8,.
2cdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce00 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28          void(*)(
2ce10 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71  void*));.void sq
2ce20 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c  lite3ValueSetNul
2ce30 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  l(sqlite3_value*
2ce40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2ce50 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33  alueFree(sqlite3
2ce60 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65  _value*);.sqlite
2ce70 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33  3_value *sqlite3
2ce80 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33  ValueNew(sqlite3
2ce90 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c   *);.#ifndef SQL
2cea0 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63  ITE_OMIT_UTF16.c
2ceb0 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31  har *sqlite3Utf1
2cec0 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20  6to8(sqlite3 *, 
2ced0 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
2cee0 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  , u8);.#endif.in
2cef0 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  t sqlite3ValueFr
2cf00 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  omExpr(sqlite3 *
2cf10 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38  , Expr *, u8, u8
2cf20 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  , sqlite3_value 
2cf30 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
2cf40 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
2cf50 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ity(sqlite3_valu
2cf60 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69  e *, u8, u8);.#i
2cf70 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  fndef SQLITE_AMA
2cf80 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e  LGAMATION.extern
2cf90 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
2cfa0 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f  char sqlite3Opco
2cfb0 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78  deProperty[];.ex
2cfc0 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61 72 20  tern const char 
2cfd0 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52 59  sqlite3StrBINARY
2cfe0 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
2cff0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
2d000 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
2d010 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  er[];.extern con
2d020 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2d030 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70   sqlite3CtypeMap
2d040 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
2d050 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e   Token sqlite3In
2d060 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72  tTokens[];.exter
2d070 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72  n SQLITE_WSD str
2d080 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
2d090 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b  g sqlite3Config;
2d0a0 0a 65 78 74 65 72 6e 20 46 75 6e 63 44 65 66 48  .extern FuncDefH
2d0b0 61 73 68 20 73 71 6c 69 74 65 33 42 75 69 6c 74  ash sqlite3Built
2d0c0 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66  inFunctions;.#if
2d0d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2d0e0 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20  _WSD.extern int 
2d0f0 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79  sqlite3PendingBy
2d100 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  te;.#endif.#endi
2d110 66 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  f.#ifdef VDBE_PR
2d120 4f 46 49 4c 45 0a 65 78 74 65 72 6e 20 73 71 6c  OFILE.extern sql
2d130 69 74 65 33 5f 75 69 6e 74 36 34 20 73 71 6c 69  ite3_uint64 sqli
2d140 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 3b 0a  te3NProfileCnt;.
2d150 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2d160 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
2d170 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
2d180 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2d190 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50  sqlite3Reindex(P
2d1a0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
2d1b0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2d1c0 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f  ite3AlterFunctio
2d1d0 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
2d1e0 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d  qlite3AlterRenam
2d1f0 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  eTable(Parse*, S
2d200 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  rcList*, Token*)
2d210 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
2d220 74 65 72 52 65 6e 61 6d 65 43 6f 6c 75 6d 6e 28  terRenameColumn(
2d230 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2d240 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2d250 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
2d260 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73  tToken(const uns
2d270 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e  igned char *, in
2d280 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
2d290 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61  e3NestedParse(Pa
2d2a0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
2d2b0 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
2d2c0 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
2d2d0 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71  redStatements(sq
2d2e0 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e  lite3*, int);.in
2d2f0 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62  t sqlite3CodeSub
2d300 73 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45  select(Parse*, E
2d310 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  xpr *, int, int)
2d320 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
2d330 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c  lectPrep(Parse*,
2d340 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
2d350 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71  ntext*);.void sq
2d360 6c 69 74 65 33 53 65 6c 65 63 74 57 72 6f 6e 67  lite3SelectWrong
2d370 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72 28 50 61  NumTermsError(Pa
2d380 72 73 65 20 2a 70 50 61 72 73 65 2c 20 53 65 6c  rse *pParse, Sel
2d390 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c  ect *p);.int sql
2d3a0 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d  ite3MatchSpanNam
2d3b0 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  e(const char*, c
2d3c0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2d3d0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2d3e0 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
2d3f0 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d  e3ResolveExprNam
2d400 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
2d410 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
2d420 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4c  ite3ResolveExprL
2d430 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  istNames(NameCon
2d440 74 65 78 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  text*, ExprList*
2d450 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2d460 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65  esolveSelectName
2d470 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  s(Parse*, Select
2d480 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
2d490 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2d4a0 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e  solveSelfReferen
2d4b0 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ce(Parse*,Table*
2d4c0 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ,int,Expr*,ExprL
2d4d0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2d4e0 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72  e3ResolveOrderGr
2d4f0 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65  oupBy(Parse*, Se
2d500 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lect*, ExprList*
2d510 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2d520 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75  void sqlite3Colu
2d530 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a  mnDefault(Vdbe *
2d540 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
2d550 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2d560 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64  e3AlterFinishAdd
2d570 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
2d580 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73  Token *);.void s
2d590 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e  qlite3AlterBegin
2d5a0 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
2d5b0 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 76  *, SrcList *);.v
2d5c0 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 6e 61  oid *sqlite3Rena
2d5d0 6d 65 54 6f 6b 65 6e 4d 61 70 28 50 61 72 73 65  meTokenMap(Parse
2d5e0 2a 2c 20 76 6f 69 64 2a 2c 20 54 6f 6b 65 6e 2a  *, void*, Token*
2d5f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2d600 65 6e 61 6d 65 54 6f 6b 65 6e 52 65 6d 61 70 28  enameTokenRemap(
2d610 50 61 72 73 65 2a 2c 20 76 6f 69 64 20 2a 70 54  Parse*, void *pT
2d620 6f 2c 20 76 6f 69 64 20 2a 70 46 72 6f 6d 29 3b  o, void *pFrom);
2d630 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6e  .void sqlite3Ren
2d640 61 6d 65 45 78 70 72 55 6e 6d 61 70 28 50 61 72  ameExprUnmap(Par
2d650 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
2d660 64 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 45  d sqlite3RenameE
2d670 78 70 72 6c 69 73 74 55 6e 6d 61 70 28 50 61 72  xprlistUnmap(Par
2d680 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  se*, ExprList*);
2d690 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2d6a0 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73  3GetCollSeq(Pars
2d6b0 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20  e*, u8, CollSeq 
2d6c0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2d6d0 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66  .char sqlite3Aff
2d6e0 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20  inityType(const 
2d6f0 63 68 61 72 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b  char*, Column*);
2d700 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
2d710 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  lyze(Parse*, Tok
2d720 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  en*, Token*);.in
2d730 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42  t sqlite3InvokeB
2d740 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48  usyHandler(BusyH
2d750 61 6e 64 6c 65 72 2a 2c 20 73 71 6c 69 74 65 33  andler*, sqlite3
2d760 5f 66 69 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  _file*);.int sql
2d770 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74  ite3FindDb(sqlit
2d780 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
2d790 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e  t sqlite3FindDbN
2d7a0 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  ame(sqlite3 *, c
2d7b0 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
2d7c0 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  t sqlite3Analysi
2d7d0 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69  sLoad(sqlite3*,i
2d7e0 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71  nt iDB);.void sq
2d7f0 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78  lite3DeleteIndex
2d800 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a  Samples(sqlite3*
2d810 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  ,Index*);.void s
2d820 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77  qlite3DefaultRow
2d830 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  Est(Index*);.voi
2d840 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
2d850 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73  rLikeFunctions(s
2d860 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69  qlite3*, int);.i
2d870 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65  nt sqlite3IsLike
2d880 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
2d890 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61  *,Expr*,int*,cha
2d8a0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2d8b0 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69  3SchemaClear(voi
2d8c0 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71  d *);.Schema *sq
2d8d0 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73  lite3SchemaGet(s
2d8e0 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20  qlite3 *, Btree 
2d8f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2d900 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c  chemaToIndex(sql
2d910 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61  ite3 *db, Schema
2d920 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71   *);.KeyInfo *sq
2d930 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f  lite3KeyInfoAllo
2d940 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69  c(sqlite3*,int,i
2d950 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2d960 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65  3KeyInfoUnref(Ke
2d970 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f  yInfo*);.KeyInfo
2d980 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2d990 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b  Ref(KeyInfo*);.K
2d9a0 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
2d9b0 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61  eyInfoOfIndex(Pa
2d9c0 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 4b  rse*, Index*);.K
2d9d0 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
2d9e0 65 79 49 6e 66 6f 46 72 6f 6d 45 78 70 72 4c 69  eyInfoFromExprLi
2d9f0 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  st(Parse*, ExprL
2da00 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
2da10 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2da20 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65  DEBUG.int sqlite
2da30 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61  3KeyInfoIsWritea
2da40 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23  ble(KeyInfo*);.#
2da50 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2da60 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69  3CreateFunc(sqli
2da70 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
2da80 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76  r *, int, int, v
2da90 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a  oid *,.  void (*
2daa0 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2dab0 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2dac0 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64  alue **),.  void
2dad0 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2dae0 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2daf0 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20  3_value **), .  
2db00 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2db10 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f  _context*),.  vo
2db20 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
2db30 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64  ontext*),.  void
2db40 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2db50 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2db60 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20  3_value **), .  
2db70 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
2db80 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76  pDestructor.);.v
2db90 6f 69 64 20 73 71 6c 69 74 65 33 4e 6f 6f 70 44  oid sqlite3NoopD
2dba0 65 73 74 72 75 63 74 6f 72 28 76 6f 69 64 2a 29  estructor(void*)
2dbb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f  ;.void sqlite3Oo
2dbc0 6d 46 61 75 6c 74 28 73 71 6c 69 74 65 33 2a 29  mFault(sqlite3*)
2dbd0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f  ;.void sqlite3Oo
2dbe0 6d 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 29  mClear(sqlite3*)
2dbf0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69  ;.int sqlite3Api
2dc00 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  Exit(sqlite3 *db
2dc10 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2dc20 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62  te3OpenTempDatab
2dc30 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76  ase(Parse *);..v
2dc40 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
2dc50 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d  cumInit(StrAccum
2dc60 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61  *, sqlite3*, cha
2dc70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 63  r*, int, int);.c
2dc80 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
2dc90 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
2dca0 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
2dcb0 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69  te3SelectDestIni
2dcc0 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e  t(SelectDest*,in
2dcd0 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  t,int);.Expr *sq
2dce0 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d  lite3CreateColum
2dcf0 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  nExpr(sqlite3 *,
2dd00 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c   SrcList *, int,
2dd10 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c   int);..void sql
2dd20 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72  ite3BackupRestar
2dd30 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  t(sqlite3_backup
2dd40 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2dd50 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71  3BackupUpdate(sq
2dd60 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20  lite3_backup *, 
2dd70 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a  Pgno, const u8 *
2dd80 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
2dd90 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
2dda0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2ddb0 43 68 65 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20  CheckIN(Parse*, 
2ddc0 45 78 70 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  Expr*);.#else.# 
2ddd0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
2dde0 70 72 43 68 65 63 6b 49 4e 28 78 2c 79 29 20 53  prCheckIN(x,y) S
2ddf0 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a  QLITE_OK.#endif.
2de00 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2de10 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
2de20 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65  TAT4.void sqlite
2de30 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e  3AnalyzeFunction
2de40 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  s(void);.int sql
2de50 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 53 65  ite3Stat4ProbeSe
2de60 74 56 61 6c 75 65 28 0a 20 20 20 20 50 61 72 73  tValue(.    Pars
2de70 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b  e*,Index*,Unpack
2de80 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a  edRecord**,Expr*
2de90 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a  ,int,int,int*);.
2dea0 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
2deb0 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61  ValueFromExpr(Pa
2dec0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c  rse*, Expr*, u8,
2ded0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a   sqlite3_value**
2dee0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2def0 74 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e  tat4ProbeFree(Un
2df00 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a  packedRecord*);.
2df10 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
2df20 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c  Column(sqlite3*,
2df30 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
2df40 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f  t, int, sqlite3_
2df50 76 61 6c 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73  value**);.char s
2df60 71 6c 69 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d  qlite3IndexColum
2df70 6e 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65  nAffinity(sqlite
2df80 33 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29  3*, Index*, int)
2df90 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
2dfa0 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
2dfb0 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72   the LEMON-gener
2dfc0 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23  ated parser.*/.#
2dfd0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d  ifndef SQLITE_AM
2dfe0 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69  ALGAMATION.  voi
2dff0 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72  d *sqlite3Parser
2e000 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75  Alloc(void*(*)(u
2e010 36 34 29 2c 20 50 61 72 73 65 2a 29 3b 0a 20 20  64), Parse*);.  
2e020 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2e030 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f  erFree(void*, vo
2e040 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23  id(*)(void*));.#
2e050 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2e060 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20  e3Parser(void*, 
2e070 69 6e 74 2c 20 54 6f 6b 65 6e 29 3b 0a 69 6e 74  int, Token);.int
2e080 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 61   sqlite3ParserFa
2e090 6c 6c 62 61 63 6b 28 69 6e 74 29 3b 0a 23 69 66  llback(int);.#if
2e0a0 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54  def YYTRACKMAXST
2e0b0 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73  ACKDEPTH.  int s
2e0c0 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63  qlite3ParserStac
2e0d0 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65  kPeak(void*);.#e
2e0e0 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74  ndif..void sqlit
2e0f0 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73  e3AutoLoadExtens
2e100 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
2e110 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2e120 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49  MIT_LOAD_EXTENSI
2e130 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
2e140 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
2e150 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73  (sqlite3*);.#els
2e160 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2e170 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
2e180 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  s(X).#endif..#if
2e190 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2e1a0 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
2e1b0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
2e1c0 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69  eLock(Parse *, i
2e1d0 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e  nt, int, u8, con
2e1e0 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73  st char *);.#els
2e1f0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
2e200 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77  te3TableLock(v,w
2e210 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a  ,x,y,z).#endif..
2e220 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
2e230 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ST.  int sqlite3
2e240 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64  Utf8To8(unsigned
2e250 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
2e260 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
2e270 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2e280 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2e290 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23  e3VtabClear(Y).#
2e2a0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2e2b0 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51  VtabSync(X,Y) SQ
2e2c0 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
2e2d0 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  e sqlite3VtabRol
2e2e0 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69  lback(X).#  defi
2e2f0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  ne sqlite3VtabCo
2e300 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e  mmit(X).#  defin
2e310 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
2e320 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66  ync(db) 0.#  def
2e330 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c  ine sqlite3VtabL
2e340 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ock(X).#  define
2e350 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2e360 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
2e370 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2e380 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69  kList(X).#  defi
2e390 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  ne sqlite3VtabSa
2e3a0 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29  vepoint(X, Y, Z)
2e3b0 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
2e3c0 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56  fine sqlite3GetV
2e3d0 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54  Table(X,Y)  ((VT
2e3e0 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20  able*)0).#else. 
2e3f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2e400 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20  abClear(sqlite3 
2e410 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  *db, Table*);.  
2e420 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2e430 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69  bDisconnect(sqli
2e440 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a  te3 *db, Table *
2e450 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  p);.   int sqlit
2e460 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74  e3VtabSync(sqlit
2e470 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a  e3 *db, Vdbe*);.
2e480 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2e490 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74  abRollback(sqlit
2e4a0 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20  e3 *db);.   int 
2e4b0 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
2e4c0 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  t(sqlite3 *db);.
2e4d0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2e4e0 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  tabLock(VTable *
2e4f0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2e500 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61  e3VtabUnlock(VTa
2e510 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
2e520 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2e530 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b  kList(sqlite3*);
2e540 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2e550 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c  tabSavepoint(sql
2e560 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  ite3 *, int, int
2e570 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2e580 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
2e590 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65  sg(Vdbe*, sqlite
2e5a0 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61  3_vtab*);.   VTa
2e5b0 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  ble *sqlite3GetV
2e5c0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
2e5d0 54 61 62 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75  Table*);.   Modu
2e5e0 6c 65 20 2a 73 71 6c 69 74 65 33 56 74 61 62 43  le *sqlite3VtabC
2e5f0 72 65 61 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20  reateModule(.   
2e600 20 20 73 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20    sqlite3*,.    
2e610 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20   const char*,.  
2e620 20 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33     const sqlite3
2e630 5f 6d 6f 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76  _module*,.     v
2e640 6f 69 64 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28  oid*,.     void(
2e650 2a 29 28 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a  *)(void*).   );.
2e660 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2e670 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20  3VtabInSync(db) 
2e680 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30  ((db)->nVTrans>0
2e690 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e   && (db)->aVTran
2e6a0 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74  s==0).#endif.int
2e6b0 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e   sqlite3VtabEpon
2e6c0 79 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50  ymousTableInit(P
2e6d0 61 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a  arse*,Module*);.
2e6e0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2e6f0 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c  EponymousTableCl
2e700 65 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64  ear(sqlite3*,Mod
2e710 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ule*);.void sqli
2e720 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61  te3VtabMakeWrita
2e730 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ble(Parse*,Table
2e740 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e750 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50  VtabBeginParse(P
2e760 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
2e770 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69  oken*, Token*, i
2e780 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2e790 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65  3VtabFinishParse
2e7a0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
2e7b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2e7c0 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a  abArgInit(Parse*
2e7d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2e7e0 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72  tabArgExtend(Par
2e7f0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  se*, Token*);.in
2e800 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
2e810 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a  lCreate(sqlite3*
2e820 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
2e830 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69  r *, char **);.i
2e840 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
2e850 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a  llConnect(Parse*
2e860 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73  , Table*);.int s
2e870 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65  qlite3VtabCallDe
2e880 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20  stroy(sqlite3*, 
2e890 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
2e8a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2e8b0 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33  tabBegin(sqlite3
2e8c0 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46   *, VTable *);.F
2e8d0 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56  uncDef *sqlite3V
2e8e0 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74  tabOverloadFunct
2e8f0 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75  ion(sqlite3 *,Fu
2e900 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67  ncDef*, int nArg
2e910 2c 20 45 78 70 72 2a 29 3b 0a 73 71 6c 69 74 65  , Expr*);.sqlite
2e920 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53  3_int64 sqlite3S
2e930 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73  tmtCurrentTime(s
2e940 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
2e950 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  ;.int sqlite3Vdb
2e960 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28  eParameterIndex(
2e970 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Vdbe*, const cha
2e980 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
2e990 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e  lite3TransferBin
2e9a0 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74  dings(sqlite3_st
2e9b0 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74  mt *, sqlite3_st
2e9c0 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  mt *);.void sqli
2e9d0 74 65 33 50 61 72 73 65 72 52 65 73 65 74 28 50  te3ParserReset(P
2e9e0 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
2e9f0 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62  te3Reprepare(Vdb
2ea00 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2ea10 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65  3ExprListCheckLe
2ea20 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70  ngth(Parse*, Exp
2ea30 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
2ea40 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ar*);.CollSeq *s
2ea50 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70  qlite3BinaryComp
2ea60 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  areCollSeq(Parse
2ea70 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72   *, Expr *, Expr
2ea80 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2ea90 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e  TempInMemory(con
2eaa0 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f  st sqlite3*);.co
2eab0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2eac0 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
2ead0 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  (int);.#ifndef S
2eae0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
2eaf0 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63   int sqlite3Chec
2eb00 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c  kpoint(sqlite3*,
2eb10 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
2eb20 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71   int*);.  int sq
2eb30 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48  lite3WalDefaultH
2eb40 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ook(void*,sqlite
2eb50 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
2eb60 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e  nt);.#endif.#ifn
2eb70 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2eb80 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69  CTE.  With *sqli
2eb90 74 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65  te3WithAdd(Parse
2eba0 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45  *,With*,Token*,E
2ebb0 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a  xprList*,Select*
2ebc0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2ebd0 33 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69  3WithDelete(sqli
2ebe0 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76  te3*,With*);.  v
2ebf0 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50  oid sqlite3WithP
2ec00 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68  ush(Parse*, With
2ec10 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64  *, u8);.#else.#d
2ec20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74  efine sqlite3Wit
2ec30 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65  hPush(x,y,z).#de
2ec40 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
2ec50 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64  Delete(x,y).#end
2ec60 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
2ec70 45 5f 4f 4d 49 54 5f 55 50 53 45 52 54 0a 20 20  E_OMIT_UPSERT.  
2ec80 55 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33 55  Upsert *sqlite3U
2ec90 70 73 65 72 74 4e 65 77 28 73 71 6c 69 74 65 33  psertNew(sqlite3
2eca0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
2ecb0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
2ecc0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2ecd0 65 33 55 70 73 65 72 74 44 65 6c 65 74 65 28 73  e3UpsertDelete(s
2ece0 71 6c 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29  qlite3*,Upsert*)
2ecf0 3b 0a 20 20 55 70 73 65 72 74 20 2a 73 71 6c 69  ;.  Upsert *sqli
2ed00 74 65 33 55 70 73 65 72 74 44 75 70 28 73 71 6c  te3UpsertDup(sql
2ed10 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a  ite3*,Upsert*);.
2ed20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 70 73    int sqlite3Ups
2ed30 65 72 74 41 6e 61 6c 79 7a 65 54 61 72 67 65 74  ertAnalyzeTarget
2ed40 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
2ed50 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 76 6f 69  ,Upsert*);.  voi
2ed60 64 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  d sqlite3UpsertD
2ed70 6f 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 55  oUpdate(Parse*,U
2ed80 70 73 65 72 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e  psert*,Table*,In
2ed90 64 65 78 2a 2c 69 6e 74 29 3b 0a 23 65 6c 73 65  dex*,int);.#else
2eda0 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
2edb0 55 70 73 65 72 74 4e 65 77 28 76 2c 77 2c 78 2c  UpsertNew(v,w,x,
2edc0 79 2c 7a 29 20 28 28 55 70 73 65 72 74 2a 29 30  y,z) ((Upsert*)0
2edd0 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ).#define sqlite
2ede0 33 55 70 73 65 72 74 44 65 6c 65 74 65 28 78 2c  3UpsertDelete(x,
2edf0 79 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  y).#define sqlit
2ee00 65 33 55 70 73 65 72 74 44 75 70 28 78 2c 79 29  e3UpsertDup(x,y)
2ee10 20 20 20 20 20 20 20 28 28 55 70 73 65 72 74 2a         ((Upsert*
2ee20 29 30 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20  )0).#endif.../* 
2ee30 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72  Declarations for
2ee40 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b   functions in fk
2ee50 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65  ey.c. All of the
2ee60 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  se are replaced 
2ee70 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72  by.** no-op macr
2ee80 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49  os if OMIT_FOREI
2ee90 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65  GN_KEY is define
2eea0 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
2eeb0 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  no foreign.** ke
2eec0 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  y functionality 
2eed0 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66  is available. If
2eee0 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73   OMIT_TRIGGER is
2eef0 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20   defined but.** 
2ef00 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2ef10 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f   is not, only so
2ef20 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
2ef30 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e  ons are no-oped.
2ef40 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65   In.** this case
2ef50 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72   foreign keys ar
2ef60 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f  e parsed, but no
2ef70 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61   other functiona
2ef80 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69  lity is.** provi
2ef90 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74  ded (enforcement
2efa0 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e   of FK constrain
2efb0 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20  ts requires the 
2efc0 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73  triggers sub-sys
2efd0 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tem)..*/.#if !de
2efe0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2eff0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26  T_FOREIGN_KEY) &
2f000 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2f010 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
2f020 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
2f030 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61  Check(Parse*, Ta
2f040 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
2f050 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  int*, int);.  vo
2f060 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  id sqlite3FkDrop
2f070 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
2f080 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29  cList *, Table*)
2f090 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2f0a0 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a  FkActions(Parse*
2f0b0 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69  , Table*, ExprLi
2f0c0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  st*, int, int*, 
2f0d0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
2f0e0 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61  te3FkRequired(Pa
2f0f0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2f100 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20  t*, int);.  u32 
2f110 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
2f120 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
2f130 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65  ;.  FKey *sqlite
2f140 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61  3FkReferences(Ta
2f150 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  ble *);.#else.  
2f160 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2f170 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64  kActions(a,b,c,d
2f180 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
2f190 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61  sqlite3FkCheck(a
2f1a0 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
2f1b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
2f1c0 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a  ropTable(a,b,c).
2f1d0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2f1e0 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20  3FkOldmask(a,b) 
2f1f0 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66          0.  #def
2f200 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71  ine sqlite3FkReq
2f210 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20  uired(a,b,c,d)  
2f220 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71    0.  #define sq
2f230 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65  lite3FkReference
2f240 73 28 61 29 20 20 20 20 20 20 20 20 30 0a 23 65  s(a)        0.#e
2f250 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
2f260 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2f270 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  _KEY.  void sqli
2f280 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69  te3FkDelete(sqli
2f290 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  te3 *, Table*);.
2f2a0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c    int sqlite3FkL
2f2b0 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  ocateIndex(Parse
2f2c0 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49  *,Table*,FKey*,I
2f2d0 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23  ndex**,int**);.#
2f2e0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2f2f0 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61  qlite3FkDelete(a
2f300 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,b).  #define sq
2f310 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
2f320 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65  ex(a,b,c,d,e).#e
2f330 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61  ndif.../*.** Ava
2f340 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a  ilable fault inj
2f350 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20  ectors.  Should 
2f360 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69  be numbered begi
2f370 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f  nning with 0..*/
2f380 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2f390 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41  FAULTINJECTOR_MA
2f3a0 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69  LLOC     0.#defi
2f3b0 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
2f3c0 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20  NJECTOR_COUNT   
2f3d0 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
2f3e0 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
2f3f0 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63   code in fault.c
2f400 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69   used for identi
2f410 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a  fying "benign".*
2f420 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  * malloc failure
2f430 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20  s. This is only 
2f440 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54  present if SQLIT
2f450 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20  E_UNTESTABLE.** 
2f460 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a  is not defined..
2f470 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2f480 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 76  E_UNTESTABLE.  v
2f490 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
2f4a0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
2f4b0 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  d);.  void sqlit
2f4c0 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
2f4d0 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20  c(void);.#else. 
2f4e0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2f4f0 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
2f500 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  c().  #define sq
2f510 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
2f520 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f  lloc().#endif../
2f530 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  *.** Allowed ret
2f540 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
2f550 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
2f560 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ex().*/.#define 
2f570 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20  IN_INDEX_ROWID  
2f580 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61        1   /* Sea
2f590 72 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66  rch the rowid of
2f5a0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64   the table */.#d
2f5b0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45  efine IN_INDEX_E
2f5c0 50 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20  PH          2   
2f5d0 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68  /* Search an eph
2f5e0 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f  emeral b-tree */
2f5f0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2f600 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33  X_INDEX_ASC    3
2f610 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
2f620 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a  ndex ASCENDING *
2f630 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2f640 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20  EX_INDEX_DESC   
2f650 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20  4   /* Existing 
2f660 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47  index DESCENDING
2f670 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2f680 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20  NDEX_NOOP       
2f690 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c    5   /* No tabl
2f6a0 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65  e available. Use
2f6b0 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a   comparisons */.
2f6c0 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c  /*.** Allowed fl
2f6d0 61 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20  ags for the 3rd 
2f6e0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
2f6f0 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
2f700 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  )..*/.#define IN
2f710 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20  _INDEX_NOOP_OK  
2f720 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b     0x0001  /* OK
2f730 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e   to return IN_IN
2f740 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66  DEX_NOOP */.#def
2f750 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d  ine IN_INDEX_MEM
2f760 42 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20  BERSHIP  0x0002 
2f770 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
2f780 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73  used for members
2f790 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66  hip test */.#def
2f7a0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f  ine IN_INDEX_LOO
2f7b0 50 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20  P        0x0004 
2f7c0 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
2f7d0 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a  used as a loop *
2f7e0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  /.int sqlite3Fin
2f7f0 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a  dInIndex(Parse *
2f800 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69  , Expr *, u32, i
2f810 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74  nt*, int*);..int
2f820 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f   sqlite3JournalO
2f830 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20  pen(sqlite3_vfs 
2f840 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
2f850 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c   sqlite3_file *,
2f860 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
2f870 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
2f880 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ze(sqlite3_vfs *
2f890 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
2f8a0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f  QLITE_ENABLE_ATO
2f8b0 4d 49 43 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c  MIC_WRITE) \. ||
2f8c0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2f8d0 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
2f8e0 4d 49 43 5f 57 52 49 54 45 29 0a 20 20 69 6e 74  MIC_WRITE).  int
2f8f0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43   sqlite3JournalC
2f900 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69  reate(sqlite3_fi
2f910 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69  le *);.#endif..i
2f920 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
2f930 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69  lIsInMemory(sqli
2f940 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f  te3_file *p);.vo
2f950 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75  id sqlite3MemJou
2f960 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
2f970 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  _file *);..void 
2f980 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
2f990 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72  ightAndFlags(Par
2f9a0 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2f9b0 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45   *p);.#if SQLITE
2f9c0 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
2f9d0 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53  0.  int sqlite3S
2f9e0 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28  electExprHeight(
2f9f0 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74  Select *);.  int
2fa00 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2fa10 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20  kHeight(Parse*, 
2fa20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  int);.#else.  #d
2fa30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c  efine sqlite3Sel
2fa40 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29  ectExprHeight(x)
2fa50 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
2fa60 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69  ite3ExprCheckHei
2fa70 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ght(x,y).#endif.
2fa80 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34  .u32 sqlite3Get4
2fa90 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b  byte(const u8*);
2faa0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74  .void sqlite3Put
2fab0 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b  4byte(u8*, u32);
2fac0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2fad0 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
2fae0 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  TIFY.  void sqli
2faf0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f  te3ConnectionBlo
2fb00 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20  cked(sqlite3 *, 
2fb10 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f  sqlite3 *);.  vo
2fb20 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
2fb30 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c  tionUnlocked(sql
2fb40 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69  ite3 *db);.  voi
2fb50 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
2fb60 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65  ionClosed(sqlite
2fb70 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20  3 *db);.#else.  
2fb80 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
2fb90 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
2fba0 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20  (x,y).  #define 
2fbb0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2fbc0 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23  nUnlocked(x).  #
2fbd0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2fbe0 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78  nnectionClosed(x
2fbf0 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
2fc00 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2fc10 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2fc20 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63  erTrace(FILE*, c
2fc30 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 23  har *);.#endif.#
2fc40 69 66 20 64 65 66 69 6e 65 64 28 59 59 43 4f 56  if defined(YYCOV
2fc50 45 52 41 47 45 29 0a 20 20 69 6e 74 20 73 71 6c  ERAGE).  int sql
2fc60 69 74 65 33 50 61 72 73 65 72 43 6f 76 65 72 61  ite3ParserCovera
2fc70 67 65 28 46 49 4c 45 2a 29 3b 0a 23 65 6e 64 69  ge(FILE*);.#endi
2fc80 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  f../*.** If the 
2fc90 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f  SQLITE_ENABLE IO
2fca0 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65  TRACE exists the
2fcb0 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  n the global var
2fcc0 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33  iable.** sqlite3
2fcd0 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69  IoTrace is a poi
2fce0 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66  nter to a printf
2fcf0 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73  -like routine us
2fd00 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49  ed to.** print I
2fd10 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61  /O tracing messa
2fd20 67 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ges..*/.#ifdef S
2fd30 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54  QLITE_ENABLE_IOT
2fd40 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f  RACE.# define IO
2fd50 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71  TRACE(A)  if( sq
2fd60 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20  lite3IoTrace ){ 
2fd70 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41  sqlite3IoTrace A
2fd80 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ; }.  void sqlit
2fd90 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
2fda0 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f  (Vdbe*);.SQLITE_
2fdb0 41 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52  API SQLITE_EXTER
2fdc0 4e 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43  N void (SQLITE_C
2fdd0 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54  DECL *sqlite3IoT
2fde0 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72  race)(const char
2fdf0 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20  *,...);.#else.# 
2fe00 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
2fe10 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2fe20 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
2fe30 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
2fe40 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73  * These routines
2fe50 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66   are available f
2fe60 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65  or the mem2.c de
2fe70 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61  bugging memory a
2fe80 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79  llocator.** only
2fe90 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64  .  They are used
2fea0 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
2feb0 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73  different "types
2fec0 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61  " of memory.** a
2fed0 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70  llocations are p
2fee0 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20  roperly tracked 
2fef0 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a  by the system..*
2ff00 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
2ff10 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65  ebugSetType() se
2ff20 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66  ts the "type" of
2ff30 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74   an allocation t
2ff40 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20  o one of.** the 
2ff50 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73  MEMTYPE_* macros
2ff60 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20   defined below. 
2ff70 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62   The type must b
2ff80 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68  e a bitmask with
2ff90 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74  .** a single bit
2ffa0 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69   set..**.** sqli
2ffb0 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
2ffc0 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
2ffd0 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20  e if any of the 
2ffe0 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
2fff0 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
30000 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
30010 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
30020 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
30030 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73  gSetType()..** s
30040 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
30050 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e  sType() is inten
30060 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69  ded for use insi
30070 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  de assert() stat
30080 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71  ements..**.** sq
30090 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
300a0 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
300b0 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68  ue if none of th
300c0 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
300d0 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
300e0 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
300f0 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
30100 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
30110 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
30120 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20  .** Perhaps the 
30130 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70  most important p
30140 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66  oint is the diff
30150 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d  erence between M
30160 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61  EMTYPE_HEAP.** a
30170 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  nd MEMTYPE_LOOKA
30180 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c  SIDE.  If an all
30190 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59  ocation is MEMTY
301a0 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68  PE_LOOKASIDE, th
301b0 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d  at means.** it m
301c0 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61  ight have been a
301d0 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b  llocated by look
301e0 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68  aside, except th
301f0 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73  e allocation was
30200 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72  .** too large or
30210 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61   lookaside was a
30220 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74  lready full.  It
30230 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
30240 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20   verify.** that 
30250 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74  allocations that
30260 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
30270 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f   satisfied by lo
30280 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a  okaside are not.
30290 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74  ** passed back t
302a0 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  o non-lookaside 
302b0 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e  free() routines.
302c0 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61    Asserts such a
302d0 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65  s the.** example
302e0 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65   above are place
302f0 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f  d on the non-loo
30300 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
30310 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79  utines to verify
30320 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61  .** this constra
30330 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f  int..**.** All o
30340 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20  f this is no-op 
30350 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e  for a production
30360 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79   build.  It only
30370 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70   comes into.** p
30380 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c  lay when the SQL
30390 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d  ITE_MEMDEBUG com
303a0 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
303b0 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66   is used..*/.#if
303c0 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  def SQLITE_MEMDE
303d0 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BUG.  void sqlit
303e0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
303f0 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69  e(void*,u8);.  i
30400 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  nt sqlite3Memdeb
30410 75 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c  ugHasType(void*,
30420 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  u8);.  int sqlit
30430 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
30440 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73  (void*,u8);.#els
30450 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
30460 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
30470 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70  e(X,Y)  /* no-op
30480 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   */.# define sql
30490 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
304a0 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65  ype(X,Y)  1.# de
304b0 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
304c0 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20  ebugNoType(X,Y) 
304d0 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69    1.#endif.#defi
304e0 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20  ne MEMTYPE_HEAP 
304f0 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47        0x01  /* G
30500 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f  eneral heap allo
30510 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
30520 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  ne MEMTYPE_LOOKA
30530 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48  SIDE  0x02  /* H
30540 65 61 70 20 74 68 61 74 20 6d 69 67 68 74 20 68  eap that might h
30550 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69  ave been lookasi
30560 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  de */.#define ME
30570 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20  MTYPE_PCACHE    
30580 20 30 78 30 34 20 20 2f 2a 20 50 61 67 65 20 63   0x04  /* Page c
30590 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ache allocations
305a0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61   */../*.** Threa
305b0 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a  ding interface.*
305c0 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
305d0 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
305e0 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72  0.int sqlite3Thr
305f0 65 61 64 43 72 65 61 74 65 28 53 51 4c 69 74 65  eadCreate(SQLite
30600 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a  Thread**,void*(*
30610 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b  )(void*),void*);
30620 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65  .int sqlite3Thre
30630 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72  adJoin(SQLiteThr
30640 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23  ead*, void**);.#
30650 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
30660 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
30670 5f 44 42 50 41 47 45 5f 56 54 41 42 29 20 7c 7c  _DBPAGE_VTAB) ||
30680 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
30690 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65  TEST).int sqlite
306a0 33 44 62 70 61 67 65 52 65 67 69 73 74 65 72 28  3DbpageRegister(
306b0 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69  sqlite3*);.#endi
306c0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
306d0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54  LITE_ENABLE_DBST
306e0 41 54 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69  AT_VTAB) || defi
306f0 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
30700 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 73 74  .int sqlite3Dbst
30710 61 74 52 65 67 69 73 74 65 72 28 73 71 6c 69 74  atRegister(sqlit
30720 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e  e3*);.#endif..in
30730 74 20 73 71 6c 69 74 65 33 45 78 70 72 56 65 63  t sqlite3ExprVec
30740 74 6f 72 53 69 7a 65 28 45 78 70 72 20 2a 70 45  torSize(Expr *pE
30750 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
30760 33 45 78 70 72 49 73 56 65 63 74 6f 72 28 45 78  3ExprIsVector(Ex
30770 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72  pr *pExpr);.Expr
30780 20 2a 73 71 6c 69 74 65 33 56 65 63 74 6f 72 46   *sqlite3VectorF
30790 69 65 6c 64 53 75 62 65 78 70 72 28 45 78 70 72  ieldSubexpr(Expr
307a0 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  *, int);.Expr *s
307b0 71 6c 69 74 65 33 45 78 70 72 46 6f 72 56 65 63  qlite3ExprForVec
307c0 74 6f 72 46 69 65 6c 64 28 50 61 72 73 65 2a 2c  torField(Parse*,
307d0 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  Expr*,int);.void
307e0 20 73 71 6c 69 74 65 33 56 65 63 74 6f 72 45 72   sqlite3VectorEr
307f0 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 45  rorMsg(Parse*, E
30800 78 70 72 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20  xpr*);..#ifndef 
30810 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
30820 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a  ILEOPTION_DIAGS.
30830 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 73 71 6c  const char **sql
30840 69 74 65 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f  ite3CompileOptio
30850 6e 73 28 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a  ns(int *pnOpt);.
30860 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f  #endif..#endif /
30870 2a 20 53 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f  * SQLITEINT_H */
30880 0a                                               .