/ Hex Artifact Content
Login

Artifact 78e9b483adbdf928923a175f2c8470da89024b973b4b790486b6e8736b4c876f:


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 0a 23 20 20  fined(__x86).#  
6950: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
6960: 54 52 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a  TRSIZE 4.# else.
6970: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6980: 45 5f 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e  E_PTRSIZE 8.# en
6990: 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  dif.#endif../* T
69a0: 68 65 20 75 70 74 72 20 74 79 70 65 20 69 73 20  he uptr type is 
69b0: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
69c0: 67 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68  ger large enough
69d0: 20 74 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74   to hold a point
69e0: 65 72 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  er.*/.#if define
69f0: 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29  d(HAVE_STDINT_H)
6a00: 0a 20 20 74 79 70 65 64 65 66 20 75 69 6e 74 70  .  typedef uintp
6a10: 74 72 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66  tr_t uptr;.#elif
6a20: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d   SQLITE_PTRSIZE=
6a30: 3d 34 0a 20 20 74 79 70 65 64 65 66 20 75 33 32  =4.  typedef u32
6a40: 20 75 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74   uptr;.#else.  t
6a50: 79 70 65 64 65 66 20 75 36 34 20 75 70 74 72 3b  ypedef u64 uptr;
6a60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
6a70: 68 65 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e  he SQLITE_WITHIN
6a80: 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68  (P,S,E) macro ch
6a90: 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70  ecks to see if p
6aa0: 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20  ointer P points 
6ab0: 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20  to.** something 
6ac0: 62 65 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75  between S (inclu
6ad0: 73 69 76 65 29 20 61 6e 64 20 45 20 28 65 78 63  sive) and E (exc
6ae0: 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49  lusive)..**.** I
6af0: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53  n other words, S
6b00: 20 69 73 20 61 20 62 75 66 66 65 72 20 61 6e 64   is a buffer and
6b10: 20 45 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20   E is a pointer 
6b20: 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
6b30: 65 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65  e after.** the e
6b40: 6e 64 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20  nd of buffer S. 
6b50: 20 54 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75   This macro retu
6b60: 72 6e 73 20 74 72 75 65 20 69 66 20 50 20 70 6f  rns true if P po
6b70: 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e  ints to somethin
6b80: 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77  g.** contained w
6b90: 69 74 68 69 6e 20 74 68 65 20 62 75 66 66 65 72  ithin the buffer
6ba0: 20 53 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53   S..*/.#define S
6bb0: 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53  QLITE_WITHIN(P,S
6bc0: 2c 45 29 20 28 28 28 75 70 74 72 29 28 50 29 3e  ,E) (((uptr)(P)>
6bd0: 3d 28 75 70 74 72 29 28 53 29 29 26 26 28 28 75  =(uptr)(S))&&((u
6be0: 70 74 72 29 28 50 29 3c 28 75 70 74 72 29 28 45  ptr)(P)<(uptr)(E
6bf0: 29 29 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ))).../*.** Macr
6c00: 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
6c10: 77 68 65 74 68 65 72 20 74 68 65 20 6d 61 63 68  whether the mach
6c20: 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69  ine is big or li
6c30: 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20  ttle endian,.** 
6c40: 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e  and whether or n
6c50: 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e  ot that determin
6c60: 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d  ation is run-tim
6c70: 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  e or compile-tim
6c80: 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73  e..**.** For bes
6c90: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61  t performance, a
6ca0: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
6cb0: 65 20 74 6f 20 67 75 65 73 73 20 61 74 20 74 68  e to guess at th
6cc0: 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20  e byte-order.** 
6cd0: 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65  using C-preproce
6ce0: 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66  ssor macros.  If
6cf0: 20 74 68 61 74 20 69 73 20 75 6e 73 75 63 63 65   that is unsucce
6d00: 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20  ssful, or if.** 
6d10: 2d 44 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  -DSQLITE_BYTEORD
6d20: 45 52 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65  ER=0 is set, the
6d30: 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20  n byte-order is 
6d40: 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74  determined.** at
6d50: 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69   run-time..*/.#i
6d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54  fndef SQLITE_BYT
6d70: 45 4f 52 44 45 52 0a 23 20 69 66 20 64 65 66 69  EORDER.# if defi
6d80: 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c  ned(i386)     ||
6d90: 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f   defined(__i386_
6da0: 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  _)   || defined(
6db0: 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c  _M_IX86) ||    \
6dc0: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  .     defined(__
6dd0: 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e  x86_64) || defin
6de0: 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c  ed(__x86_64__) |
6df0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34  | defined(_M_X64
6e00: 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  )  ||    \.     
6e10: 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34  defined(_M_AMD64
6e20: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f  ) || defined(_M_
6e30: 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69  ARM)     || defi
6e40: 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20  ned(__x86)   || 
6e50: 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65     \.     define
6e60: 64 28 5f 5f 61 72 6d 5f 5f 29 0a 23 20 20 20 64  d(__arm__).#   d
6e70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
6e80: 45 4f 52 44 45 52 20 20 20 20 31 32 33 34 0a 23  EORDER    1234.#
6e90: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 73 70   elif defined(sp
6ea0: 61 72 63 29 20 20 20 20 7c 7c 20 64 65 66 69 6e  arc)    || defin
6eb0: 65 64 28 5f 5f 70 70 63 5f 5f 29 0a 23 20 20 20  ed(__ppc__).#   
6ec0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
6ed0: 54 45 4f 52 44 45 52 20 20 20 20 34 33 32 31 0a  TEORDER    4321.
6ee0: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
6ef0: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
6f00: 45 52 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e  ER 0.# endif.#en
6f10: 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 42  dif.#if SQLITE_B
6f20: 59 54 45 4f 52 44 45 52 3d 3d 34 33 32 31 0a 23  YTEORDER==4321.#
6f30: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
6f40: 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a 23 20  IGENDIAN    1.# 
6f50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
6f60: 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20 64  TTLEENDIAN 0.# d
6f70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46  efine SQLITE_UTF
6f80: 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45  16NATIVE  SQLITE
6f90: 5f 55 54 46 31 36 42 45 0a 23 65 6c 69 66 20 53  _UTF16BE.#elif S
6fa0: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d  QLITE_BYTEORDER=
6fb0: 3d 31 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53  =1234.# define S
6fc0: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
6fd0: 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51     0.# define SQ
6fe0: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
6ff0: 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 1.# define SQL
7000: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
7010: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a   SQLITE_UTF16LE.
7020: 23 65 6c 73 65 0a 23 20 69 66 64 65 66 20 53 51  #else.# ifdef SQ
7030: 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
7040: 4e 0a 20 20 63 6f 6e 73 74 20 69 6e 74 20 73 71  N.  const int sq
7050: 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 20  lite3one = 1;.# 
7060: 65 6c 73 65 0a 20 20 65 78 74 65 72 6e 20 63 6f  else.  extern co
7070: 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f  nst int sqlite3o
7080: 6e 65 3b 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  ne;.# endif.# de
7090: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
70a0: 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72  NDIAN    (*(char
70b0: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
70c0: 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==0).# define SQ
70d0: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
70e0: 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71  N (*(char *)(&sq
70f0: 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20  lite3one)==1).# 
7100: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
7110: 46 31 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49  F16NATIVE  (SQLI
7120: 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c  TE_BIGENDIAN?SQL
7130: 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49  ITE_UTF16BE:SQLI
7140: 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64  TE_UTF16LE).#end
7150: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61  if../*.** Consta
7160: 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67  nts for the larg
7170: 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74  est and smallest
7180: 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74   possible 64-bit
7190: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
71a0: 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  ..** These macro
71b0: 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74  s are designed t
71c0: 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79  o work correctly
71d0: 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20   on both 32-bit 
71e0: 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f  and 64-bit.** co
71f0: 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66  mpilers..*/.#def
7200: 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ine LARGEST_INT6
7210: 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28  4  (0xffffffff|(
7220: 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66  ((i64)0x7fffffff
7230: 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20  )<<32)).#define 
7240: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28  SMALLEST_INT64 (
7250: 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47  ((i64)-1) - LARG
7260: 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a  EST_INT64)../*.*
7270: 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d  * Round up a num
7280: 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ber to the next 
7290: 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20  larger multiple 
72a0: 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20 75  of 8.  This is u
72b0: 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20  sed.** to force 
72c0: 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  8-byte alignment
72d0: 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69   on 64-bit archi
72e0: 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65  tectures..*/.#de
72f0: 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20  fine ROUND8(x)  
7300: 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a     (((x)+7)&~7).
7310: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77  ./*.** Round dow
7320: 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74  n to the nearest
7330: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a   multiple of 8.*
7340: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44  /.#define ROUNDD
7350: 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29  OWN8(x) ((x)&~7)
7360: 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74  ../*.** Assert t
7370: 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20  hat the pointer 
7380: 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20  X is aligned to 
7390: 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61  an 8-byte bounda
73a0: 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63  ry.  This.** mac
73b0: 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  ro is used only 
73c0: 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29 20  within assert() 
73d0: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
73e0: 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20  he code gets.** 
73f0: 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65  all alignment re
7400: 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65  strictions corre
7410: 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74  ct..**.** Except
7420: 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  , if SQLITE_4_BY
7430: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
7440: 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  C is defined, th
7450: 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c  en the.** underl
7460: 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d  ying malloc() im
7470: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67  plementation mig
7480: 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62  ht return us 4-b
7490: 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70  yte aligned.** p
74a0: 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61  ointers.  In tha
74b0: 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72  t case, only ver
74c0: 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e  ify 4-byte align
74d0: 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ment..*/.#ifdef 
74e0: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
74f0: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64  IGNED_MALLOC.# d
7500: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
7510: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
7520: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
7530: 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29  (char*)0)&3)==0)
7540: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
7550: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
7560: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
7570: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
7580: 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69  )0)&7)==0).#endi
7590: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65  f../*.** Disable
75a0: 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72   MMAP on platfor
75b0: 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b  ms where it is k
75c0: 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b  nown to not work
75d0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
75e0: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20  __OpenBSD__) || 
75f0: 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f  defined(__QNXNTO
7600: 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  __).# undef SQLI
7610: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7620: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7630: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
7640: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
7650: 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73  efault maximum s
7660: 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73  ize of memory us
7670: 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70  ed by memory-map
7680: 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56  ped I/O in the V
7690: 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41  FS.*/.#ifdef __A
76a0: 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65  PPLE__.# include
76b0: 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f   <TargetConditio
76c0: 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 23  nals.h>.#endif.#
76d0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41  ifndef SQLITE_MA
76e0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66  X_MMAP_SIZE.# if
76f0: 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78   defined(__linux
7700: 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  __) \.  || defin
7710: 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c  ed(_WIN32) \.  |
7720: 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  | (defined(__APP
7730: 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64  LE__) && defined
7740: 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20  (__MACH__)) \.  
7750: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e  || defined(__sun
7760: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
7770: 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20 5c 0a  (__FreeBSD__) \.
7780: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 44    || defined(__D
7790: 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20 20 20  ragonFly__).#   
77a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
77b0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66  X_MMAP_SIZE 0x7f
77c0: 66 66 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34  ff0000  /* 21474
77d0: 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a  18112 */.# else.
77e0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
77f0: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
7800: 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  0.# endif.#endif
7810: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61  ../*.** The defa
7820: 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73  ult MMAP_SIZE is
7830: 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61   zero on all pla
7840: 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65  tforms.  Or, eve
7850: 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a  n if a larger.**
7860: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
7870: 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64 20  ZE is specified 
7880: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c  at compile-time,
7890: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   make sure that 
78a0: 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65  it does.** not e
78b0: 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d 75  xceed the maximu
78c0: 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a  m mmap size..*/.
78d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
78e0: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
78f0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7900: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
7910: 5a 45 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20  ZE 0.#endif.#if 
7920: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
7930: 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f  MAP_SIZE>SQLITE_
7940: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
7950: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  undef SQLITE_DEF
7960: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  AULT_MMAP_SIZE.#
7970: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
7980: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
7990: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
79a0: 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _SIZE.#endif../*
79b0: 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20  .** Only one of 
79c0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
79d0: 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e  AT3 or SQLITE_EN
79e0: 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20 62  ABLE_STAT4 can b
79f0: 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72  e defined..** Pr
7a00: 69 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e 20  iority is given 
7a10: 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  to SQLITE_ENABLE
7a20: 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69 74 68  _STAT4.  If eith
7a30: 65 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  er are defined, 
7a40: 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53  also.** define S
7a50: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7a60: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23  T3_OR_STAT4.*/.#
7a70: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
7a80: 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64 65  BLE_STAT4.# unde
7a90: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7aa0: 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53  STAT3.# define S
7ab0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7ac0: 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65  T3_OR_STAT4 1.#e
7ad0: 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  lif SQLITE_ENABL
7ae0: 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65  E_STAT3.# define
7af0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
7b00: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a  TAT3_OR_STAT4 1.
7b10: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  #elif SQLITE_ENA
7b20: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
7b30: 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  T4.# undef SQLIT
7b40: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7b50: 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a  R_STAT4.#endif..
7b60: 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41 43  /*.** SELECTTRAC
7b70: 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20 62  E_ENABLED will b
7b80: 65 20 65 69 74 68 65 72 20 31 20 6f 72 20 30 20  e either 1 or 0 
7b90: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
7ba0: 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74  ther or not.** t
7bb0: 68 65 20 53 65 6c 65 63 74 20 71 75 65 72 79 20  he Select query 
7bc0: 67 65 6e 65 72 61 74 6f 72 20 74 72 61 63 69 6e  generator tracin
7bd0: 67 20 6c 6f 67 69 63 20 69 73 20 74 75 72 6e 65  g logic is turne
7be0: 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  d on..*/.#if def
7bf0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
7c00: 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a  LE_SELECTTRACE).
7c10: 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54  # define SELECTT
7c20: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23  RACE_ENABLED 1.#
7c30: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 45  else.# define SE
7c40: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
7c50: 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D 0.#endif../*.*
7c60: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
7c70: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
7c80: 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
7c90: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75   to store the bu
7ca0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
7cb0: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76  llback for a giv
7cc0: 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65  en sqlite handle
7cd0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69  ..**.** The sqli
7ce0: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
7cf0: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
7d00: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
7d10: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
7d20: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
7d30: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
7d40: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
7d50: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
7d60: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
7d70: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
7d80: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
7d90: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
7da0: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
7db0: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
7dc0: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
7dd0: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
7de0: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
7df0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
7e00: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
7e10: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
7e20: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 42 75 73  r {.  int (*xBus
7e30: 79 48 61 6e 64 6c 65 72 29 28 76 6f 69 64 20 2a  yHandler)(void *
7e40: 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20 62  ,int);  /* The b
7e50: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
7e60: 20 20 76 6f 69 64 20 2a 70 42 75 73 79 41 72 67    void *pBusyArg
7e70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7e80: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
7e90: 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63   to busy callbac
7ea0: 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79  k */.  int nBusy
7eb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7ec0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72           /* Incr
7ed0: 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
7ee0: 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 20  h busy call */. 
7ef0: 20 75 38 20 62 45 78 74 72 61 46 69 6c 65 41 72   u8 bExtraFileAr
7f00: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
7f10: 20 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20 73 71     /* Include sq
7f20: 6c 69 74 65 33 5f 66 69 6c 65 20 61 73 20 63 61  lite3_file as ca
7f30: 6c 6c 62 61 63 6b 20 61 72 67 20 2a 2f 0a 7d 3b  llback arg */.};
7f40: 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20  ../*.** Name of 
7f50: 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  the master datab
7f60: 61 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  ase table.  The 
7f70: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
7f80: 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70  table.** is a sp
7f90: 65 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74  ecial table that
7fa0: 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73   holds the names
7fb0: 20 61 6e 64 20 61 74 74 72 69 62 75 74 65 73 20   and attributes 
7fc0: 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74  of all.** user t
7fd0: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
7fe0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  s..*/.#define MA
7ff0: 53 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20  STER_NAME       
8000: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a  "sqlite_master".
8010: 23 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53  #define TEMP_MAS
8020: 54 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74  TER_NAME  "sqlit
8030: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a  e_temp_master"..
8040: 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70  /*.** The root-p
8050: 61 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65  age of the maste
8060: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
8070: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  ..*/.#define MAS
8080: 54 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31  TER_ROOT       1
8090: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65  ../*.** The name
80a0: 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 74   of the schema t
80b0: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
80c0: 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29   SCHEMA_TABLE(x)
80d0: 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42    ((!OMIT_TEMPDB
80e0: 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d  )&&(x==1)?TEMP_M
80f0: 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45  ASTER_NAME:MASTE
8100: 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41  R_NAME)../*.** A
8110: 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63   convenience mac
8120: 72 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ro that returns 
8130: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c  the number of el
8140: 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20  ements in.** an 
8150: 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e  array..*/.#defin
8160: 65 20 41 72 72 61 79 53 69 7a 65 28 58 29 20 20  e ArraySize(X)  
8170: 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28    ((int)(sizeof(
8180: 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29  X)/sizeof(X[0]))
8190: 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69  )../*.** Determi
81a0: 6e 65 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  ne if the argume
81b0: 6e 74 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66  nt is a power of
81c0: 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20   two.*/.#define 
81d0: 49 73 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20  IsPowerOfTwo(X) 
81e0: 28 28 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d  (((X)&((X)-1))==
81f0: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  0)../*.** The fo
8200: 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73  llowing value as
8210: 20 61 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65   a destructor me
8220: 61 6e 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74  ans to use sqlit
8230: 65 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54  e3DbFree()..** T
8240: 68 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  he sqlite3DbFree
8250: 28 29 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69  () routine requi
8260: 72 65 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65  res two paramete
8270: 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68  rs instead of th
8280: 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74  e.** one paramet
8290: 65 72 20 74 68 61 74 20 64 65 73 74 72 75 63 74  er that destruct
82a0: 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e  ors normally wan
82b0: 74 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74  t.  So we have t
82c0: 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a 2a 20 74  o introduce.** t
82d0: 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20  his magic value 
82e0: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e  that the code kn
82f0: 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69  ows to handle di
8300: 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 0a  fferently.  Any.
8310: 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20  ** pointer will 
8320: 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e  work here as lon
8330: 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69  g as it is disti
8340: 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f  nct from SQLITE_
8350: 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51  STATIC.** and SQ
8360: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a  LITE_TRANSIENT..
8370: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8380: 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71  E_DYNAMIC   ((sq
8390: 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72  lite3_destructor
83a0: 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c  _type)sqlite3Mal
83b0: 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20  locSize)../*.** 
83c0: 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54  When SQLITE_OMIT
83d0: 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c  _WSD is defined,
83e0: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
83f0: 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f  he target platfo
8400: 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73  rm does.** not s
8410: 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20  upport Writable 
8420: 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44  Static Data (WSD
8430: 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c  ) such as global
8440: 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69   and static vari
8450: 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61  ables..** All va
8460: 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74  riables must eit
8470: 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74  her be on the st
8480: 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c  ack or dynamical
8490: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f  ly allocated fro
84a0: 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20  m.** the heap.  
84b0: 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75  When WSD is unsu
84c0: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72  pported, the var
84d0: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
84e0: 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20  ns scattered.** 
84f0: 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53  throughout the S
8500: 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20  QLite code must 
8510: 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73  become constants
8520: 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53   instead.  The S
8530: 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63  QLITE_WSD.** mac
8540: 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  ro is used for t
8550: 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e  his purpose.  An
8560: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66  d instead of ref
8570: 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72  erencing the var
8580: 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c  iable.** directl
8590: 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f  y, we use its co
85a0: 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20  nstant as a key 
85b0: 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75  to lookup the ru
85c0: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
85d0: 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20  .** buffer that 
85e0: 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61  holds real varia
85f0: 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61  ble.  The consta
8600: 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69  nt is also the i
8610: 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f  nitializer.** fo
8620: 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  r the run-time a
8630: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e  llocated buffer.
8640: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73  .**.** In the us
8650: 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57  ual case where W
8660: 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c  SD is supported,
8670: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20   the SQLITE_WSD 
8680: 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61  and GLOBAL.** ma
8690: 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f  cros become no-o
86a0: 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f  ps and have zero
86b0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70   performance imp
86c0: 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  act..*/.#ifdef S
86d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
86e0: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
86f0: 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66  WSD const.  #def
8700: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
8710: 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73  (*(t*)sqlite3_ws
8720: 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28  d_find((void*)&(
8730: 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a  v), sizeof(v))).
8740: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
8750: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c  3GlobalConfig GL
8760: 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69  OBAL(struct Sqli
8770: 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74  te3Config, sqlit
8780: 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20  e3Config).  int 
8790: 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74  sqlite3_wsd_init
87a0: 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a  (int N, int J);.
87b0: 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f    void *sqlite3_
87c0: 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b  wsd_find(void *K
87d0: 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a  , int L);.#else.
87e0: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
87f0: 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65 20 47  _WSD.  #define G
8800: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
8810: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
8820: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
8830: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
8840: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
8850: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
8860: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
8870: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
8880: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
8890: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
88a0: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
88b0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
88c0: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
88d0: 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74 20 75 6e  ately.** left un
88e0: 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  used within the 
88f0: 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69  body of a functi
8900: 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c 79  on. This usually
8910: 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a 2a   happens when.**
8920: 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63   a function is c
8930: 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e 63  alled via a func
8940: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46 6f  tion pointer. Fo
8950: 72 20 65 78 61 6d 70 6c 65 20 74 68 65 0a 2a 2a  r example the.**
8960: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
8970: 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72 65 67  of an SQL aggreg
8980: 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62 61 63  ate step callbac
8990: 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20 74 68  k may not use th
89a0: 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 69  e.** parameter i
89b0: 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20 6e 75  ndicating the nu
89c0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
89d0: 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
89e0: 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66  aggregate,.** if
89f0: 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74 20 74   it knows that t
8a00: 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65 64 20  his is enforced 
8a10: 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a  elsewhere..**.**
8a20: 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e   When a function
8a30: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f   parameter is no
8a40: 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20 77 69  t used at all wi
8a50: 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
8a60: 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20   a function,.** 
8a70: 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c 79 20  it is generally 
8a80: 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64 22 20  named "NotUsed" 
8a90: 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20 74 6f  or "NotUsed2" to
8aa0: 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65 76 65   make things eve
8ab0: 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f  n clearer..** Ho
8ac0: 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d 61 63  wever, these mac
8ad0: 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  ros may also be 
8ae0: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
8af0: 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61 74 65   warnings relate
8b00: 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65  d to.** paramete
8b10: 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72 20 6d  rs that may or m
8b20: 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64 20 64  ay not be used d
8b30: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70  epending on comp
8b40: 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e  ilation options.
8b50: 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 20  .** For example 
8b60: 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65 72 73  those parameters
8b70: 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 61 73   only used in as
8b80: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
8b90: 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63  s. In these.** c
8ba0: 61 73 65 73 20 74 68 65 20 70 61 72 61 6d 65 74  ases the paramet
8bb0: 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20 61 73  ers are named as
8bc0: 20 70 65 72 20 74 68 65 20 75 73 75 61 6c 20 63   per the usual c
8bd0: 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23  onventions..*/.#
8be0: 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41  define UNUSED_PA
8bf0: 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f 69 64  RAMETER(x) (void
8c00: 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55 4e 55  )(x).#define UNU
8c10: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32 28 78  SED_PARAMETER2(x
8c20: 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ,y) UNUSED_PARAM
8c30: 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44 5f 50  ETER(x),UNUSED_P
8c40: 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a  ARAMETER(y)../*.
8c50: 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72  ** Forward refer
8c60: 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63 74 75  ences to structu
8c70: 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  res.*/.typedef s
8c80: 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 41 67  truct AggInfo Ag
8c90: 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  gInfo;.typedef s
8ca0: 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
8cb0: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74  t AuthContext;.t
8cc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
8cd0: 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e  toincInfo Autoin
8ce0: 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  cInfo;.typedef s
8cf0: 74 72 75 63 74 20 42 69 74 76 65 63 20 42 69 74  truct Bitvec Bit
8d00: 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73 74 72  vec;.typedef str
8d10: 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c  uct CollSeq Coll
8d20: 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Seq;.typedef str
8d30: 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d  uct Column Colum
8d40: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
8d50: 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64 65 66  t Db Db;.typedef
8d60: 20 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 53   struct Schema S
8d70: 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66 20 73  chema;.typedef s
8d80: 74 72 75 63 74 20 45 78 70 72 20 45 78 70 72 3b  truct Expr Expr;
8d90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8da0: 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c 69 73  ExprList ExprLis
8db0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8dc0: 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70  t FKey FKey;.typ
8dd0: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
8de0: 44 65 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44  Destructor FuncD
8df0: 65 73 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64  estructor;.typed
8e00: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
8e10: 66 20 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64  f FuncDef;.typed
8e20: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
8e30: 66 48 61 73 68 20 46 75 6e 63 44 65 66 48 61 73  fHash FuncDefHas
8e40: 68 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  h;.typedef struc
8e50: 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b  t IdList IdList;
8e60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e70: 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70  Index Index;.typ
8e80: 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65  edef struct Inde
8e90: 78 53 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d  xSample IndexSam
8ea0: 70 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ple;.typedef str
8eb0: 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79  uct KeyClass Key
8ec0: 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73  Class;.typedef s
8ed0: 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65  truct KeyInfo Ke
8ee0: 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  yInfo;.typedef s
8ef0: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20  truct Lookaside 
8f00: 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64  Lookaside;.typed
8f10: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
8f20: 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64  ideSlot Lookasid
8f30: 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73  eSlot;.typedef s
8f40: 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64  truct Module Mod
8f50: 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ule;.typedef str
8f60: 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  uct NameContext 
8f70: 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70  NameContext;.typ
8f80: 65 64 65 66 20 73 74 72 75 63 74 20 50 61 72 73  edef struct Pars
8f90: 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66  e Parse;.typedef
8fa0: 20 73 74 72 75 63 74 20 50 72 65 55 70 64 61 74   struct PreUpdat
8fb0: 65 20 50 72 65 55 70 64 61 74 65 3b 0a 74 79 70  e PreUpdate;.typ
8fc0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69 6e  edef struct Prin
8fd0: 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e  tfArguments Prin
8fe0: 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70  tfArguments;.typ
8ff0: 65 64 65 66 20 73 74 72 75 63 74 20 52 65 6e 61  edef struct Rena
9000: 6d 65 54 6f 6b 65 6e 20 52 65 6e 61 6d 65 54 6f  meToken RenameTo
9010: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
9020: 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65  uct RowSet RowSe
9030: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
9040: 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65  t Savepoint Save
9050: 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73  point;.typedef s
9060: 74 72 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c  truct Select Sel
9070: 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ect;.typedef str
9080: 75 63 74 20 53 51 4c 69 74 65 54 68 72 65 61 64  uct SQLiteThread
9090: 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b 0a 74   SQLiteThread;.t
90a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
90b0: 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63 74 44  lectDest SelectD
90c0: 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  est;.typedef str
90d0: 75 63 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c  uct SrcList SrcL
90e0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
90f0: 75 63 74 20 73 71 6c 69 74 65 33 5f 73 74 72 20  uct sqlite3_str 
9100: 53 74 72 41 63 63 75 6d 3b 20 2f 2a 20 49 6e 74  StrAccum; /* Int
9110: 65 72 6e 61 6c 20 61 6c 69 61 73 20 66 6f 72 20  ernal alias for 
9120: 73 71 6c 69 74 65 33 5f 73 74 72 20 2a 2f 0a 74  sqlite3_str */.t
9130: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
9140: 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64  ble Table;.typed
9150: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c  ef struct TableL
9160: 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74  ock TableLock;.t
9170: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6f  ypedef struct To
9180: 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64  ken Token;.typed
9190: 65 66 20 73 74 72 75 63 74 20 54 72 65 65 56 69  ef struct TreeVi
91a0: 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79 70  ew TreeView;.typ
91b0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
91c0: 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70  ger Trigger;.typ
91d0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
91e0: 67 65 72 50 72 67 20 54 72 69 67 67 65 72 50 72  gerPrg TriggerPr
91f0: 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  g;.typedef struc
9200: 74 20 54 72 69 67 67 65 72 53 74 65 70 20 54 72  t TriggerStep Tr
9210: 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64  iggerStep;.typed
9220: 65 66 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b  ef struct Unpack
9230: 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65  edRecord Unpacke
9240: 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66  dRecord;.typedef
9250: 20 73 74 72 75 63 74 20 55 70 73 65 72 74 20 55   struct Upsert U
9260: 70 73 65 72 74 3b 0a 74 79 70 65 64 65 66 20 73  psert;.typedef s
9270: 74 72 75 63 74 20 56 54 61 62 6c 65 20 56 54 61  truct VTable VTa
9280: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
9290: 75 63 74 20 56 74 61 62 43 74 78 20 56 74 61 62  uct VtabCtx Vtab
92a0: 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Ctx;.typedef str
92b0: 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65  uct Walker Walke
92c0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
92d0: 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68 65 72  t WhereInfo Wher
92e0: 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  eInfo;.typedef s
92f0: 74 72 75 63 74 20 57 69 6e 64 6f 77 20 57 69 6e  truct Window Win
9300: 64 6f 77 3b 0a 74 79 70 65 64 65 66 20 73 74 72  dow;.typedef str
9310: 75 63 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a  uct With With;..
9320: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61  ./*.** The bitma
9330: 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66 69  sk datatype defi
9340: 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65  ned below is use
9350: 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70  d for various op
9360: 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a  timizations..**.
9370: 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73  ** Changing this
9380: 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74   from a 64-bit t
9390: 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20  o a 32-bit type 
93a0: 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65  limits the numbe
93b0: 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69  r of.** tables i
93c0: 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69  n a join to 32 i
93d0: 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42  nstead of 64.  B
93e0: 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63  ut it also reduc
93f0: 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f  es the size.** o
9400: 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62 79  f the library by
9410: 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78   738 bytes on ix
9420: 38 36 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  86..*/.#ifdef SQ
9430: 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50  LITE_BITMASK_TYP
9440: 45 0a 20 20 74 79 70 65 64 65 66 20 53 51 4c 49  E.  typedef SQLI
9450: 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 20  TE_BITMASK_TYPE 
9460: 42 69 74 6d 61 73 6b 3b 0a 23 65 6c 73 65 0a 20  Bitmask;.#else. 
9470: 20 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74   typedef u64 Bit
9480: 6d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  mask;.#endif../*
9490: 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
94a0: 66 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d  f bits in a Bitm
94b0: 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e  ask.  "BMS" mean
94c0: 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22  s "BitMask Size"
94d0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53  ..*/.#define BMS
94e0: 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28    ((int)(sizeof(
94f0: 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a  Bitmask)*8))../*
9500: 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42  .** A bit in a B
9510: 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e  itmask.*/.#defin
9520: 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28  e MASKBIT(n)   (
9530: 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e  ((Bitmask)1)<<(n
9540: 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  )).#define MASKB
9550: 49 54 33 32 28 6e 29 20 28 28 28 75 6e 73 69 67  IT32(n) (((unsig
9560: 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29  ned int)1)<<(n))
9570: 0a 23 64 65 66 69 6e 65 20 41 4c 4c 42 49 54 53  .#define ALLBITS
9580: 20 20 20 20 20 20 28 28 42 69 74 6d 61 73 6b 29        ((Bitmask)
9590: 2d 31 29 0a 0a 2f 2a 20 41 20 56 4c 69 73 74 20  -1)../* A VList 
95a0: 6f 62 6a 65 63 74 20 72 65 63 6f 72 64 73 20 61  object records a
95b0: 20 6d 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e   mapping between
95c0: 20 70 61 72 61 6d 65 74 65 72 73 2f 76 61 72 69   parameters/vari
95d0: 61 62 6c 65 73 2f 77 69 6c 64 63 61 72 64 73 0a  ables/wildcards.
95e0: 2a 2a 20 69 6e 20 74 68 65 20 53 51 4c 20 73 74  ** in the SQL st
95f0: 61 74 65 6d 65 6e 74 20 28 73 75 63 68 20 61 73  atement (such as
9600: 20 24 61 62 63 2c 20 40 70 71 72 2c 20 6f 72 20   $abc, @pqr, or 
9610: 3a 78 79 7a 29 20 61 6e 64 20 74 68 65 20 69 6e  :xyz) and the in
9620: 74 65 67 65 72 0a 2a 2a 20 76 61 72 69 61 62 6c  teger.** variabl
9630: 65 20 6e 75 6d 62 65 72 20 61 73 73 6f 63 69 61  e number associa
9640: 74 65 64 20 77 69 74 68 20 74 68 61 74 20 70 61  ted with that pa
9650: 72 61 6d 65 74 65 72 2e 20 20 53 65 65 20 74 68  rameter.  See th
9660: 65 20 66 6f 72 6d 61 74 20 64 65 73 63 72 69 70  e format descrip
9670: 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74 68 65 20 73  tion.** on the s
9680: 71 6c 69 74 65 33 56 4c 69 73 74 41 64 64 28 29  qlite3VListAdd()
9690: 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 6d 6f 72   routine for mor
96a0: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20  e information.  
96b0: 41 20 56 4c 69 73 74 20 69 73 20 72 65 61 6c 6c  A VList is reall
96c0: 79 0a 2a 2a 20 6a 75 73 74 20 61 6e 20 61 72 72  y.** just an arr
96d0: 61 79 20 6f 66 20 69 6e 74 65 67 65 72 73 2e 0a  ay of integers..
96e0: 2a 2f 0a 74 79 70 65 64 65 66 20 69 6e 74 20 56  */.typedef int V
96f0: 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  List;../*.** Def
9700: 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65  er sourcing vdbe
9710: 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75  .h and btree.h u
9720: 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20 22  ntil after the "
9730: 75 38 22 20 61 6e 64 0a 2a 2a 20 22 42 75 73 79  u8" and.** "Busy
9740: 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66  Handler" typedef
9750: 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72  s. vdbe.h also r
9760: 65 71 75 69 72 65 73 20 61 20 66 65 77 20 6f 66  equires a few of
9770: 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70   the opaque.** p
9780: 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e  ointer types (i.
9790: 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66 69  e. FuncDef) defi
97a0: 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69  ned above..*/.#i
97b0: 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22  nclude "btree.h"
97c0: 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e  .#include "vdbe.
97d0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67  h".#include "pag
97e0: 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  er.h".#include "
97f0: 70 63 61 63 68 65 2e 68 22 0a 23 69 6e 63 6c 75  pcache.h".#inclu
9800: 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75  de "os.h".#inclu
9810: 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a  de "mutex.h"../*
9820: 20 54 68 65 20 53 51 4c 49 54 45 5f 45 58 54 52   The SQLITE_EXTR
9830: 41 5f 44 55 52 41 42 4c 45 20 63 6f 6d 70 69 6c  A_DURABLE compil
9840: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73  e-time option us
9850: 65 64 20 74 6f 20 73 65 74 20 74 68 65 20 64 65  ed to set the de
9860: 66 61 75 6c 74 0a 2a 2a 20 73 79 6e 63 68 72 6f  fault.** synchro
9870: 6e 6f 75 73 20 73 65 74 74 69 6e 67 20 74 6f 20  nous setting to 
9880: 45 58 54 52 41 2e 20 20 49 74 20 69 73 20 6e 6f  EXTRA.  It is no
9890: 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f 72 74 65   longer supporte
98a0: 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
98b0: 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c  ITE_EXTRA_DURABL
98c0: 45 0a 23 20 77 61 72 6e 69 6e 67 20 55 73 65 20  E.# warning Use 
98d0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
98e0: 59 4e 43 48 52 4f 4e 4f 55 53 3d 33 20 69 6e 73  YNCHRONOUS=3 ins
98f0: 74 65 61 64 20 6f 66 20 53 51 4c 49 54 45 5f 45  tead of SQLITE_E
9900: 58 54 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 64  XTRA_DURABLE.# d
9910: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
9920: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
9930: 20 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   3.#endif../*.**
9940: 20 44 65 66 61 75 6c 74 20 73 79 6e 63 68 72 6f   Default synchro
9950: 6e 6f 75 73 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a  nous levels..**.
9960: 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 28 66 6f  ** Note that (fo
9970: 72 20 68 69 73 74 6f 72 63 61 6c 20 72 65 61 73  r historcal reas
9980: 6f 6e 73 29 20 74 68 65 20 50 41 47 45 52 5f 53  ons) the PAGER_S
9990: 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63  YNCHRONOUS_* mac
99a0: 72 6f 73 20 64 69 66 66 65 72 0a 2a 2a 20 66 72  ros differ.** fr
99b0: 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 44 45  om the SQLITE_DE
99c0: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
99d0: 53 20 76 61 6c 75 65 20 62 79 20 31 2e 0a 2a 2a  S value by 1..**
99e0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 50 41  .**           PA
99f0: 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  GER_SYNCHRONOUS 
9a00: 20 20 20 20 20 20 44 45 46 41 55 4c 54 5f 53 59        DEFAULT_SY
9a10: 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f  NCHRONOUS.**   O
9a20: 46 46 20 20 20 20 20 20 20 20 20 20 20 31 20 20  FF           1  
9a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a40: 20 20 20 20 20 20 20 30 0a 2a 2a 20 20 20 4e 4f         0.**   NO
9a50: 52 4d 41 4c 20 20 20 20 20 20 20 20 32 20 20 20  RMAL        2   
9a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a70: 20 20 20 20 20 20 31 0a 2a 2a 20 20 20 46 55 4c        1.**   FUL
9a80: 4c 20 20 20 20 20 20 20 20 20 20 33 20 20 20 20  L          3    
9a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9aa0: 20 20 20 20 20 32 0a 2a 2a 20 20 20 45 58 54 52       2.**   EXTR
9ab0: 41 20 20 20 20 20 20 20 20 20 34 20 20 20 20 20  A         4     
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ad0: 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20      3.**.** The 
9ae0: 22 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e  "PRAGMA synchron
9af0: 6f 75 73 22 20 73 74 61 74 65 6d 65 6e 74 20 61  ous" statement a
9b00: 6c 73 6f 20 75 73 65 73 20 74 68 65 20 7a 65 72  lso uses the zer
9b10: 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73 2e  o-based numbers.
9b20: 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
9b30: 64 73 2c 20 74 68 65 20 7a 65 72 6f 2d 62 61 73  ds, the zero-bas
9b40: 65 64 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75  ed numbers are u
9b50: 73 65 64 20 66 6f 72 20 61 6c 6c 20 65 78 74 65  sed for all exte
9b60: 72 6e 61 6c 20 69 6e 74 65 72 66 61 63 65 73 0a  rnal interfaces.
9b70: 2a 2a 20 61 6e 64 20 74 68 65 20 6f 6e 65 2d 62  ** and the one-b
9b80: 61 73 65 64 20 76 61 6c 75 65 73 20 61 72 65 20  ased values are 
9b90: 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e  used internally.
9ba0: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
9bb0: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9bc0: 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20  RONOUS.# define 
9bd0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9be0: 59 4e 43 48 52 4f 4e 4f 55 53 20 32 0a 23 65 6e  YNCHRONOUS 2.#en
9bf0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
9c00: 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53  TE_DEFAULT_WAL_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 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f  LT_WAL_SYNCHRONO
9c40: 55 53 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  US SQLITE_DEFAUL
9c50: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 65  T_SYNCHRONOUS.#e
9c60: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ndif../*.** Each
9c70: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
9c80: 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79  o be accessed by
9c90: 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61   the system is a
9ca0: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
9cb0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
9cc0: 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65  tructure.  There
9cd0: 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77   are normally tw
9ce0: 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  o of these struc
9cf0: 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tures.** in the 
9d00: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72  sqlite.aDb[] arr
9d10: 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74  ay.  aDb[0] is t
9d20: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
9d30: 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62   file and.** aDb
9d40: 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62  [1] is the datab
9d50: 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
9d60: 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20   hold temporary 
9d70: 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f  tables.  Additio
9d80: 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73  nal.** databases
9d90: 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64   may be attached
9da0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b  ..*/.struct Db {
9db0: 0a 20 20 63 68 61 72 20 2a 7a 44 62 53 4e 61 6d  .  char *zDbSNam
9dc0: 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
9dd0: 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65  of this database
9de0: 2e 20 28 73 63 68 65 6d 61 20 6e 61 6d 65 2c 20  . (schema name, 
9df0: 6e 6f 74 20 66 69 6c 65 6e 61 6d 65 29 20 2a 2f  not filename) */
9e00: 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
9e10: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42          /* The B
9e20: 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20  *Tree structure 
9e30: 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73  for this databas
9e40: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73  e file */.  u8 s
9e50: 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20  afety_level;    
9e60: 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69   /* How aggressi
9e70: 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61  ve at syncing da
9e80: 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20  ta to disk */.  
9e90: 75 38 20 62 53 79 6e 63 53 65 74 3b 20 20 20 20  u8 bSyncSet;    
9ea0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
9eb0: 22 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e  "PRAGMA synchron
9ec0: 6f 75 73 3d 4e 22 20 68 61 73 20 62 65 65 6e 20  ous=N" has been 
9ed0: 72 75 6e 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  run */.  Schema 
9ee0: 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  *pSchema;     /*
9ef0: 20 50 6f 69 6e 74 65 72 20 74 6f 20 64 61 74 61   Pointer to data
9f00: 62 61 73 65 20 73 63 68 65 6d 61 20 28 70 6f 73  base schema (pos
9f10: 73 69 62 6c 79 20 73 68 61 72 65 64 29 20 2a 2f  sibly shared) */
9f20: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
9f30: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
9f40: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
9f50: 65 20 73 74 6f 72 65 73 20 61 20 64 61 74 61 62  e stores a datab
9f60: 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  ase schema..**.*
9f70: 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f 62  * Most Schema ob
9f80: 6a 65 63 74 73 20 61 72 65 20 61 73 73 6f 63 69  jects are associ
9f90: 61 74 65 64 20 77 69 74 68 20 61 20 42 74 72 65  ated with a Btre
9fa0: 65 2e 20 20 54 68 65 20 65 78 63 65 70 74 69 6f  e.  The exceptio
9fb0: 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53 63 68 65  n is.** the Sche
9fc0: 6d 61 20 66 6f 72 20 74 68 65 20 54 45 4d 50 20  ma for the TEMP 
9fd0: 64 61 74 61 62 61 65 73 20 28 73 71 6c 69 74 65  databaes (sqlite
9fe0: 33 2e 61 44 62 5b 31 5d 29 20 77 68 69 63 68 20  3.aDb[1]) which 
9ff0: 69 73 20 66 72 65 65 2d 73 74 61 6e 64 69 6e 67  is free-standing
a000: 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64 20 63  ..** In shared c
a010: 61 63 68 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e  ache mode, a sin
a020: 67 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  gle Schema objec
a030: 74 20 63 61 6e 20 62 65 20 73 68 61 72 65 64 20  t can be shared 
a040: 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42  by multiple.** B
a050: 74 72 65 65 73 20 74 68 61 74 20 72 65 66 65 72  trees that refer
a060: 20 74 6f 20 74 68 65 20 73 61 6d 65 20 75 6e 64   to the same und
a070: 65 72 6c 79 69 6e 67 20 42 74 53 68 61 72 65 64  erlying BtShared
a080: 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53   object..**.** S
a090: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72  chema objects ar
a0a0: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
a0b0: 64 65 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e  deallocated when
a0c0: 20 74 68 65 20 6c 61 73 74 20 42 74 72 65 65 20   the last Btree 
a0d0: 74 68 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63  that.** referenc
a0e0: 65 73 20 74 68 65 6d 20 69 73 20 64 65 73 74 72  es them is destr
a0f0: 6f 79 65 64 2e 20 20 20 54 68 65 20 54 45 4d 50  oyed.   The TEMP
a100: 20 53 63 68 65 6d 61 20 69 73 20 6d 61 6e 75 61   Schema is manua
a110: 6c 6c 79 20 66 72 65 65 64 20 62 79 0a 2a 2a 20  lly freed by.** 
a120: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e  sqlite3_close().
a130: 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61 64 20 6d  .*.** A thread m
a140: 75 73 74 20 62 65 20 68 6f 6c 64 69 6e 67 20 61  ust be holding a
a150: 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 63 6f   mutex on the co
a160: 72 72 65 73 70 6f 6e 64 69 6e 67 20 42 74 72 65  rresponding Btre
a170: 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f  e in order.** to
a180: 20 61 63 63 65 73 73 20 53 63 68 65 6d 61 20 63   access Schema c
a190: 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73 20 69 6d  ontent.  This im
a1a0: 70 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 74  plies that the t
a1b0: 68 72 65 61 64 20 6d 75 73 74 20 61 6c 73 6f 20  hread must also 
a1c0: 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20  be.** holding a 
a1d0: 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 73 71 6c  mutex on the sql
a1e0: 69 74 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  ite3 connection 
a1f0: 70 6f 69 6e 74 65 72 20 74 68 61 74 20 6f 77 6e  pointer that own
a200: 73 20 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20  s the Btree..** 
a210: 46 6f 72 20 61 20 54 45 4d 50 20 53 63 68 65 6d  For a TEMP Schem
a220: 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e  a, only the conn
a230: 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 69 73 20  ection mutex is 
a240: 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72  required..*/.str
a250: 75 63 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69  uct Schema {.  i
a260: 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  nt schema_cookie
a270: 3b 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  ;   /* Database 
a280: 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e  schema version n
a290: 75 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20 66  umber for this f
a2a0: 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65  ile */.  int iGe
a2b0: 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a  neration;     /*
a2c0: 20 47 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e   Generation coun
a2d0: 74 65 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65  ter.  Incremente
a2e0: 64 20 77 69 74 68 20 65 61 63 68 20 63 68 61 6e  d with each chan
a2f0: 67 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c  ge */.  Hash tbl
a300: 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  Hash;        /* 
a310: 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78  All tables index
a320: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
a330: 48 61 73 68 20 69 64 78 48 61 73 68 3b 20 20 20  Hash idxHash;   
a340: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d       /* All (nam
a350: 65 64 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65  ed) indices inde
a360: 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20  xed by name */. 
a370: 20 48 61 73 68 20 74 72 69 67 48 61 73 68 3b 20   Hash trigHash; 
a380: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69        /* All tri
a390: 67 67 65 72 73 20 69 6e 64 65 78 65 64 20 62 79  ggers indexed by
a3a0: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
a3b0: 66 6b 65 79 48 61 73 68 3b 20 20 20 20 20 20 20  fkeyHash;       
a3c0: 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b  /* All foreign k
a3d0: 65 79 73 20 62 79 20 72 65 66 65 72 65 6e 63 65  eys by reference
a3e0: 64 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a  d table name */.
a3f0: 20 20 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62    Table *pSeqTab
a400: 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71  ;      /* The sq
a410: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
a420: 62 6c 65 20 75 73 65 64 20 62 79 20 41 55 54 4f  ble used by AUTO
a430: 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75  INCREMENT */.  u
a440: 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20  8 file_format;  
a450: 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f      /* Schema fo
a460: 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72  rmat version for
a470: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
a480: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
a490: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
a4a0: 6f 64 69 6e 67 20 75 73 65 64 20 62 79 20 74 68  oding used by th
a4b0: 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
a4c0: 20 75 31 36 20 73 63 68 65 6d 61 46 6c 61 67 73   u16 schemaFlags
a4d0: 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61  ;     /* Flags a
a4e0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
a4f0: 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20  his schema */.  
a500: 69 6e 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20  int cache_size; 
a510: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
a520: 66 20 70 61 67 65 73 20 74 6f 20 75 73 65 20 69  f pages to use i
a530: 6e 20 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d  n the cache */.}
a540: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d  ;../*.** These m
a550: 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65  acros can be use
a560: 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20  d to test, set, 
a570: 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e  or clear bits in
a580: 20 74 68 65 0a 2a 2a 20 44 62 2e 70 53 63 68 65   the.** Db.pSche
a590: 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e  ma->flags field.
a5a0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61  .*/.#define DbHa
a5b0: 73 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  sProperty(D,I,P)
a5c0: 20 20 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b       (((D)->aDb[
a5d0: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
a5e0: 6d 61 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  maFlags&(P))==(P
a5f0: 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73  )).#define DbHas
a600: 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  AnyProperty(D,I,
a610: 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49  P)  (((D)->aDb[I
a620: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
a630: 61 46 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a  aFlags&(P))!=0).
a640: 23 64 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f  #define DbSetPro
a650: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
a660: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
a670: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
a680: 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44  s|=(P).#define D
a690: 62 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44  bClearProperty(D
a6a0: 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62  ,I,P)   (D)->aDb
a6b0: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  [I].pSchema->sch
a6c0: 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  emaFlags&=~(P)..
a6d0: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
a6e0: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e  lues for the DB.
a6f0: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
a700: 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ield..**.** The 
a710: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
a720: 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65  flag is set afte
a730: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
a740: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a  chema has been.*
a750: 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65  * read into inte
a760: 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73  rnal hash tables
a770: 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73  ..**.** DB_Unres
a780: 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68  etViews means th
a790: 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76  at one or more v
a7a0: 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e  iews have column
a7b0: 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68   names that.** h
a7c0: 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20  ave been filled 
a7d0: 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68  out.  If the sch
a7e0: 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65  ema changes, the
a7f0: 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  se column names 
a800: 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73  might.** changes
a810: 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77   and so the view
a820: 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65   will need to be
a830: 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69   reset..*/.#defi
a840: 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  ne DB_SchemaLoad
a850: 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a  ed    0x0001  /*
a860: 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20   The schema has 
a870: 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23  been loaded */.#
a880: 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65  define DB_Unrese
a890: 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32  tViews    0x0002
a8a0: 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20    /* Some views 
a8b0: 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c  have defined col
a8c0: 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  umn names */.#de
a8d0: 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20  fine DB_Empty   
a8e0: 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
a8f0: 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65  /* The file is e
a900: 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62  mpty (length 0 b
a910: 79 74 65 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ytes) */.#define
a920: 20 44 42 5f 52 65 73 65 74 57 61 6e 74 65 64 20   DB_ResetWanted 
a930: 20 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20 52      0x0008  /* R
a940: 65 73 65 74 20 74 68 65 20 73 63 68 65 6d 61 20  eset the schema 
a950: 77 68 65 6e 20 6e 53 63 68 65 6d 61 4c 6f 63 6b  when nSchemaLock
a960: 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ==0 */../*.** Th
a970: 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66  e number of diff
a980: 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74  erent kinds of t
a990: 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62  hings that can b
a9a0: 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69  e limited.** usi
a9b0: 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c  ng the sqlite3_l
a9c0: 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63 65  imit() interface
a9d0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
a9e0: 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c  ITE_N_LIMIT (SQL
a9f0: 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52  ITE_LIMIT_WORKER
aa00: 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a  _THREADS+1)../*.
aa10: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** Lookaside mal
aa20: 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66 20  loc is a set of 
aa30: 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65  fixed-size buffe
aa40: 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  rs that can be u
aa50: 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66  sed.** to satisf
aa60: 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e  y small transien
aa70: 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  t memory allocat
aa80: 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72  ion requests for
aa90: 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f   objects.** asso
aaa0: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61  ciated with a pa
aab0: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
aac0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54  e connection.  T
aad0: 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f  he use of.** loo
aae0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72  kaside malloc pr
aaf0: 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66 69  ovides a signifi
ab00: 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  cant performance
ab10: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20   enhancement.** 
ab20: 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79 20  (approx 10%) by 
ab30: 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75  avoiding numerou
ab40: 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65  s malloc/free re
ab50: 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61 72  quests while par
ab60: 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74  sing.** SQL stat
ab70: 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ements..**.** Th
ab80: 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75  e Lookaside stru
ab90: 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66  cture holds conf
aba0: 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  iguration inform
abb0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a  ation about the.
abc0: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
abd0: 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20  loc subsystem.  
abe0: 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d  Each available m
abf0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
ac00: 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61   in.** the looka
ac10: 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20 69  side subsystem i
ac20: 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69  s stored on a li
ac30: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f  nked list of Loo
ac40: 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62  kasideSlot.** ob
ac50: 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f  jects..**.** Loo
ac60: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
ac70: 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f  ns are only allo
ac80: 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  wed for objects 
ac90: 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69 61  that are associa
aca0: 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61  ted.** with a pa
acb0: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
acc0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48  e connection.  H
acd0: 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66  ence, schema inf
ace0: 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a  ormation cannot.
acf0: 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ** be stored in 
ad00: 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73  lookaside becaus
ad10: 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63 68  e in shared cach
ad20: 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d  e mode the schem
ad30: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  a information.**
ad40: 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d 75   is shared by mu
ad50: 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
ad60: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68  connections.  Th
ad70: 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70  erefore, while p
ad80: 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61  arsing.** schema
ad90: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
ada0: 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61  e Lookaside.bEna
adb0: 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65  bled flag is cle
adc0: 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20  ared so that.** 
add0: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
ade0: 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73  tions are not us
adf0: 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  ed to construct 
ae00: 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  the schema objec
ae10: 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f  ts..*/.struct Lo
ae20: 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 33 32 20  okaside {.  u32 
ae30: 62 44 69 73 61 62 6c 65 3b 20 20 20 20 20 20 20  bDisable;       
ae40: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72      /* Only oper
ae50: 61 74 65 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64  ate the lookasid
ae60: 65 20 77 68 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20  e when zero */. 
ae70: 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20   u16 sz;        
ae80: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
ae90: 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72 20   of each buffer 
aea0: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38  in bytes */.  u8
aeb0: 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20   bMalloced;     
aec0: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
aed0: 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64   pStart obtained
aee0: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
aef0: 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 75 33 32 20  lloc() */.  u32 
af00: 6e 53 6c 6f 74 3b 20 20 20 20 20 20 20 20 20 20  nSlot;          
af10: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
af20: 20 6c 6f 6f 6b 61 73 69 64 65 20 73 6c 6f 74 73   lookaside slots
af30: 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
af40: 75 33 32 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20  u32 anStat[3];  
af50: 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69          /* 0: hi
af60: 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73  ts.  1: size mis
af70: 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69  ses.  2: full mi
af80: 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73  sses */.  Lookas
af90: 69 64 65 53 6c 6f 74 20 2a 70 49 6e 69 74 3b 20  ideSlot *pInit; 
afa0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 62 75 66    /* List of buf
afb0: 66 65 72 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  fers not previou
afc0: 73 6c 79 20 75 73 65 64 20 2a 2f 0a 20 20 4c 6f  sly used */.  Lo
afd0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72  okasideSlot *pFr
afe0: 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ee;   /* List of
aff0: 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65   available buffe
b000: 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53  rs */.  void *pS
b010: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
b020: 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66  /* First byte of
b030: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
b040: 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69  y space */.  voi
b050: 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  d *pEnd;        
b060: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
b070: 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61  te past end of a
b080: 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a  vailable space *
b090: 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  /.};.struct Look
b0a0: 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f  asideSlot {.  Lo
b0b0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65  okasideSlot *pNe
b0c0: 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62  xt;    /* Next b
b0d0: 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73  uffer in the lis
b0e0: 74 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72  t of free buffer
b0f0: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
b100: 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20   hash table for 
b110: 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f  built-in functio
b120: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20 20  n definitions.  
b130: 28 41 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66  (Application-def
b140: 69 6e 65 64 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  ined.** function
b150: 73 20 75 73 65 20 61 20 72 65 67 75 6c 61 72 20  s use a regular 
b160: 74 61 62 6c 65 20 74 61 62 6c 65 20 66 72 6f 6d  table table from
b170: 20 68 61 73 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20   hash.h.).**.** 
b180: 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44 65  Hash each FuncDe
b190: 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f  f structure into
b1a0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
b1b0: 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74  DefHash.a[] slot
b1c0: 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73  s..** Collisions
b1d0: 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63   are on the Func
b1e0: 44 65 66 2e 75 2e 70 48 61 73 68 20 63 68 61 69  Def.u.pHash chai
b1f0: 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n..*/.#define SQ
b200: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53  LITE_FUNC_HASH_S
b210: 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e 63  Z 23.struct Func
b220: 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63  DefHash {.  Func
b230: 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46 55  Def *a[SQLITE_FU
b240: 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20 20  NC_HASH_SZ];    
b250: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
b260: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a   for functions *
b270: 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  /.};..#ifdef SQL
b280: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
b290: 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e  ICATION./*.** In
b2a0: 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69  formation held i
b2b0: 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20  n the "sqlite3" 
b2c0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
b2d0: 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75  ion object and u
b2e0: 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65  sed.** to manage
b2f0: 20 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   user authentica
b300: 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  tion..*/.typedef
b310: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f   struct sqlite3_
b320: 75 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33  userauth sqlite3
b330: 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63  _userauth;.struc
b340: 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  t sqlite3_userau
b350: 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65  th {.  u8 authLe
b360: 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  vel;            
b370: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
b380: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c  authentication l
b390: 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  evel */.  int nA
b3a0: 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20  uthPW;          
b3b0: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
b3c0: 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69  of the zAuthPW i
b3d0: 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61  n bytes */.  cha
b3e0: 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20  r *zAuthPW;     
b3f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
b400: 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61  ssword used to a
b410: 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20  uthenticate */. 
b420: 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72   char *zAuthUser
b430: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
b440: 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64  * User name used
b450: 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65   to authenticate
b460: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77   */.};../* Allow
b470: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71  ed values for sq
b480: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61  lite3_userauth.a
b490: 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66  uthLevel */.#def
b4a0: 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77  ine UAUTH_Unknow
b4b0: 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41  n     0     /* A
b4c0: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f  uthentication no
b4d0: 74 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f  t yet checked */
b4e0: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46  .#define UAUTH_F
b4f0: 61 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20  ail        1    
b500: 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74   /* User authent
b510: 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a  ication failed *
b520: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
b530: 55 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20  User        2   
b540: 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74    /* Authenticat
b550: 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75  ed as a normal u
b560: 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ser */.#define U
b570: 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20  AUTH_Admin      
b580: 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e   3     /* Authen
b590: 74 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64  ticated as an ad
b5a0: 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a  ministrator */..
b5b0: 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65  /* Functions use
b5c0: 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61  d only by user a
b5d0: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67  uthorization log
b5e0: 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ic */.int sqlite
b5f0: 33 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63  3UserAuthTable(c
b600: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
b610: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
b620: 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74  CheckLogin(sqlit
b630: 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
b640: 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
b650: 65 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73  e3UserAuthInit(s
b660: 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
b670: 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28  qlite3CryptFunc(
b680: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
b690: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
b6a0: 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f  ue**);..#endif /
b6b0: 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  * SQLITE_USER_AU
b6c0: 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a  THENTICATION */.
b6d0: 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66  ./*.** typedef f
b6e0: 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61  or the authoriza
b6f0: 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75  tion callback fu
b700: 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65  nction..*/.#ifde
b710: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
b720: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74  THENTICATION.  t
b730: 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c  ypedef int (*sql
b740: 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64  ite3_xauth)(void
b750: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
b760: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
b770: 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
b780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b790: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
b7a0: 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
b7b0: 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  r*);.#else.  typ
b7c0: 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74  edef int (*sqlit
b7d0: 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c  e3_xauth)(void*,
b7e0: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
b7f0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
b800: 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20  t char*,.       
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b820: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
b830: 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
b840: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
b850: 54 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 20  T_DEPRECATED./* 
b860: 54 68 69 73 20 69 73 20 61 6e 20 65 78 74 72 61  This is an extra
b870: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20 6d 61   SQLITE_TRACE ma
b880: 63 72 6f 20 74 68 61 74 20 69 6e 64 69 63 61 74  cro that indicat
b890: 65 73 20 22 6c 65 67 61 63 79 22 20 74 72 61 63  es "legacy" trac
b8a0: 69 6e 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74  ing.** in the st
b8b0: 79 6c 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 74  yle of sqlite3_t
b8c0: 72 61 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  race().*/.#defin
b8d0: 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c  e SQLITE_TRACE_L
b8e0: 45 47 41 43 59 20 20 30 78 38 30 0a 23 65 6c 73  EGACY  0x80.#els
b8f0: 65 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  e.#define SQLITE
b900: 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20 30  _TRACE_LEGACY  0
b910: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
b920: 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
b930: 44 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  D */.../*.** Eac
b940: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
b950: 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74  ction is an inst
b960: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
b970: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
b980: 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74  .*/.struct sqlit
b990: 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e3 {.  sqlite3_v
b9a0: 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20 20 20  fs *pVfs;       
b9b0: 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72       /* OS Inter
b9c0: 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75 63 74  face */.  struct
b9d0: 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20   Vdbe *pVdbe;   
b9e0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
b9f0: 6f 66 20 61 63 74 69 76 65 20 76 69 72 74 75 61  of active virtua
ba00: 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20  l machines */.  
ba10: 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f  CollSeq *pDfltCo
ba20: 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ll;           /*
ba30: 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c   The default col
ba40: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
ba50: 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71  (BINARY) */.  sq
ba60: 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74  lite3_mutex *mut
ba70: 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ex;         /* C
ba80: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
ba90: 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20 20 20  */.  Db *aDb;   
baa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bab0: 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e     /* All backen
bac0: 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b  ds */.  int nDb;
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bae0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
baf0: 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75 72 72  of backends curr
bb00: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
bb10: 20 20 75 33 32 20 6d 44 62 46 6c 61 67 73 3b 20    u32 mDbFlags; 
bb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb30: 2f 2a 20 66 6c 61 67 73 20 72 65 63 6f 72 64 69  /* flags recordi
bb40: 6e 67 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74  ng internal stat
bb50: 65 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73  e */.  u32 flags
bb60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bb70: 20 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 73 65       /* flags se
bb80: 74 74 61 62 6c 65 20 62 79 20 70 72 61 67 6d 61  ttable by pragma
bb90: 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a  s. See below */.
bba0: 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b    i64 lastRowid;
bbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbc0: 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74  /* ROWID of most
bbd0: 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28   recent insert (
bbe0: 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20  see above) */.  
bbf0: 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20  i64 szMmap;     
bc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bc10: 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69   Default mmap_si
bc20: 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20  ze setting */.  
bc30: 75 33 32 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3b  u32 nSchemaLock;
bc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bc50: 20 44 6f 20 6e 6f 74 20 72 65 73 65 74 20 74 68   Do not reset th
bc60: 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20 6e 6f  e schema when no
bc70: 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 75 6e 73 69  n-zero */.  unsi
bc80: 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61  gned int openFla
bc90: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61  gs;       /* Fla
bca0: 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c  gs passed to sql
bcb0: 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29  ite3_vfs.xOpen()
bcc0: 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64   */.  int errCod
bcd0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
bce0: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
bcf0: 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53  nt error code (S
bd00: 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e  QLITE_*) */.  in
bd10: 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20  t errMask;      
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26              /* &
bd30: 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69   result codes wi
bd40: 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72  th this before r
bd50: 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e  eturning */.  in
bd60: 74 20 69 53 79 73 45 72 72 6e 6f 3b 20 20 20 20  t iSysErrno;    
bd70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
bd80: 72 72 6e 6f 20 76 61 6c 75 65 20 66 72 6f 6d 20  rrno value from 
bd90: 6c 61 73 74 20 73 79 73 74 65 6d 20 65 72 72 6f  last system erro
bda0: 72 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70 74  r */.  u16 dbOpt
bdb0: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
bdc0: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f       /* Flags to
bdd0: 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65 20   enable/disable 
bde0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f  optimizations */
bdf0: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
be00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be10: 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
be20: 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f  g */.  u8 autoCo
be30: 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  mmit;           
be40: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74 6f       /* The auto
be50: 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f  -commit flag. */
be60: 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72 65  .  u8 temp_store
be70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
be80: 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d   /* 1: file 2: m
be90: 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c 74  emory 0: default
bea0: 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46   */.  u8 mallocF
beb0: 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  ailed;          
bec0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 77      /* True if w
bed0: 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d 61  e have seen a ma
bee0: 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a  lloc failure */.
bef0: 20 20 75 38 20 62 42 65 6e 69 67 6e 4d 61 6c 6c    u8 bBenignMall
bf00: 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  oc;             
bf10: 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71 75 69 72  /* Do not requir
bf20: 65 20 4f 4f 4d 73 20 69 66 20 74 72 75 65 20 2a  e OOMs if true *
bf30: 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d  /.  u8 dfltLockM
bf40: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
bf50: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63    /* Default loc
bf60: 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74  king-mode for at
bf70: 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20  tached dbs */.  
bf80: 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74  signed char next
bf90: 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a  Autovac;      /*
bfa0: 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67   Autovac setting
bfb0: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
bfc0: 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70   >=0 */.  u8 sup
bfd0: 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20 20  pressErr;       
bfe0: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f          /* Do no
bff0: 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65  t issue error me
c000: 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20 2a  ssages if true *
c010: 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e  /.  u8 vtabOnCon
c020: 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20 20  flict;          
c030: 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
c040: 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62  turn for s3_vtab
c050: 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a  _on_conflict() *
c060: 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61 63  /.  u8 isTransac
c070: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  tionSavepoint;  
c080: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
c090: 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70   outermost savep
c0a0: 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a  oint is a TS */.
c0b0: 20 20 75 38 20 6d 54 72 61 63 65 3b 20 20 20 20    u8 mTrace;    
c0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0d0: 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  /* zero or more 
c0e0: 53 51 4c 49 54 45 5f 54 52 41 43 45 20 66 6c 61  SQLITE_TRACE fla
c0f0: 67 73 20 2a 2f 0a 20 20 75 38 20 6e 6f 53 68 61  gs */.  u8 noSha
c100: 72 65 64 43 61 63 68 65 3b 20 20 20 20 20 20 20  redCache;       
c110: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
c120: 20 6e 6f 20 73 68 61 72 65 64 2d 63 61 63 68 65   no shared-cache
c130: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 75   backends */.  u
c140: 38 20 6e 53 71 6c 45 78 65 63 3b 20 20 20 20 20  8 nSqlExec;     
c150: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c160: 4e 75 6d 62 65 72 20 6f 66 20 70 65 6e 64 69 6e  Number of pendin
c170: 67 20 4f 50 5f 53 71 6c 45 78 65 63 20 6f 70 63  g OP_SqlExec opc
c180: 6f 64 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  odes */.  int ne
c190: 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20  xtPagesize;     
c1a0: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73          /* Pages
c1b0: 69 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d  ize after VACUUM
c1c0: 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20   if >0 */.  u32 
c1d0: 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20  magic;          
c1e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67            /* Mag
c1f0: 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65  ic number for de
c200: 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73  tect library mis
c210: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68  use */.  int nCh
c220: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
c230: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
c240: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
c250: 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  te3_changes() */
c260: 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61  .  int nTotalCha
c270: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
c280: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
c290: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f  ed by sqlite3_to
c2a0: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  tal_changes() */
c2b0: 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51  .  int aLimit[SQ
c2c0: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20  LITE_N_LIMIT];  
c2d0: 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20   /* Limits */.  
c2e0: 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d  int nMaxSorterMm
c2f0: 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ap;           /*
c300: 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66   Maximum size of
c310: 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20   regions mapped 
c320: 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73  by sorter */.  s
c330: 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69  truct sqlite3Ini
c340: 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20  tInfo {      /* 
c350: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  Information used
c360: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
c370: 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  zation */.    in
c380: 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20  t newTnum;      
c390: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
c3a0: 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62  tpage of table b
c3b0: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
c3c0: 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20   */.    u8 iDb; 
c3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3e0: 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20      /* Which db 
c3f0: 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e  file is being in
c400: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
c410: 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20   u8 busy;       
c420: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c430: 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c  TRUE if currentl
c440: 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a  y initializing *
c450: 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6f  /.    unsigned o
c460: 72 70 68 61 6e 54 72 69 67 67 65 72 20 3a 20 31  rphanTrigger : 1
c470: 3b 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d  ; /* Last statem
c480: 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20  ent is orphaned 
c490: 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a  TEMP trigger */.
c4a0: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6d 70      unsigned imp
c4b0: 6f 73 74 65 72 54 61 62 6c 65 20 3a 20 31 3b 20  osterTable : 1; 
c4c0: 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69  /* Building an i
c4d0: 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f  mposter table */
c4e0: 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65  .    unsigned re
c4f0: 6f 70 65 6e 4d 65 6d 64 62 20 3a 20 31 3b 20 20  openMemdb : 1;  
c500: 20 2f 2a 20 41 54 54 41 43 48 20 69 73 20 72 65   /* ATTACH is re
c510: 61 6c 6c 79 20 61 20 72 65 6f 70 65 6e 20 75 73  ally a reopen us
c520: 69 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a 20 20 7d  ing MemDB */.  }
c530: 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64   init;.  int nVd
c540: 62 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20  beActive;       
c550: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c560: 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e   of VDBEs curren
c570: 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20  tly running */. 
c580: 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20   int nVdbeRead; 
c590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c5a0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
c5b0: 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65  ve VDBEs that re
c5c0: 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20  ad or write */. 
c5d0: 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b   int nVdbeWrite;
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c5f0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
c600: 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65  ve VDBEs that re
c610: 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a  ad and write */.
c620: 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b    int nVdbeExec;
c630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c640: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
c650: 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62  ted calls to Vdb
c660: 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74  eExec() */.  int
c670: 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20 20   nVDestroy;     
c680: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c690: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 4f  mber of active O
c6a0: 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72 61  P_VDestroy opera
c6b0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  tions */.  int n
c6c0: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
c6d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c6e0: 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74  er of loaded ext
c6f0: 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69  ensions */.  voi
c700: 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20  d **aExtension; 
c710: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
c720: 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69  ray of shared li
c730: 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f  brary handles */
c740: 0a 20 20 69 6e 74 20 28 2a 78 54 72 61 63 65 29  .  int (*xTrace)
c750: 28 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a  (u32,void*,void*
c760: 2c 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20  ,void*);     /* 
c770: 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  Trace function *
c780: 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65  /.  void *pTrace
c790: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c7b0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
c7c0: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   trace function 
c7d0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f  */.  void (*xPro
c7e0: 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  file)(void*,cons
c7f0: 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f  t char*,u64);  /
c800: 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63  * Profiling func
c810: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
c820: 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20  pProfileArg;    
c830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c840: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
c850: 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74  to profile funct
c860: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
c870: 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20  CommitArg;      
c880: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
c890: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69  gument to xCommi
c8a0: 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20  tCallback() */. 
c8b0: 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61   int (*xCommitCa
c8c0: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20  llback)(void*); 
c8d0: 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74     /* Invoked at
c8e0: 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a   every commit. *
c8f0: 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62  /.  void *pRollb
c900: 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20  ackArg;         
c910: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
c920: 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61  t to xRollbackCa
c930: 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 76 6f  llback() */.  vo
c940: 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61  id (*xRollbackCa
c950: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20  llback)(void*); 
c960: 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76  /* Invoked at ev
c970: 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20  ery commit. */. 
c980: 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41 72   void *pUpdateAr
c990: 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70 64  g;.  void (*xUpd
c9a0: 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ateCallback)(voi
c9b0: 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  d*,int, const ch
c9c0: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
c9d0: 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23  sqlite_int64);.#
c9e0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
c9f0: 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
ca00: 4f 4b 0a 20 20 76 6f 69 64 20 2a 70 50 72 65 55  OK.  void *pPreU
ca10: 70 64 61 74 65 41 72 67 3b 20 20 20 20 20 20 20  pdateArg;       
ca20: 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
ca30: 6d 65 6e 74 20 74 6f 20 78 50 72 65 55 70 64 61  ment to xPreUpda
ca40: 74 65 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  teCallback */.  
ca50: 76 6f 69 64 20 28 2a 78 50 72 65 55 70 64 61 74  void (*xPreUpdat
ca60: 65 43 61 6c 6c 62 61 63 6b 29 28 20 20 20 2f 2a  eCallback)(   /*
ca70: 20 52 65 67 69 73 74 65 72 65 64 20 75 73 69 6e   Registered usin
ca80: 67 20 73 71 6c 69 74 65 33 5f 70 72 65 75 70 64  g sqlite3_preupd
ca90: 61 74 65 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20  ate_hook() */.  
caa0: 20 20 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a    void*,sqlite3*
cab0: 2c 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a  ,int,char const*
cac0: 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c  ,char const*,sql
cad0: 69 74 65 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74  ite3_int64,sqlit
cae0: 65 33 5f 69 6e 74 36 34 0a 20 20 29 3b 0a 20 20  e3_int64.  );.  
caf0: 50 72 65 55 70 64 61 74 65 20 2a 70 50 72 65 55  PreUpdate *pPreU
cb00: 70 64 61 74 65 3b 20 20 20 20 20 20 20 20 2f 2a  pdate;        /*
cb10: 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74   Context for act
cb20: 69 76 65 20 70 72 65 2d 75 70 64 61 74 65 20 63  ive pre-update c
cb30: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69  allback */.#endi
cb40: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  f /* SQLITE_ENAB
cb50: 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f  LE_PREUPDATE_HOO
cb60: 4b 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  K */.#ifndef SQL
cb70: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
cb80: 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63  nt (*xWalCallbac
cb90: 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74  k)(void *, sqlit
cba0: 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
cbb0: 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64   *, int);.  void
cbc0: 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69   *pWalArg;.#endi
cbd0: 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  f.  void(*xCollN
cbe0: 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c  eeded)(void*,sql
cbf0: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
cc00: 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  ep,const char*);
cc10: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
cc20: 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71  eded16)(void*,sq
cc30: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
cc40: 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29  Rep,const void*)
cc50: 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e  ;.  void *pCollN
cc60: 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69  eededArg;.  sqli
cc70: 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b  te3_value *pErr;
cc80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
cc90: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d  t recent error m
cca0: 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f  essage */.  unio
ccb0: 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65  n {.    volatile
ccc0: 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74   int isInterrupt
ccd0: 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73  ed; /* True if s
cce0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
ccf0: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
cd00: 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e   */.    double n
cd10: 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20  otUsed1;        
cd20: 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f      /* Spacer */
cd30: 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61  .  } u1;.  Looka
cd40: 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20  side lookaside; 
cd50: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b           /* Look
cd60: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e  aside malloc con
cd70: 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69  figuration */.#i
cd80: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
cd90: 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
cda0: 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20    sqlite3_xauth 
cdb0: 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20 20  xAuth;          
cdc0: 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72  /* Access author
cdd0: 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  ization function
cde0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74   */.  void *pAut
cdf0: 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  hArg;           
ce00: 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d      /* 1st argum
ce10: 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73  ent to the acces
ce20: 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20  s auth function 
ce30: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
ce40: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
ce50: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
ce60: 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73    int (*xProgres
ce70: 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  s)(void *);     
ce80: 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20  /* The progress 
ce90: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
cea0: 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67  id *pProgressArg
ceb0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  ;           /* A
cec0: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70  rgument to the p
ced0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
cee0: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
cef0: 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20  ProgressOps;    
cf00: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
cf10: 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f   opcodes for pro
cf20: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a  gress callback *
cf30: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
cf40: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
cf50: 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
cf60: 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  nVTrans;        
cf70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
cf80: 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61  ocated size of a
cf90: 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68  VTrans */.  Hash
cfa0: 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20   aModule;       
cfb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70            /* pop
cfc0: 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65  ulated by sqlite
cfd0: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  3_create_module(
cfe0: 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a  ) */.  VtabCtx *
cff0: 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20  pVtabCtx;       
d000: 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20       /* Context 
d010: 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20  for active vtab 
d020: 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a  connect/create *
d030: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54  /.  VTable **aVT
d040: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
d050: 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62    /* Virtual tab
d060: 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72  les with open tr
d070: 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20  ansactions */.  
d080: 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e  VTable *pDisconn
d090: 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ect;          /*
d0a0: 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73   Disconnect thes
d0b0: 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65  e in next sqlite
d0c0: 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23  3_prepare() */.#
d0d0: 65 6e 64 69 66 0a 20 20 48 61 73 68 20 61 46 75  endif.  Hash aFu
d0e0: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
d0f0: 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61        /* Hash ta
d100: 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f  ble of connectio
d110: 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  n functions */. 
d120: 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20   Hash aCollSeq; 
d130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d140: 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20  * All collating 
d150: 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42  sequences */.  B
d160: 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48  usyHandler busyH
d170: 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20  andler;      /* 
d180: 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  Busy callback */
d190: 0a 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b  .  Db aDbStatic[
d1a0: 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  2];             
d1b0: 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65   /* Static space
d1c0: 20 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75   for the 2 defau
d1d0: 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  lt backends */. 
d1e0: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76   Savepoint *pSav
d1f0: 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f  epoint;        /
d200: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
d210: 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20   savepoints */. 
d220: 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74   int busyTimeout
d230: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
d240: 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74  * Busy handler t
d250: 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20  imeout, in msec 
d260: 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f  */.  int nSavepo
d270: 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  int;            
d280: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
d290: 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  non-transaction 
d2a0: 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20  savepoints */.  
d2b0: 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20  int nStatement; 
d2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d2d0: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
d2e0: 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  d statement-tran
d2f0: 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69  sactions  */.  i
d300: 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  64 nDeferredCons
d310: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
d320: 4e 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e  Net deferred con
d330: 73 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72  straints this tr
d340: 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20  ansaction. */.  
d350: 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d  i64 nDeferredImm
d360: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a  Cons;         /*
d370: 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 69 6d   Net deferred im
d380: 6d 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69  mediate constrai
d390: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e  nts */.  int *pn
d3a0: 42 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20  BytesFreed;     
d3b0: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
d3c0: 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74   NULL, increment
d3d0: 20 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28   this in DbFree(
d3e0: 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ) */.#ifdef SQLI
d3f0: 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
d400: 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65  _NOTIFY.  /* The
d410: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61   following varia
d420: 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f  bles are all pro
d430: 74 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54  tected by the ST
d440: 41 54 49 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a  ATIC_MASTER.  **
d450: 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73   mutex, not by s
d460: 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68  qlite3.mutex. Th
d470: 65 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63  ey are used by c
d480: 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e  ode in notify.c.
d490: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
d4a0: 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74  X.pUnlockConnect
d4b0: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
d4c0: 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69  ns that X is wai
d4d0: 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20  ting for Y to.  
d4e0: 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61  ** unlock so tha
d4f0: 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64  t it can proceed
d500: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e  ..  **.  ** When
d510: 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e   X.pBlockingConn
d520: 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20  ection==Y, that 
d530: 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74  means that somet
d540: 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65  hing that X trie
d550: 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20  d.  ** tried to 
d560: 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c  do recently fail
d570: 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ed with an SQLIT
d580: 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64  E_LOCKED error d
d590: 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a  ue to locks.  **
d5a0: 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f   held by Y..  */
d5b0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f  .  sqlite3 *pBlo
d5c0: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b  ckingConnection;
d5d0: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
d5e0: 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54  hat caused SQLIT
d5f0: 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71  E_LOCKED */.  sq
d600: 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f  lite3 *pUnlockCo
d610: 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20  nnection;       
d620: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
d630: 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75  n to watch for u
d640: 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  nlock */.  void 
d650: 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20  *pUnlockArg;    
d660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d670: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
d680: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f  xUnlockNotify */
d690: 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63  .  void (*xUnloc
d6a0: 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a  kNotify)(void **
d6b0: 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f  , int);  /* Unlo
d6c0: 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61  ck notify callba
d6d0: 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ck */.  sqlite3 
d6e0: 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20  *pNextBlocked;  
d6f0: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
d700: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f   list of all blo
d710: 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  cked connections
d720: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65   */.#endif.#ifde
d730: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
d740: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73  THENTICATION.  s
d750: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
d760: 61 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  auth;        /* 
d770: 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  User authenticat
d780: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ion information 
d790: 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
d7a0: 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64  .** A macro to d
d7b0: 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f  iscover the enco
d7c0: 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61  ding of a databa
d7d0: 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  se..*/.#define S
d7e0: 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28  CHEMA_ENC(db) ((
d7f0: 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68  db)->aDb[0].pSch
d800: 65 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e  ema->enc).#defin
d810: 65 20 45 4e 43 28 64 62 29 20 20 20 20 20 20 20  e ENC(db)       
d820: 20 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a   ((db)->enc)../*
d830: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
d840: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
d850: 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a  te3.flags..**.**
d860: 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
d870: 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61  ts (enforced via
d880: 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
d890: 20 20 20 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46      SQLITE_FullF
d8a0: 53 79 6e 63 20 20 20 20 20 3d 3d 20 50 41 47 45  Sync     == PAGE
d8b0: 52 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20  R_FULLFSYNC.**  
d8c0: 20 20 20 20 53 51 4c 49 54 45 5f 43 6b 70 74 46      SQLITE_CkptF
d8d0: 75 6c 6c 46 53 79 6e 63 20 3d 3d 20 50 41 47 45  ullFSync == PAGE
d8e0: 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43  R_CKPT_FULLFSYNC
d8f0: 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  .**      SQLITE_
d900: 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d  CacheSpill    ==
d910: 20 50 41 47 45 52 5f 43 41 43 48 45 5f 53 50 49   PAGER_CACHE_SPI
d920: 4c 4c 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL.*/.#define SQ
d930: 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61  LITE_WriteSchema
d940: 20 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20      0x00000001  
d950: 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20  /* OK to update 
d960: 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f  SQLITE_MASTER */
d970: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d980: 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30  LegacyFileFmt  0
d990: 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 43 72  x00000002  /* Cr
d9a0: 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73  eate new databas
d9b0: 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a  es in format 1 *
d9c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d9d0: 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20  _FullColNames   
d9e0: 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 53  0x00000004  /* S
d9f0: 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20  how full column 
da00: 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20  names on SELECT 
da10: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
da20: 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20  E_FullFSync     
da30: 20 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20   0x00000008  /* 
da40: 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f  Use full fsync o
da50: 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f  n the backend */
da60: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
da70: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30  CkptFullFSync  0
da80: 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20 55 73  x00000010  /* Us
da90: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72  e full fsync for
daa0: 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23   checkpoint */.#
dab0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61  define SQLITE_Ca
dac0: 63 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30  cheSpill     0x0
dad0: 30 30 30 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74  0000020  /* OK t
dae0: 6f 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61  o spill pager ca
daf0: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
db00: 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61  QLITE_ShortColNa
db10: 6d 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20  mes  0x00000040 
db20: 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63   /* Show short c
db30: 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a  olumns names */.
db40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
db50: 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78  ountRows      0x
db60: 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75  00000080  /* Cou
db70: 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20  nt rows changed 
db80: 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20  by INSERT, */.  
db90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbb0: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c          /*   DEL
dbc0: 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61  ETE, or UPDATE a
dbd0: 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20  nd return */.   
dbe0: 20 20 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 2f 2a 20 20 20 74 68 65 20         /*   the 
dc10: 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61  count using a ca
dc20: 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69  llback. */.#defi
dc30: 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61  ne SQLITE_NullCa
dc40: 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30  llback   0x00000
dc50: 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  100  /* Invoke t
dc60: 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65  he callback once
dc70: 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20   if the */.     
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dca0: 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74       /*   result
dcb0: 20 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f   set is empty */
dcc0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dcd0: 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30  IgnoreChecks   0
dce0: 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 6f  x00000200  /* Do
dcf0: 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65   not enforce che
dd00: 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ck constraints *
dd10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dd20: 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 20 20 20  _ReadUncommit   
dd30: 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 52  0x00000400  /* R
dd40: 45 41 44 20 55 4e 43 4f 4d 4d 49 54 54 45 44 20  EAD UNCOMMITTED 
dd50: 69 6e 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  in shared-cache 
dd60: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
dd70: 45 5f 4e 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20  E_NoCkptOnClose 
dd80: 20 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20   0x00000800  /* 
dd90: 4e 6f 20 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e  No checkpoint on
dda0: 20 63 6c 6f 73 65 28 29 2f 44 45 54 41 43 48 20   close()/DETACH 
ddb0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ddc0: 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20  E_ReverseOrder  
ddd0: 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20   0x00001000  /* 
dde0: 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65  Reverse unordere
ddf0: 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65  d SELECTs */.#de
de00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54  fine SQLITE_RecT
de10: 72 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30  riggers    0x000
de20: 30 32 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  02000  /* Enable
de30: 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67   recursive trigg
de40: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
de50: 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79  QLITE_ForeignKey
de60: 73 20 20 20 20 30 78 30 30 30 30 34 30 30 30 20  s    0x00004000 
de70: 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65   /* Enforce fore
de80: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
de90: 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nts  */.#define 
dea0: 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78  SQLITE_AutoIndex
deb0: 20 20 20 20 20 20 30 78 30 30 30 30 38 30 30 30        0x00008000
dec0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f    /* Enable auto
ded0: 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f  matic indexes */
dee0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
def0: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30  LoadExtension  0
df00: 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 45 6e  x00010000  /* En
df10: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
df20: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
df30: 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 46 75 6e  QLITE_LoadExtFun
df40: 63 20 20 20 20 30 78 30 30 30 32 30 30 30 30 20  c    0x00020000 
df50: 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f   /* Enable load_
df60: 65 78 74 65 6e 73 69 6f 6e 28 29 20 53 51 4c 20  extension() SQL 
df70: 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
df80: 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69  SQLITE_EnableTri
df90: 67 67 65 72 20 20 30 78 30 30 30 34 30 30 30 30  gger  0x00040000
dfa0: 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
dfb0: 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ble triggers */.
dfc0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
dfd0: 65 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78  eferFKs       0x
dfe0: 30 30 30 38 30 30 30 30 20 20 2f 2a 20 44 65 66  00080000  /* Def
dff0: 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72  er all FK constr
e000: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
e010: 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c   SQLITE_QueryOnl
e020: 79 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30  y      0x0010000
e030: 30 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61  0  /* Disable da
e040: 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a  tabase changes *
e050: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e060: 5f 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20  _CellSizeCk     
e070: 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 43  0x00200000  /* C
e080: 68 65 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20  heck btree cell 
e090: 73 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f  sizes on load */
e0a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e0b0: 46 74 73 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30  Fts3Tokenizer  0
e0c0: 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00400000  /* En
e0d0: 61 62 6c 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69  able fts3_tokeni
e0e0: 7a 65 72 28 32 29 20 2a 2f 0a 23 64 65 66 69 6e  zer(2) */.#defin
e0f0: 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 51  e SQLITE_EnableQ
e100: 50 53 47 20 20 20 20 20 30 78 30 30 38 30 30 30  PSG     0x008000
e110: 30 30 20 20 2f 2a 20 51 75 65 72 79 20 50 6c 61  00  /* Query Pla
e120: 6e 6e 65 72 20 53 74 61 62 69 6c 69 74 79 20 47  nner Stability G
e130: 75 61 72 61 6e 74 65 65 2a 2f 0a 23 64 65 66 69  uarantee*/.#defi
e140: 6e 65 20 53 51 4c 49 54 45 5f 54 72 69 67 67 65  ne SQLITE_Trigge
e150: 72 45 51 50 20 20 20 20 20 30 78 30 31 30 30 30  rEQP     0x01000
e160: 30 30 30 20 20 2f 2a 20 53 68 6f 77 20 74 72 69  000  /* Show tri
e170: 67 67 65 72 20 45 58 50 4c 41 49 4e 20 51 55 45  gger EXPLAIN QUE
e180: 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69  RY PLAN */.#defi
e190: 6e 65 20 53 51 4c 49 54 45 5f 52 65 73 65 74 44  ne SQLITE_ResetD
e1a0: 61 74 61 62 61 73 65 20 20 30 78 30 32 30 30 30  atabase  0x02000
e1b0: 30 30 30 20 20 2f 2a 20 52 65 73 65 74 20 74 68  000  /* Reset th
e1c0: 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 0a 2f  e database */../
e1d0: 2a 20 46 6c 61 67 73 20 75 73 65 64 20 6f 6e 6c  * Flags used onl
e1e0: 79 20 69 66 20 64 65 62 75 67 67 69 6e 67 20 2a  y if debugging *
e1f0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
e200: 44 45 42 55 47 0a 23 64 65 66 69 6e 65 20 53 51  DEBUG.#define SQ
e210: 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20  LITE_SqlTrace   
e220: 20 20 20 20 30 78 30 38 30 30 30 30 30 30 20 20      0x08000000  
e230: 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53  /* Debug print S
e240: 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65  QL as it execute
e250: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e260: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20  ITE_VdbeListing 
e270: 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20 2f     0x10000000  /
e280: 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73  * Debug listings
e290: 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d   of VDBE program
e2a0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e2b0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20  ITE_VdbeTrace   
e2c0: 20 20 20 30 78 32 30 30 30 30 30 30 30 20 20 2f     0x20000000  /
e2d0: 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20  * True to trace 
e2e0: 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a  VDBE execution *
e2f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e300: 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20  _VdbeAddopTrace 
e310: 30 78 34 30 30 30 30 30 30 30 20 20 2f 2a 20 54  0x40000000  /* T
e320: 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65  race sqlite3Vdbe
e330: 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f  AddOp() calls */
e340: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e350: 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20 30  VdbeEQP        0
e360: 78 38 30 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x80000000  /* De
e370: 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52  bug EXPLAIN QUER
e380: 59 20 50 4c 41 4e 20 2a 2f 0a 23 65 6e 64 69 66  Y PLAN */.#endif
e390: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
e3a0: 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69 74  values for sqlit
e3b0: 65 33 2e 6d 44 62 46 6c 61 67 73 0a 2a 2f 0a 23  e3.mDbFlags.*/.#
e3c0: 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 53 63  define DBFLAG_Sc
e3d0: 68 65 6d 61 43 68 61 6e 67 65 20 20 20 30 78 30  hemaChange   0x0
e3e0: 30 30 31 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74  001  /* Uncommit
e3f0: 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63  ted Hash table c
e400: 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
e410: 65 20 44 42 46 4c 41 47 5f 50 72 65 66 65 72 42  e DBFLAG_PreferB
e420: 75 69 6c 74 69 6e 20 20 30 78 30 30 30 32 20 20  uiltin  0x0002  
e430: 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f  /* Preference to
e440: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20   built-in funcs 
e450: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41  */.#define DBFLA
e460: 47 5f 56 61 63 75 75 6d 20 20 20 20 20 20 20 20  G_Vacuum        
e470: 20 30 78 30 30 30 34 20 20 2f 2a 20 43 75 72 72   0x0004  /* Curr
e480: 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55 55  ently in a VACUU
e490: 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46  M */.#define DBF
e4a0: 4c 41 47 5f 53 63 68 65 6d 61 4b 6e 6f 77 6e 4f  LAG_SchemaKnownO
e4b0: 6b 20 20 30 78 30 30 30 38 20 20 2f 2a 20 53 63  k  0x0008  /* Sc
e4c0: 68 65 6d 61 20 69 73 20 6b 6e 6f 77 6e 20 74 6f  hema is known to
e4d0: 20 62 65 20 76 61 6c 69 64 20 2a 2f 0a 0a 2f 2a   be valid */../*
e4e0: 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20  .** Bits of the 
e4f0: 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61  sqlite3.dbOptFla
e500: 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61 72  gs field that ar
e510: 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a  e used by the.**
e520: 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
e530: 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
e540: 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49  TCTRL_OPTIMIZATI
e550: 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61  ONS,...) interfa
e560: 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69  ce to.** selecti
e570: 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72  vely disable var
e580: 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
e590: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ns..*/.#define S
e5a0: 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74  QLITE_QueryFlatt
e5b0: 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a  ener 0x0001   /*
e5c0: 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e   Query flattenin
e5d0: 67 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  g */.           
e5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e5f0: 2a 20 20 30 78 30 30 30 32 20 20 20 61 76 61 69  *  0x0002   avai
e600: 6c 61 62 6c 65 20 66 6f 72 20 72 65 75 73 65 20  lable for reuse 
e610: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e620: 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20  E_GroupByOrder  
e630: 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f   0x0004   /* GRO
e640: 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52  UPBY cover of OR
e650: 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  DERBY */.#define
e660: 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75   SQLITE_FactorOu
e670: 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20  tConst 0x0008   
e680: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74  /* Constant fact
e690: 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  oring */.#define
e6a0: 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74   SQLITE_Distinct
e6b0: 4f 70 74 20 20 20 20 30 78 30 30 31 30 20 20 20  Opt    0x0010   
e6c0: 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e  /* DISTINCT usin
e6d0: 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  g indexes */.#de
e6e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65  fine SQLITE_Cove
e6f0: 72 49 64 78 53 63 61 6e 20 20 20 30 78 30 30 32  rIdxScan   0x002
e700: 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20  0   /* Covering 
e710: 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23  index scans */.#
e720: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72  define SQLITE_Or
e730: 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30  derByIdxJoin 0x0
e740: 30 34 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42  040   /* ORDER B
e750: 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69  Y of joins via i
e760: 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
e770: 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76  SQLITE_Transitiv
e780: 65 20 20 20 20 20 30 78 30 30 38 30 20 20 20 2f  e     0x0080   /
e790: 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e  * Transitive con
e7a0: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
e7b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e  ine SQLITE_OmitN
e7c0: 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 31 30 30  oopJoin   0x0100
e7d0: 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65     /* Omit unuse
e7e0: 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e  d tables in join
e7f0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e800: 49 54 45 5f 43 6f 75 6e 74 4f 66 56 69 65 77 20  ITE_CountOfView 
e810: 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54     0x0200   /* T
e820: 68 65 20 63 6f 75 6e 74 2d 6f 66 2d 76 69 65 77  he count-of-view
e830: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f   optimization */
e840: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e850: 43 75 72 73 6f 72 48 69 6e 74 73 20 20 20 20 30  CursorHints    0
e860: 78 30 34 30 30 20 20 20 2f 2a 20 41 64 64 20 4f  x0400   /* Add O
e870: 50 5f 43 75 72 73 6f 72 48 69 6e 74 20 6f 70 63  P_CursorHint opc
e880: 6f 64 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  odes */.#define 
e890: 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20  SQLITE_Stat34   
e8a0: 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20 2f        0x0800   /
e8b0: 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20 53  * Use STAT3 or S
e8c0: 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 20 20 20  TAT4 data */.   
e8d0: 2f 2a 20 54 48 33 20 65 78 70 65 63 74 73 20 74  /* TH3 expects t
e8e0: 68 65 20 53 74 61 74 33 34 20 20 5e 5e 5e 5e 5e  he Stat34  ^^^^^
e8f0: 5e 20 76 61 6c 75 65 20 74 6f 20 62 65 20 30 78  ^ value to be 0x
e900: 30 38 30 30 2e 20 20 44 6f 6e 27 74 20 63 68 61  0800.  Don't cha
e910: 6e 67 65 20 69 74 20 2a 2f 0a 23 64 65 66 69 6e  nge it */.#defin
e920: 65 20 53 51 4c 49 54 45 5f 50 75 73 68 44 6f 77  e SQLITE_PushDow
e930: 6e 20 20 20 20 20 20 20 30 78 31 30 30 30 20 20  n       0x1000  
e940: 20 2f 2a 20 54 68 65 20 70 75 73 68 2d 64 6f 77   /* The push-dow
e950: 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a  n optimization *
e960: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e970: 5f 53 69 6d 70 6c 69 66 79 4a 6f 69 6e 20 20 20  _SimplifyJoin   
e980: 30 78 32 30 30 30 20 20 20 2f 2a 20 43 6f 6e 76  0x2000   /* Conv
e990: 65 72 74 20 4c 45 46 54 20 4a 4f 49 4e 20 74 6f  ert LEFT JOIN to
e9a0: 20 4a 4f 49 4e 20 2a 2f 0a 23 64 65 66 69 6e 65   JOIN */.#define
e9b0: 20 53 51 4c 49 54 45 5f 53 6b 69 70 53 63 61 6e   SQLITE_SkipScan
e9c0: 20 20 20 20 20 20 20 30 78 34 30 30 30 20 20 20         0x4000   
e9d0: 2f 2a 20 53 6b 69 70 2d 73 63 61 6e 73 20 2a 2f  /* Skip-scans */
e9e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e9f0: 50 72 6f 70 61 67 61 74 65 43 6f 6e 73 74 20 30  PropagateConst 0
ea00: 78 38 30 30 30 20 20 20 2f 2a 20 54 68 65 20 63  x8000   /* The c
ea10: 6f 6e 73 74 61 6e 74 20 70 72 6f 70 61 67 61 74  onstant propagat
ea20: 69 6f 6e 20 6f 70 74 20 2a 2f 0a 23 64 65 66 69  ion opt */.#defi
ea30: 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74  ne SQLITE_AllOpt
ea40: 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20  s        0xffff 
ea50: 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a    /* All optimiz
ea60: 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
ea70: 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74   Macros for test
ea80: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
ea90: 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ot optimizations
eaa0: 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20   are enabled or 
eab0: 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65  disabled..*/.#de
eac0: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
ead0: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
eae0: 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  sk)  (((db)->dbO
eaf0: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21  ptFlags&(mask))!
eb00: 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  =0).#define Opti
eb10: 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28  mizationEnabled(
eb20: 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64  db, mask)   (((d
eb30: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
eb40: 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  mask))==0)../*.*
eb50: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
eb60: 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   it OK to factor
eb70: 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   constant expres
eb80: 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69  sions into the i
eb90: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
eba0: 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d   code. The argum
ebb0: 65 6e 74 20 69 73 20 61 20 50 61 72 73 65 20 6f  ent is a Parse o
ebc0: 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f  bject for the co
ebd0: 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f  de generator..*/
ebe0: 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61  .#define ConstFa
ebf0: 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e  ctorOk(P) ((P)->
ec00: 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a  okConstFactor)..
ec10: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
ec20: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71  alues for the sq
ec30: 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64  lite.magic field
ec40: 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73  ..** The numbers
ec50: 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74   are obtained at
ec60: 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65   random and have
ec70: 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e   no special mean
ec80: 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68  ing, other.** th
ec90: 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63  an being distinc
eca0: 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68  t from one anoth
ecb0: 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
ecc0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
ecd0: 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37 20       0xa029a697 
ece0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
ecf0: 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  open */.#define 
ed00: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f  SQLITE_MAGIC_CLO
ed10: 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33 33  SED   0x9f3c2d33
ed20: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
ed30: 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69   closed */.#defi
ed40: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
ed50: 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37 31  SICK     0x4b771
ed60: 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e  290  /* Error an
ed70: 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65  d awaiting close
ed80: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ed90: 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20  TE_MAGIC_BUSY   
eda0: 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a    0xf03b7906  /*
edb0: 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65 6e   Database curren
edc0: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64  tly in use */.#d
edd0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
ede0: 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35  IC_ERROR    0xb5
edf0: 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51  357930  /* An SQ
ee00: 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f  LITE_MISUSE erro
ee10: 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64  r occurred */.#d
ee20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
ee30: 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34  IC_ZOMBIE   0x64
ee40: 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65  cffc7f  /* Close
ee50: 20 77 69 74 68 20 6c 61 73 74 20 73 74 61 74 65   with last state
ee60: 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f  ment close */../
ee70: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75  *.** Each SQL fu
ee80: 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  nction is define
ee90: 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
eea0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
eeb0: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
eec0: 20 46 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c   For global buil
eed0: 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28  t-in functions (
eee0: 65 78 3a 20 73 75 62 73 74 72 28 29 2c 20 6d 61  ex: substr(), ma
eef0: 78 28 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a  x(), count()).**
ef00: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
ef10: 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
ef20: 68 65 6c 64 20 69 6e 20 74 68 65 20 73 71 6c 69  held in the sqli
ef30: 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  te3BuiltinFuncti
ef40: 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46  ons object..** F
ef50: 6f 72 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  or per-connectio
ef60: 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65  n application-de
ef70: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c  fined functions,
ef80: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
ef90: 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
efa0: 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20 64  is held in the d
efb0: 62 2d 3e 61 48 61 73 68 20 68 61 73 68 20 74 61  b->aHash hash ta
efc0: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75  ble..**.** The u
efd0: 2e 70 48 61 73 68 20 66 69 65 6c 64 20 69 73 20  .pHash field is 
efe0: 75 73 65 64 20 62 79 20 74 68 65 20 67 6c 6f 62  used by the glob
eff0: 61 6c 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54  al built-ins.  T
f000: 68 65 20 75 2e 70 44 65 73 74 72 75 63 74 6f 72  he u.pDestructor
f010: 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 75 73 65  .** field is use
f020: 64 20 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74  d by per-connect
f030: 69 6f 6e 20 61 70 70 2d 64 65 66 20 66 75 6e 63  ion app-def func
f040: 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  tions..*/.struct
f050: 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 38 20   FuncDef {.  i8 
f060: 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
f070: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
f080: 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65  rguments.  -1 me
f090: 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f  ans unlimited */
f0a0: 0a 20 20 75 33 32 20 66 75 6e 63 46 6c 61 67 73  .  u32 funcFlags
f0b0: 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20  ;       /* Some 
f0c0: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53  combination of S
f0d0: 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a  QLITE_FUNC_* */.
f0e0: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
f0f0: 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64  a;     /* User d
f100: 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f  ata parameter */
f110: 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78  .  FuncDef *pNex
f120: 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
f130: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61  function with sa
f140: 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69  me name */.  voi
f150: 64 20 28 2a 78 53 46 75 6e 63 29 28 73 71 6c 69  d (*xSFunc)(sqli
f160: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
f170: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
f180: 29 3b 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67  ); /* func or ag
f190: 67 2d 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64  g-step */.  void
f1a0: 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71   (*xFinalize)(sq
f1b0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
f1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1d0: 20 20 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a    /* Agg finaliz
f1e0: 65 72 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  er */.  void (*x
f1f0: 56 61 6c 75 65 29 28 73 71 6c 69 74 65 33 5f 63  Value)(sqlite3_c
f200: 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20  ontext*);       
f210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f220: 20 43 75 72 72 65 6e 74 20 61 67 67 20 76 61 6c   Current agg val
f230: 75 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ue */.  void (*x
f240: 49 6e 76 65 72 73 65 29 28 73 71 6c 69 74 65 33  Inverse)(sqlite3
f250: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
f260: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20  lite3_value**); 
f270: 2f 2a 20 69 6e 76 65 72 73 65 20 61 67 67 2d 73  /* inverse agg-s
f280: 74 65 70 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  tep */.  const c
f290: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a  har *zName;   /*
f2a0: 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65   SQL name of the
f2b0: 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20   function. */.  
f2c0: 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63  union {.    Func
f2d0: 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20  Def *pHash;     
f2e0: 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20   /* Next with a 
f2f0: 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62  different name b
f300: 75 74 20 74 68 65 20 73 61 6d 65 20 68 61 73 68  ut the same hash
f310: 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 73 74   */.    FuncDest
f320: 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
f330: 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65  tor;   /* Refere
f340: 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74  nce counted dest
f350: 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
f360: 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a  */.  } u;.};../*
f370: 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
f380: 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20  re encapsulates 
f390: 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20  a user-function 
f3a0: 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62  destructor callb
f3b0: 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69  ack (as.** confi
f3c0: 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65 61  gured using crea
f3d0: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29  te_function_v2()
f3e0: 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63  ) and a referenc
f3f0: 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a  e counter. When.
f400: 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69  ** create_functi
f410: 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65  on_v2() is calle
f420: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66 75  d to create a fu
f430: 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65  nction with a de
f440: 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73  structor,.** a s
f450: 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20  ingle object of 
f460: 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c  this type is all
f470: 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74  ocated. FuncDest
f480: 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73  ructor.nRef is s
f490: 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d  et to.** the num
f4a0: 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f  ber of FuncDef o
f4b0: 62 6a 65 63 74 73 20 63 72 65 61 74 65 64 20 28  bjects created (
f4c0: 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64  either 1 or 3, d
f4d0: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
f4e0: 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68  her.** or not th
f4f0: 65 20 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f  e specified enco
f500: 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41  ding is SQLITE_A
f510: 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66  NY). The FuncDef
f520: 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  .pDestructor.** 
f530: 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f  member of each o
f540: 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65  f the new FuncDe
f550: 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74  f objects is set
f560: 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
f570: 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75   allocated.** Fu
f580: 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a  ncDestructor..**
f590: 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20  .** Thereafter, 
f5a0: 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20  when one of the 
f5b0: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
f5c0: 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20  is deleted, the 
f5d0: 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75  reference.** cou
f5e0: 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63  nt on this objec
f5f0: 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64  t is decremented
f600: 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65  . When it reache
f610: 73 20 30 2c 20 74 68 65 20 64 65 73 74 72 75 63  s 0, the destruc
f620: 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65  tor.** is invoke
f630: 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65  d and the FuncDe
f640: 73 74 72 75 63 74 6f 72 20 73 74 72 75 63 74 75  structor structu
f650: 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72  re freed..*/.str
f660: 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74  uct FuncDestruct
f670: 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b  or {.  int nRef;
f680: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72  .  void (*xDestr
f690: 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76  oy)(void *);.  v
f6a0: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a  oid *pUserData;.
f6b0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  };../*.** Possib
f6c0: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75  le values for Fu
f6d0: 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f  ncDef.flags.  No
f6e0: 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e  te that the _LEN
f6f0: 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a  GTH and _TYPEOF.
f700: 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63  ** values must c
f710: 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46  orrespond to OPF
f720: 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e  LAG_LENGTHARG an
f730: 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  d OPFLAG_TYPEOFA
f740: 52 47 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49  RG.  And.** SQLI
f750: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
f760: 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d   must be the sam
f770: 65 20 61 73 20 53 51 4c 49 54 45 5f 44 45 54 45  e as SQLITE_DETE
f780: 52 4d 49 4e 49 53 54 49 43 2e 20 20 54 68 65 72  RMINISTIC.  Ther
f790: 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28  e.** are assert(
f7a0: 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  ) statements in 
f7b0: 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69  the code to veri
f7c0: 66 79 20 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56  fy this..**.** V
f7d0: 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
f7e0: 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61   (enforced via a
f7f0: 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
f800: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
f810: 4d 41 58 20 20 20 20 3d 3d 20 20 4e 43 5f 4d 69  MAX    ==  NC_Mi
f820: 6e 4d 61 78 41 67 67 20 20 20 20 20 20 3d 3d 20  nMaxAgg      == 
f830: 53 46 5f 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a 20  SF_MinMaxAgg.** 
f840: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
f850: 4c 45 4e 47 54 48 20 20 20 20 3d 3d 20 20 4f 50  LENGTH    ==  OP
f860: 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 0a 2a  FLAG_LENGTHARG.*
f870: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e  *     SQLITE_FUN
f880: 43 5f 54 59 50 45 4f 46 20 20 20 20 3d 3d 20 20  C_TYPEOF    ==  
f890: 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
f8a0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
f8b0: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 20 3d 3d  UNC_CONSTANT  ==
f8c0: 20 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49    SQLITE_DETERMI
f8d0: 4e 49 53 54 49 43 20 66 72 6f 6d 20 74 68 65 20  NISTIC from the 
f8e0: 41 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  API.**     SQLIT
f8f0: 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20  E_FUNC_ENCMASK  
f900: 20 64 65 70 65 6e 64 73 20 6f 6e 20 53 51 4c 49   depends on SQLI
f910: 54 45 5f 55 54 46 2a 20 6d 61 63 72 6f 73 20 69  TE_UTF* macros i
f920: 6e 20 74 68 65 20 41 50 49 0a 2a 2f 0a 23 64 65  n the API.*/.#de
f930: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
f940: 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 30 33  _ENCMASK  0x0003
f950: 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c   /* SQLITE_UTF8,
f960: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20   SQLITE_UTF16BE 
f970: 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64  or UTF16LE */.#d
f980: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f990: 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30 30  C_LIKE     0x000
f9a0: 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66  4 /* Candidate f
f9b0: 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69  or the LIKE opti
f9c0: 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  mization */.#def
f9d0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
f9e0: 43 41 53 45 20 20 20 20 20 30 78 30 30 30 38 20  CASE     0x0008 
f9f0: 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76  /* Case-sensitiv
fa00: 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63  e LIKE-type func
fa10: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
fa20: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45  SQLITE_FUNC_EPHE
fa30: 4d 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20 45  M    0x0010 /* E
fa40: 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74  phemeral.  Delet
fa50: 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23  e with VDBE */.#
fa60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
fa70: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30  NC_NEEDCOLL 0x00
fa80: 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74  20 /* sqlite3Get
fa90: 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69  FuncCollSeq() mi
faa0: 67 68 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a  ght be called*/.
fab0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
fac0: 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30  UNC_LENGTH   0x0
fad0: 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  040 /* Built-in 
fae0: 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f  length() functio
faf0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fb00: 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20  ITE_FUNC_TYPEOF 
fb10: 20 20 30 78 30 30 38 30 20 2f 2a 20 42 75 69 6c    0x0080 /* Buil
fb20: 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75  t-in typeof() fu
fb30: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
fb40: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
fb50: 55 4e 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a  UNT    0x0100 /*
fb60: 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28   Built-in count(
fb70: 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a  *) aggregate */.
fb80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
fb90: 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 30  UNC_COALESCE 0x0
fba0: 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  200 /* Built-in 
fbb0: 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66  coalesce() or if
fbc0: 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e  null() */.#defin
fbd0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e  e SQLITE_FUNC_UN
fbe0: 4c 49 4b 45 4c 59 20 30 78 30 34 30 30 20 2f 2a  LIKELY 0x0400 /*
fbf0: 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65   Built-in unlike
fc00: 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ly() function */
fc10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fc20: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78  FUNC_CONSTANT 0x
fc30: 30 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  0800 /* Constant
fc40: 20 69 6e 70 75 74 73 20 67 69 76 65 20 61 20 63   inputs give a c
fc50: 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a  onstant output *
fc60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fc70: 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30  _FUNC_MINMAX   0
fc80: 78 31 30 30 30 20 2f 2a 20 54 72 75 65 20 66 6f  x1000 /* True fo
fc90: 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78 28  r min() and max(
fca0: 29 20 61 67 67 72 65 67 61 74 65 73 20 2a 2f 0a  ) aggregates */.
fcb0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
fcc0: 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32  UNC_SLOCHNG  0x2
fcd0: 30 30 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61  000 /* "Slow Cha
fce0: 6e 67 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73  nge". Value cons
fcf0: 74 61 6e 74 20 64 75 72 69 6e 67 20 61 0a 20 20  tant during a.  
fd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd20: 20 20 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65 72    ** single quer
fd30: 79 20 2d 20 6d 69 67 68 74 20 63 68 61 6e 67 65  y - might change
fd40: 20 6f 76 65 72 20 74 69 6d 65 20 2a 2f 0a 23 64   over time */.#d
fd50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fd60: 43 5f 41 46 46 49 4e 49 54 59 20 30 78 34 30 30  C_AFFINITY 0x400
fd70: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66  0 /* Built-in af
fd80: 66 69 6e 69 74 79 28 29 20 66 75 6e 63 74 69 6f  finity() functio
fd90: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fda0: 49 54 45 5f 46 55 4e 43 5f 4f 46 46 53 45 54 20  ITE_FUNC_OFFSET 
fdb0: 20 20 30 78 38 30 30 30 20 2f 2a 20 42 75 69 6c    0x8000 /* Buil
fdc0: 74 2d 69 6e 20 73 71 6c 69 74 65 5f 6f 66 66 73  t-in sqlite_offs
fdd0: 65 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  et() function */
fde0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fdf0: 46 55 4e 43 5f 57 49 4e 44 4f 57 20 20 30 78 31  FUNC_WINDOW  0x1
fe00: 30 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0000 /* Built-in
fe10: 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79 20 66 75 6e   window-only fun
fe20: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
fe30: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 57 49 4e   SQLITE_FUNC_WIN
fe40: 44 4f 57 5f 53 49 5a 45 20 20 30 78 32 30 30 30  DOW_SIZE  0x2000
fe50: 30 20 20 2f 2a 20 52 65 71 75 69 72 65 73 20 70  0  /* Requires p
fe60: 61 72 74 69 74 69 6f 6e 20 73 69 7a 65 20 61 73  artition size as
fe70: 20 61 72 67 2e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   arg. */../*.** 
fe80: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  The following th
fe90: 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43  ree macros, FUNC
fea0: 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43  TION(), LIKEFUNC
feb0: 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45  () and AGGREGATE
fec0: 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  () are.** used t
fed0: 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69  o create the ini
fee0: 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68  tializers for th
fef0: 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  e FuncDef struct
ff00: 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55  ures..**.**   FU
ff10: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
ff20: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
ff30: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65  Func).**     Use
ff40: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
ff50: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
ff60: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
ff70: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20  nction zName.** 
ff80: 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20      implemented 
ff90: 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46  by C function xF
ffa0: 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74 73  unc that accepts
ffb0: 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e   nArg arguments.
ffc0: 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75   The.**     valu
ffd0: 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72 67  e passed as iArg
ffe0: 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76   is cast to a (v
fff0: 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61  oid*) and made a
10000 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20  vailable.**     
10010 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74 61  as the user-data
10020 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
10030 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20 66  ata()) for the f
10040 75 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20  unction. If.**  
10050 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20     argument bNC 
10060 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68  is true, then th
10070 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  e SQLITE_FUNC_NE
10080 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73  EDCOLL flag is s
10090 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e  et..**.**   VFUN
100a0 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
100b0 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
100c0 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65  unc).**     Like
100d0 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74   FUNCTION except
100e0 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51   it omits the SQ
100f0 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
10100 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20  NT flag..**.**  
10110 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   DFUNCTION(zName
10120 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
10130 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
10140 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65   Like FUNCTION e
10150 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74  xcept it omits t
10160 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  he SQLITE_FUNC_C
10170 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61 6e 64  ONSTANT flag and
10180 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74 68 65  .**     adds the
10190 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
101a0 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73 65 64  CHNG flag.  Used
101b0 20 66 6f 72 20 64 61 74 65 20 26 20 74 69 6d 65   for date & time
101c0 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20   functions.**   
101d0 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20    and functions 
101e0 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65 72 73  like sqlite_vers
101f0 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e 20 63  ion() that can c
10200 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20 64  hange, but not d
10210 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73  uring.**     a s
10220 69 6e 67 6c 65 20 71 75 65 72 79 2e 20 20 54 68  ingle query.  Th
10230 65 20 69 41 72 67 20 69 73 20 69 67 6e 6f 72 65  e iArg is ignore
10240 64 2e 20 20 54 68 65 20 75 73 65 72 2d 64 61 74  d.  The user-dat
10250 61 20 69 73 20 61 6c 77 61 79 73 20 73 65 74 0a  a is always set.
10260 2a 2a 20 20 20 20 20 74 6f 20 61 20 4e 55 4c 4c  **     to a NULL
10270 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 65 20 62   pointer.  The b
10280 4e 43 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  NC parameter is 
10290 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  not used..**.** 
102a0 20 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d    PURE_DATE(zNam
102b0 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
102c0 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
102d0 20 20 55 73 65 64 20 66 6f 72 20 22 70 75 72 65    Used for "pure
102e0 22 20 64 61 74 65 2f 74 69 6d 65 20 66 75 6e 63  " date/time func
102f0 74 69 6f 6e 73 2c 20 74 68 69 73 20 6d 61 63 72  tions, this macr
10300 6f 20 69 73 20 6c 69 6b 65 20 44 46 55 4e 43 54  o is like DFUNCT
10310 49 4f 4e 0a 2a 2a 20 20 20 20 20 65 78 63 65 70  ION.**     excep
10320 74 20 74 68 61 74 20 69 74 20 64 6f 65 73 20 73  t that it does s
10330 65 74 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  et the SQLITE_FU
10340 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
10350 73 2e 20 20 69 41 72 67 20 69 73 0a 2a 2a 20 20  s.  iArg is.**  
10360 20 20 20 69 67 6e 6f 72 65 64 20 61 6e 64 20 74     ignored and t
10370 68 65 20 75 73 65 72 2d 64 61 74 61 20 66 6f 72  he user-data for
10380 20 74 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73   these functions
10390 20 69 73 20 73 65 74 20 74 6f 20 61 6e 20 0a 2a   is set to an .*
103a0 2a 20 20 20 20 20 61 72 62 69 74 72 61 72 79 20  *     arbitrary 
103b0 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f 69 6e 74 65 72  non-NULL pointer
103c0 2e 20 20 54 68 65 20 62 4e 43 20 70 61 72 61 6d  .  The bNC param
103d0 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64  eter is not used
103e0 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47  ..**.**   AGGREG
103f0 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
10400 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65   iArg, bNC, xSte
10410 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20  p, xFinal).**   
10420 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
10430 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75   an aggregate fu
10440 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
10450 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  n implemented by
10460 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75  .**     the C fu
10470 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e  nctions xStep an
10480 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69  d xFinal. The fi
10490 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74  rst four paramet
104a0 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69  ers.**     are i
104b0 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68  nterpreted in th
104c0 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68  e same way as th
104d0 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65  e first 4 parame
104e0 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46  ters to.**     F
104f0 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a  UNCTION()..**.**
10500 20 20 20 57 46 55 4e 43 54 49 4f 4e 28 7a 4e 61     WFUNCTION(zNa
10510 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10520 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78  xStep, xFinal, x
10530 56 61 6c 75 65 2c 20 78 49 6e 76 65 72 73 65 29  Value, xInverse)
10540 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
10550 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67  create an aggreg
10560 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  ate function def
10570 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  inition implemen
10580 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68  ted by.**     th
10590 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53  e C functions xS
105a0 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20  tep and xFinal. 
105b0 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70  The first four p
105c0 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20  arameters.**    
105d0 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64   are interpreted
105e0 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
105f0 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20   as the first 4 
10600 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a  parameters to.**
10610 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e       FUNCTION().
10620 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e  .**.**   LIKEFUN
10630 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  C(zName, nArg, p
10640 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20  Arg, flags).**  
10650 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
10660 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74  e a scalar funct
10670 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  ion definition o
10680 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61  f a function zNa
10690 6d 65 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61  me.**     that a
106a0 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
106b0 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70  ments and is imp
106c0 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61  lemented by a ca
106d0 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20 20 20 20 66  ll to C.**     f
106e0 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63  unction likeFunc
106f0 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20  . Argument pArg 
10700 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f  is cast to a (vo
10710 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a  id *) and made.*
10720 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20  *     available 
10730 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  as the function 
10740 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74  user-data (sqlit
10750 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e  e3_user_data()).
10760 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63   The.**     Func
10770 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62  Def.flags variab
10780 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  le is set to the
10790 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
107a0 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20   the flags.**   
107b0 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a    parameter..*/.
107c0 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
107d0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
107e0 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
107f0 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
10800 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
10810 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
10820 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
10830 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
10840 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
10850 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
10860 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
10870 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56   {0} }.#define V
10880 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
10890 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
108a0 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
108b0 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
108c0 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
108d0 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
108e0 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
108f0 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
10900 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  c, 0, 0, 0, #zNa
10910 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
10920 65 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  e DFUNCTION(zNam
10930 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
10940 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
10950 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
10960 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45  C_SLOCHNG|SQLITE
10970 5f 55 54 46 38 2c 20 5c 0a 20 20 20 30 2c 20 30  _UTF8, \.   0, 0
10980 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
10990 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
109a0 23 64 65 66 69 6e 65 20 50 55 52 45 5f 44 41 54  #define PURE_DAT
109b0 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  E(zName, nArg, i
109c0 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
109d0 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
109e0 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c  TE_FUNC_SLOCHNG|
109f0 53 51 4c 49 54 45 5f 55 54 46 38 7c 53 51 4c 49  SQLITE_UTF8|SQLI
10a00 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
10a10 2c 20 5c 0a 20 20 20 28 76 6f 69 64 2a 29 26 73  , \.   (void*)&s
10a20 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 30 2c  qlite3Config, 0,
10a30 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c   xFunc, 0, 0, 0,
10a40 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
10a50 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32  define FUNCTION2
10a60 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
10a70 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20  rg, bNC, xFunc, 
10a80 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20  extraFlags) \.  
10a90 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e  {nArg,SQLITE_FUN
10aa0 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
10ab0 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
10ac0 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
10ad0 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20  )|extraFlags,\. 
10ae0 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
10af0 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
10b00 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
10b10 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
10b20 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
10b30 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
10b40 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
10b50 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
10b60 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53  E_FUNC_SLOCHNG|S
10b70 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
10b80 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10b90 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67  COLL), \.   pArg
10ba0 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10bb0 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23  , 0, #zName, }.#
10bc0 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28  define LIKEFUNC(
10bd0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
10be0 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  , flags) \.  {nA
10bf0 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
10c00 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
10c10 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20  UTF8|flags, \.  
10c20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c   (void *)arg, 0,
10c30 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c   likeFunc, 0, 0,
10c40 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
10c50 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
10c60 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
10c70 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
10c80 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 29   xFinal, xValue)
10c90 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
10ca0 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
10cb0 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
10cc0 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  ), \.   SQLITE_I
10cd0 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
10ce0 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
10cf0 78 56 61 6c 75 65 2c 30 2c 23 7a 4e 61 6d 65 2c  xValue,0,#zName,
10d00 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47   {0}}.#define AG
10d10 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20  GREGATE2(zName, 
10d20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
10d30 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78  Step, xFinal, ex
10d40 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  traFlags) \.  {n
10d50 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
10d60 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
10d70 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
10d80 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49  Flags, \.   SQLI
10d90 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
10da0 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69  g), 0, xStep,xFi
10db0 6e 61 6c 2c 78 46 69 6e 61 6c 2c 30 2c 23 7a 4e  nal,xFinal,0,#zN
10dc0 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 23 64 65 66 69  ame, {0}}..#defi
10dd0 6e 65 20 57 41 47 47 52 45 47 41 54 45 28 7a 4e  ne WAGGREGATE(zN
10de0 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
10df0 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
10e00 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49 6e 76 65  l, xValue, xInve
10e10 72 73 65 2c 20 66 29 20 5c 0a 20 20 7b 6e 41 72  rse, f) \.  {nAr
10e20 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
10e30 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
10e40 45 45 44 43 4f 4c 4c 29 7c 66 2c 20 5c 0a 20 20  EEDCOLL)|f, \.  
10e50 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
10e60 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65  TR(arg), 0, xSte
10e70 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c 75 65 2c  p,xFinal,xValue,
10e80 78 49 6e 76 65 72 73 65 2c 23 7a 4e 61 6d 65 2c  xInverse,#zName,
10e90 20 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c   {0}}../*.** All
10ea0 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69   current savepoi
10eb0 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  nts are stored i
10ec0 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
10ed0 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73  starting at.** s
10ee0 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e  qlite3.pSavepoin
10ef0 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  t. The first ele
10f00 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74  ment in the list
10f10 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63   is the most rec
10f20 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20  ently.** opened 
10f30 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70  savepoint. Savep
10f40 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20  oints are added 
10f50 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74  to the list by t
10f60 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61  he vdbe.** OP_Sa
10f70 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
10f80 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
10f90 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61  avepoint {.  cha
10fa0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fc0 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61   /* Savepoint na
10fd0 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74  me (nul-terminat
10fe0 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ed) */.  i64 nDe
10ff0 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
11000 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11010 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
11020 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73  ed fk violations
11030 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
11040 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
11050 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
11060 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
11070 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76  imm fk. */.  Sav
11080 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20  epoint *pNext;  
11090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110a0 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70   /* Parent savep
110b0 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f  oint (if any) */
110c0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
110d0 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65  ollowing are use
110e0 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20  d as the second 
110f0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
11100 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c  ite3Savepoint(),
11110 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50  .** and as the P
11120 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
11130 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  e OP_Savepoint i
11140 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  nstruction..*/.#
11150 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
11160 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64  _BEGIN      0.#d
11170 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
11180 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65  RELEASE    1.#de
11190 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
111a0 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a  OLLBACK   2.../*
111b0 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20  .** Each SQLite 
111c0 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20  module (virtual 
111d0 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
111e0 29 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  ) is defined by 
111f0 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
11200 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
11210 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65  structure, store
11220 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
11230 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68  .aModule.** hash
11240 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63   table..*/.struc
11250 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e  t Module {.  con
11260 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
11270 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20  e *pModule;     
11280 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f    /* Callback po
11290 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73  inters */.  cons
112a0 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20  t char *zName;  
112b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112c0 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20   /* Name passed 
112d0 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
112e0 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  () */.  void *pA
112f0 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ux;             
11300 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11310 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63  pAux passed to c
11320 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
11330 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  /.  void (*xDest
11340 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  roy)(void *);   
11350 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75           /* Modu
11360 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75  le destructor fu
11370 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c  nction */.  Tabl
11380 65 20 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20  e *pEpoTab;     
11390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113a0 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61   /* Eponymous ta
113b0 62 6c 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64  ble for this mod
113c0 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ule */.};../*.**
113d0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
113e0 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ut each column o
113f0 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69  f an SQL table i
11400 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73  s held in an ins
11410 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
11420 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
11430 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20  truct Column {. 
11440 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
11450 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
11460 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20  s column, \000, 
11470 74 68 65 6e 20 74 68 65 20 74 79 70 65 20 2a 2f  then the type */
11480 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20  .  Expr *pDflt; 
11490 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76      /* Default v
114a0 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
114b0 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  umn */.  char *z
114c0 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  Coll;     /* Col
114d0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
114e0 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74    If NULL, use t
114f0 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  he default */.  
11500 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20  u8 notNull;     
11510 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20   /* An OE_ code 
11520 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e  for handling a N
11530 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
11540 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  nt */.  char aff
11550 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20  inity;   /* One 
11560 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  of the SQLITE_AF
11570 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a  F_... values */.
11580 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20    u8 szEst;     
11590 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
115a0 73 69 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e  size of value in
115b0 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69   this column. si
115c0 7a 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a  zeof(INT)==1 */.
115d0 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20    u8 colFlags;  
115e0 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72     /* Boolean pr
115f0 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43  operties.  See C
11600 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20  OLFLAG_ defines 
11610 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  below */.};../* 
11620 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
11630 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61  or Column.colFla
11640 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  gs:.*/.#define C
11650 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20  OLFLAG_PRIMKEY  
11660 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c  0x0001    /* Col
11670 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74  umn is part of t
11680 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a  he primary key *
11690 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
116a0 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30  G_HIDDEN   0x000
116b0 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e  2    /* A hidden
116c0 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72   column in a vir
116d0 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  tual table */.#d
116e0 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41  efine COLFLAG_HA
116f0 53 54 59 50 45 20 20 30 78 30 30 30 34 20 20 20  STYPE  0x0004   
11700 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20 66 6f   /* Type name fo
11710 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d  llows column nam
11720 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  e */.#define COL
11730 46 4c 41 47 5f 55 4e 49 51 55 45 20 20 20 30 78  FLAG_UNIQUE   0x
11740 30 30 30 38 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  0008    /* Colum
11750 6e 20 64 65 66 20 63 6f 6e 74 61 69 6e 73 20 22  n def contains "
11760 55 4e 49 51 55 45 22 20 6f 72 20 22 50 4b 22 20  UNIQUE" or "PK" 
11770 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
11780 41 47 5f 53 4f 52 54 45 52 52 45 46 20 30 78 30  AG_SORTERREF 0x0
11790 30 31 30 20 20 20 2f 2a 20 55 73 65 20 73 6f 72  010   /* Use sor
117a0 74 65 72 2d 72 65 66 73 20 77 69 74 68 20 74 68  ter-refs with th
117b0 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a  is column */../*
117c0 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67  .** A "Collating
117d0 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65   Sequence" is de
117e0 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
117f0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
11800 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
11810 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79  re. Conceptually
11820 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  , a collating se
11830 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20  quence consists 
11840 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a  of a name and.**
11850 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f   a comparison ro
11860 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e  utine that defin
11870 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  es the order of 
11880 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a  that sequence..*
11890 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e  *.** If CollSeq.
118a0 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74  xCmp is NULL, it
118b0 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a   means that the.
118c0 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
118d0 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e  uence is undefin
118e0 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69  ed.  Indices bui
118f0 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e  lt on an undefin
11900 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20  ed.** collating 
11910 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74  sequence may not
11920 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74   be read or writ
11930 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ten..*/.struct C
11940 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20  ollSeq {.  char 
11950 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
11960 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
11970 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
11980 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  ce, UTF-8 encode
11990 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  d */.  u8 enc;  
119a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
119b0 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61  Text encoding ha
119c0 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20  ndled by xCmp() 
119d0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
119e0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69  ;          /* Fi
119f0 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
11a00 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20  xCmp() */.  int 
11a10 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e  (*xCmp)(void*,in
11a20 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  t, const void*, 
11a30 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
11a40 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  );.  void (*xDel
11a50 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65  )(void*);  /* De
11a60 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73  structor for pUs
11a70 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
11a80 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e  A sort order can
11a90 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f   be either ASC o
11aa0 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69  r DESC..*/.#defi
11ab0 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43  ne SQLITE_SO_ASC
11ac0 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72         0  /* Sor
11ad0 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
11ae0 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rder */.#define 
11af0 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20  SQLITE_SO_DESC  
11b00 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69      1  /* Sort i
11b10 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
11b20 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
11b30 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44  ITE_SO_UNDEFINED
11b40 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f   -1 /* No sort o
11b50 72 64 65 72 20 73 70 65 63 69 66 69 65 64 20 2a  rder specified *
11b60 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20  /../*.** Column 
11b70 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a  affinity types..
11b80 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64  **.** These used
11b90 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69   to have mnemoni
11ba0 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20  c name like 'i' 
11bb0 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  for SQLITE_AFF_I
11bc0 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74  NTEGER and.** 't
11bd0 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
11be0 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63  _TEXT.  But we c
11bf0 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65  an save a little
11c00 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f   space and impro
11c10 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20  ve.** the speed 
11c20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62  a little by numb
11c30 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73  ering the values
11c40 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a   consecutively..
11c50 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
11c60 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
11c70 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
11c80 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68 61  n with 'A'.  Tha
11c90 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
11ca0 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
11cb0 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
11cc0 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
11cd0 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
11ce0 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
11cf0 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
11d00 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
11d10 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
11d20 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
11d30 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
11d40 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
11d50 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
11d60 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
11d70 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
11d80 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20  omparison.  And 
11d90 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73  the BLOB type is
11da0 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69   first..*/.#defi
11db0 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c  ne SQLITE_AFF_BL
11dc0 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65 66 69  OB     'A'.#defi
11dd0 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ne SQLITE_AFF_TE
11de0 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66 69  XT     'B'.#defi
11df0 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ne SQLITE_AFF_NU
11e00 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66 69  MERIC  'C'.#defi
11e10 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ne SQLITE_AFF_IN
11e20 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66 69  TEGER  'D'.#defi
11e30 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ne SQLITE_AFF_RE
11e40 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66  AL     'E'..#def
11e50 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d  ine sqlite3IsNum
11e60 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20  ericAffinity(X) 
11e70 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46   ((X)>=SQLITE_AF
11e80 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a  F_NUMERIC)../*.*
11e90 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
11ea0 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73  _MASK values mas
11eb0 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69  ks off the signi
11ec0 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61  ficant bits of a
11ed0 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61  n.** affinity va
11ee0 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lue..*/.#define 
11ef0 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
11f00 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20      0x47../*.** 
11f10 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76  Additional bit v
11f20 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62  alues that can b
11f30 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61  e ORed with an a
11f40 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a  ffinity without.
11f50 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20  ** changing the 
11f60 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20  affinity..**.** 
11f70 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55  The SQLITE_NOTNU
11f80 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d  LL flag is a com
11f90 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c  bination of NULL
11fa0 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c  EQ and JUMPIFNUL
11fb0 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20  L..** It causes 
11fc0 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66  an assert() to f
11fd0 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70  ire if either op
11fe0 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61  erand to a compa
11ff0 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f  rison.** operato
12000 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69  r is NULL.  It i
12010 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61  s added to certa
12020 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70  in comparison op
12030 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72  erators to.** pr
12040 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65  ove that the ope
12050 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73  rands are always
12060 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64   NOT NULL..*/.#d
12070 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45  efine SQLITE_KEE
12080 50 4e 55 4c 4c 20 20 20 20 20 30 78 30 38 20 20  PNULL     0x08  
12090 2f 2a 20 55 73 65 64 20 62 79 20 76 65 63 74 6f  /* Used by vecto
120a0 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64  r == or <> */.#d
120b0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d  efine SQLITE_JUM
120c0 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20  PIFNULL   0x10  
120d0 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68  /* jumps if eith
120e0 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
120f0 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
12100 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20  LITE_STOREP2    
12110 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65    0x20  /* Store
12120 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50   result in reg[P
12130 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a  2] rather than j
12140 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ump */.#define S
12150 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20  QLITE_NULLEQ    
12160 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c     0x80  /* NULL
12170 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65  =NULL */.#define
12180 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20   SQLITE_NOTNULL 
12190 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73       0x90  /* As
121a0 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e  sert that operan
121b0 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c  ds are never NUL
121c0 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  L */../*.** An o
121d0 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
121e0 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  pe is created fo
121f0 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74  r each virtual t
12200 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a  able present in.
12210 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
12220 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66  schema..**.** If
12230 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
12240 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
12250 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e  then there is on
12260 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
12270 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
12280 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
12290 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71  e connection (sq
122a0 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65  lite3*) that use
122b0 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20  s the shared.** 
122c0 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20  schema. This is 
122d0 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74  because each dat
122e0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
122f0 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77   requires its ow
12300 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74  n unique.** inst
12310 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69  ance of the sqli
12320 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
12330 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
12340 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
12350 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
12360 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61  ion. sqlite3_vta
12370 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e  b* handles can n
12380 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74  ot be shared bet
12390 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65  ween.** database
123a0 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76   connections, ev
123b0 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74  en when the rest
123c0 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72   of the in-memor
123d0 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73 63  y database.** sc
123e0 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
123f0 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  as the implement
12400 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72  ation often stor
12410 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  es the database.
12420 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ** connection ha
12430 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69  ndle passed to i
12440 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65  t via the xConne
12450 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28  ct() or xCreate(
12460 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69  ) method.** duri
12470 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
12480 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68  n internally. Th
12490 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  is database conn
124a0 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61  ection handle ma
124b0 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65  y.** then be use
124c0 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c  d by the virtual
124d0 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
124e0 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20  ation to access 
124f0 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77  real tables.** w
12500 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61  ithin the databa
12510 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79  se. So that they
12520 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20   appear as part 
12530 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a  of the callers.*
12540 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
12550 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65  hese accesses ne
12560 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69  ed to be made vi
12570 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  a the same datab
12580 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
12590 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74  n as that used t
125a0 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70  o execute SQL op
125b0 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  erations on the 
125c0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
125d0 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20  *.** All VTable 
125e0 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72  objects that cor
125f0 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e  respond to a sin
12600 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73  gle table in a s
12610 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  hared.** databas
12620 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69  e schema are ini
12630 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e  tially stored in
12640 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70   a linked-list p
12650 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20  ointed to by.** 
12660 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
12670 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  e member variabl
12680 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
12690 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a  onding Table obj
126a0 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ect..** When an 
126b0 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
126c0 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72  ) operation is r
126d0 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73  equired to acces
126e0 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  s the virtual.**
126f0 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63   table, it searc
12700 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72  hes the list for
12710 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74   the VTable that
12720 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
12730 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
12740 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67  connection doing
12750 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73   the preparing s
12760 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20  o as to use the 
12770 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74  correct.** sqlit
12780 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
12790 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  in the compiled 
127a0 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  query..**.** Whe
127b0 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54  n an in-memory T
127c0 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64  able object is d
127d0 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d  eleted (for exam
127e0 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  ple when the.** 
127f0 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20  schema is being 
12800 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d  reloaded for som
12810 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56  e reason), the V
12820 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72  Table objects ar
12830 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64  e not.** deleted
12840 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33   and the sqlite3
12850 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61  _vtab* handles a
12860 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65  re not xDisconne
12870 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69  ct()ed.** immedi
12880 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20  ately. Instead, 
12890 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66  they are moved f
128a0 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56  rom the Table.pV
128b0 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a  Table list to.**
128c0 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20   another linked 
128d0 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74  list headed by t
128e0 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  he sqlite3.pDisc
128f0 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66  onnect member of
12900 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
12910 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74  nding sqlite3 st
12920 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72  ructure. They ar
12930 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78  e then deleted/x
12940 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20  Disconnected.** 
12950 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74  next time a stat
12960 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65  ement is prepare
12970 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c  d using said sql
12980 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64  ite3*. This is d
12990 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  one.** to avoid 
129a0 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20  deadlock issues 
129b0 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70  involving multip
129c0 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  le sqlite3.mutex
129d0 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66   mutexes..** Ref
129e0 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61  er to comments a
129f0 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71  bove function sq
12a00 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
12a10 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20  ist() for an.** 
12a20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74  explanation as t
12a30 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65  o why it is safe
12a40 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79   to add an entry
12a50 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70   to an sqlite3.p
12a60 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69  Disconnect.** li
12a70 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69  st without holdi
12a80 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
12a90 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74  ding sqlite3.mut
12aa0 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20  ex mutex..**.** 
12ab0 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f  The memory for o
12ac0 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74  bjects of this t
12ad0 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c  ype is always al
12ae0 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73 71  located by.** sq
12af0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c  lite3DbMalloc(),
12b00 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65   using the conne
12b10 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f  ction handle sto
12b20 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62  red in VTable.db
12b30 20 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74   as.** the first
12b40 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
12b50 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20  ruct VTable {.  
12b60 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
12b70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
12b80 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12b90 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
12ba0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
12bb0 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20   Module *pMod;  
12bc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
12bd0 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20  inter to module 
12be0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
12bf0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /.  sqlite3_vtab
12c00 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a   *pVtab;      /*
12c10 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62   Pointer to vtab
12c20 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69   instance */.  i
12c30 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
12c40 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12c50 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
12c60 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
12c70 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72   */.  u8 bConstr
12c80 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  aint;           
12c90 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
12ca0 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f  raints are suppo
12cb0 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  rted */.  int iS
12cc0 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
12cd0 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20      /* Depth of 
12ce0 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74  the SAVEPOINT st
12cf0 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ack */.  VTable 
12d00 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
12d10 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
12d20 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61  nked list (see a
12d30 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  bove) */.};../*.
12d40 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f  ** The schema fo
12d50 72 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65  r each SQL table
12d60 20 61 6e 64 20 76 69 65 77 20 69 73 20 72 65 70   and view is rep
12d70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
12d80 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74  ry.** by an inst
12d90 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
12da0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
12db0 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65  .*/.struct Table
12dc0 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
12dd0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
12de0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  e of the table o
12df0 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75  r view */.  Colu
12e00 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20  mn *aCol;       
12e10 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
12e20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
12e30 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49  n */.  Index *pI
12e40 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c  ndex;       /* L
12e50 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78  ist of SQL index
12e60 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65  es on this table
12e70 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  . */.  Select *p
12e80 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e  Select;     /* N
12e90 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20  ULL for tables. 
12ea0 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e   Points to defin
12eb0 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e  ition if a view.
12ec0 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65   */.  FKey *pFKe
12ed0 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  y;         /* Li
12ee0 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c  nked list of all
12ef0 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e   foreign keys in
12f00 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
12f10 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
12f20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
12f30 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
12f40 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
12f50 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69  lumn */.  ExprLi
12f60 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f  st *pCheck;    /
12f70 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73  * All CHECK cons
12f80 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20  traints */.     
12f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fa0 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20    /*   ... also 
12fb0 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e  used as column n
12fc0 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49  ame list in a VI
12fd0 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  EW */.  int tnum
12fe0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
12ff0 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20  Root BTree page 
13000 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a  for this table *
13010 2f 0a 20 20 75 33 32 20 6e 54 61 62 52 65 66 3b  /.  u32 nTabRef;
13020 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13030 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
13040 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a  o this Table */.
13050 20 20 75 33 32 20 74 61 62 46 6c 61 67 73 3b 20    u32 tabFlags; 
13060 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
13070 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  f TF_* values */
13080 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20  .  i16 iPKey;   
13090 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
130a0 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20  t negative, use 
130b0 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74  aCol[iPKey] as t
130c0 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31  he rowid */.  i1
130d0 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  6 nCol;         
130e0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
130f0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
13100 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73  table */.  LogEs
13110 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  t nRowLogEst;   
13120 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77  /* Estimated row
13130 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f  s in table - fro
13140 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  m sqlite_stat1 t
13150 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  able */.  LogEst
13160 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f   szTabRow;     /
13170 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
13180 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72   of each table r
13190 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23  ow in bytes */.#
131a0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
131b0 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c  BLE_COSTMULT.  L
131c0 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20  ogEst costMult; 
131d0 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74      /* Cost mult
131e0 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67  iplier for using
131f0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23   this table */.#
13200 65 6e 64 69 66 0a 20 20 75 38 20 6b 65 79 43 6f  endif.  u8 keyCo
13210 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
13220 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61  What to do in ca
13230 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73  se of uniqueness
13240 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b   conflict on iPK
13250 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ey */.#ifndef SQ
13260 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
13270 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f  ABLE.  int addCo
13280 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f  lOffset;    /* O
13290 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20  ffset in CREATE 
132a0 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64  TABLE stmt to ad
132b0 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a  d a new column *
132c0 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
132d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
132e0 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
132f0 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20  nModuleArg;     
13300 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
13310 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d  guments to the m
13320 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  odule */.  char 
13330 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20  **azModuleArg;  
13340 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20  /* 0: module 1: 
13350 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e  schema 2: vtab n
13360 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a  ame 3...: args *
13370 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  /.  VTable *pVTa
13380 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74  ble;     /* List
13390 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63   of VTable objec
133a0 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ts. */.#endif.  
133b0 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
133c0 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  r;   /* List of 
133d0 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20  triggers stored 
133e0 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20  in pSchema */.  
133f0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
13400 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74       /* Schema t
13410 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69  hat contains thi
13420 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62  s table */.  Tab
13430 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b  le *pNextZombie;
13440 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65    /* Next on the
13450 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61   Parse.pZombieTa
13460 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  b list */.};../*
13470 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
13480 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62  es for Table.tab
13490 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f  Flags..**.** TF_
134a0 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65  OOOHidden applie
134b0 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76  s to tables or v
134c0 69 65 77 20 74 68 61 74 20 68 61 76 65 20 68 69  iew that have hi
134d0 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61  dden columns tha
134e0 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65  t are.** followe
134f0 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20  d by non-hidden 
13500 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c  columns.  Exampl
13510 65 3a 20 20 22 43 52 45 41 54 45 20 56 49 52 54  e:  "CREATE VIRT
13520 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e  UAL TABLE x USIN
13530 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44  G.** vtab1(a HID
13540 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63  DEN, b);".  Sinc
13550 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68  e "b" is a non-h
13560 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74  idden column but
13570 20 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a   "a" is hidden,.
13580 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64  ** the TF_OOOHid
13590 64 65 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f  den attribute wo
135a0 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69  uld apply in thi
135b0 73 20 63 61 73 65 2e 20 20 53 75 63 68 20 74 61  s case.  Such ta
135c0 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20  bles require.** 
135d0 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67  special handling
135e0 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70   during INSERT p
135f0 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64  rocessing..*/.#d
13600 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c  efine TF_Readonl
13610 79 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20  y        0x0001 
13620 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20     /* Read-only 
13630 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a  system table */.
13640 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d  #define TF_Ephem
13650 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 30 30  eral       0x000
13660 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d  2    /* An ephem
13670 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  eral table */.#d
13680 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d  efine TF_HasPrim
13690 61 72 79 4b 65 79 20 20 20 30 78 30 30 30 34 20  aryKey   0x0004 
136a0 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
136b0 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
136c0 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
136d0 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 30  increment   0x00
136e0 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72  08    /* Integer
136f0 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20   primary key is 
13700 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f  autoincrement */
13710 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 53  .#define TF_HasS
13720 74 61 74 31 20 20 20 20 20 20 20 20 30 78 30 30  tat1        0x00
13730 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67  10    /* nRowLog
13740 45 73 74 20 73 65 74 20 66 72 6f 6d 20 73 71 6c  Est set from sql
13750 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65  ite_stat1 */.#de
13760 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52  fine TF_WithoutR
13770 6f 77 69 64 20 20 20 20 30 78 30 30 32 30 20 20  owid    0x0020  
13780 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20    /* No rowid.  
13790 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74  PRIMARY KEY is t
137a0 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  he key */.#defin
137b0 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f  e TF_NoVisibleRo
137c0 77 69 64 20 20 30 78 30 30 34 30 20 20 20 20 2f  wid  0x0040    /
137d0 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c  * No user-visibl
137e0 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e  e "rowid" column
137f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f   */.#define TF_O
13800 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30  OOHidden       0
13810 78 30 30 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d  x0080    /* Out-
13820 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20  of-Order hidden 
13830 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69  columns */.#defi
13840 6e 65 20 54 46 5f 53 74 61 74 73 55 73 65 64 20  ne TF_StatsUsed 
13850 20 20 20 20 20 20 30 78 30 31 30 30 20 20 20 20        0x0100    
13860 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e 65 72  /* Query planner
13870 20 64 65 63 69 73 69 6f 6e 73 20 61 66 66 65 63   decisions affec
13880 74 65 64 20 62 79 0a 20 20 20 20 20 20 20 20 20  ted by.         
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138a0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 49              ** I
138b0 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74  ndex.aiRowLogEst
138c0 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65  [] values */.#de
138d0 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75  fine TF_HasNotNu
138e0 6c 6c 20 20 20 20 20 20 30 78 30 32 30 30 20 20  ll      0x0200  
138f0 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f    /* Contains NO
13900 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
13910 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73  ts */../*.** Tes
13920 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72  t to see whether
13930 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20   or not a table 
13940 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  is a virtual tab
13950 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20  le.  This is.** 
13960 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20  done as a macro 
13970 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20  so that it will 
13980 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74  be optimized out
13990 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a   when virtual.**
139a0 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69   table support i
139b0 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  s omitted from t
139c0 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66  he build..*/.#if
139d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
139e0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
139f0 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
13a00 6c 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e  l(X)      ((X)->
13a10 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65 6c 73  nModuleArg).#els
13a20 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  e.#  define IsVi
13a30 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a  rtual(X)      0.
13a40 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
13a50 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
13a60 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73  e if a column is
13a70 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69   hidden.  IsOrdi
13a80 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
13a90 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73  ().** only works
13aa0 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c   for non-virtual
13ab0 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72   tables (ordinar
13ac0 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65  y tables and vie
13ad0 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c  ws) and is.** al
13ae0 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73  ways false unles
13af0 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  s SQLITE_ENABLE_
13b00 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69  HIDDEN_COLUMNS i
13b10 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a  s defined.  The.
13b20 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ** IsHiddenColum
13b30 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e  n() macro is gen
13b40 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f  eral purpose..*/
13b50 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
13b60 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45  ITE_ENABLE_HIDDE
13b70 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65  N_COLUMNS).#  de
13b80 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
13b90 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28  umn(X)         (
13ba0 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
13bb0 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
13bc0 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
13bd0 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
13be0 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e  olumn(X) (((X)->
13bf0 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
13c00 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
13c10 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  elif !defined(SQ
13c20 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
13c30 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e  LTABLE).#  defin
13c40 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
13c50 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58  (X)         (((X
13c60 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
13c70 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
13c80 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  ).#  define IsOr
13c90 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
13ca0 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20  mn(X) 0.#else.# 
13cb0 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
13cc0 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20  Column(X)       
13cd0 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73    0.#  define Is
13ce0 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
13cf0 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66  lumn(X) 0.#endif
13d00 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74  .../* Does the t
13d10 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69  able have a rowi
13d20 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73  d */.#define Has
13d30 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28 28  Rowid(X)     (((
13d40 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
13d50 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d  F_WithoutRowid)=
13d60 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69  =0).#define Visi
13d70 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28 58  bleRowid(X) (((X
13d80 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
13d90 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29  _NoVisibleRowid)
13da0 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ==0)../*.** Each
13db0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
13dc0 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e  straint is an in
13dd0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
13de0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
13df0 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69  e..**.** A forei
13e00 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69  gn key is associ
13e10 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61  ated with two ta
13e20 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d  bles.  The "from
13e30 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  " table is.** th
13e40 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
13e50 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45  tains the REFERE
13e60 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74  NCES clause that
13e70 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72   creates the for
13e80 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68  eign.** key.  Th
13e90 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20  e "to" table is 
13ea0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
13eb0 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52  s named in the R
13ec0 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
13ed0 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68  ..** Consider th
13ee0 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a  is example:.**.*
13ef0 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
13f00 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20  LE ex1(.**      
13f10 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41   a INTEGER PRIMA
13f20 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20  RY KEY,.**      
13f30 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54   b INTEGER CONST
13f40 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45  RAINT fk1 REFERE
13f50 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20  NCES ex2(x).**  
13f60 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20     );.**.** For 
13f70 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31  foreign key "fk1
13f80 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ", the from-tabl
13f90 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74  e is "ex1" and t
13fa0 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22  he to-table is "
13fb0 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c  ex2"..** Equival
13fc0 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a  ent names:.**.**
13fd0 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20       from-table 
13fe0 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a  == child-table.*
13ff0 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65  *       to-table
14000 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65   == parent-table
14010 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45  .**.** Each REFE
14020 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65  RENCES clause ge
14030 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61  nerates an insta
14040 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
14050 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
14060 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63  * which is attac
14070 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d  hed to the from-
14080 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74  table.  The to-t
14090 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78  able need not ex
140a0 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  ist when.** the 
140b0 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72  from-table is cr
140c0 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73  eated.  The exis
140d0 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d  tence of the to-
140e0 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65  table is not che
140f0 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  cked..**.** The 
14100 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65  list of all pare
14110 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61  nts for child Ta
14120 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61 74  ble X is held at
14130 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20   X.pFKey..**.** 
14140 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68  A list of all ch
14150 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62  ildren for a tab
14160 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63  le named Z (whic
14170 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e  h might not even
14180 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65   exist).** is he
14190 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65  ld in Schema.fke
141a0 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61 73  yHash with a has
141b0 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73  h key of Z..*/.s
141c0 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54  truct FKey {.  T
141d0 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20  able *pFrom;    
141e0 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69   /* Table contai
141f0 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e  ning the REFEREN
14200 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a  CES clause (aka:
14210 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65   Child) */.  FKe
14220 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f  y *pNextFrom;  /
14230 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68  * Next FKey with
14240 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72   the same in pFr
14250 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20  om. Next parent 
14260 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68  of pFrom */.  ch
14270 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20  ar *zTo;        
14280 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65  /* Name of table
14290 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f   that the key po
142a0 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61  ints to (aka: Pa
142b0 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20  rent) */.  FKey 
142c0 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20  *pNextTo;    /* 
142d0 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73 61  Next with the sa
142e0 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69  me zTo. Next chi
142f0 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20  ld of zTo. */.  
14300 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20  FKey *pPrevTo;  
14310 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69    /* Previous wi
14320 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20  th the same zTo 
14330 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20  */.  int nCol;  
14340 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14350 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
14360 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20  his key */.  /* 
14370 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31  EV: R-30323-2191
14380 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65  7 */.  u8 isDefe
14390 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54  rred;       /* T
143a0 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
143b0 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65  t checking is de
143c0 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d  ferred till COMM
143d0 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69  IT */.  u8 aActi
143e0 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  on[2];        /*
143f0 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f   ON DELETE and O
14400 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73  N UPDATE actions
14410 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a  , respectively *
14420 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54  /.  Trigger *apT
14430 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69  rigger[2];/* Tri
14440 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f  ggers for aActio
14450 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  n[] actions */. 
14460 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20   struct sColMap 
14470 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e  {      /* Mappin
14480 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  g of columns in 
14490 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73  pFrom to columns
144a0 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69   in zTo */.    i
144b0 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  nt iFrom;       
144c0 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
144d0 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d   column in pFrom
144e0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43   */.    char *zC
144f0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ol;           /*
14500 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20   Name of column 
14510 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c  in zTo.  If NULL
14520 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59   use PRIMARY KEY
14530 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b   */.  } aCol[1];
14540 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
14550 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
14560 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e  h of nCol column
14570 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  s */.};../*.** S
14580 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d  QLite supports m
14590 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
145a0 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20  ys to resolve a 
145b0 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
145c0 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70  ror.  ROLLBACK p
145d0 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
145e0 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e  that a constrain
145f0 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63  t violation.** c
14600 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74  auses the operat
14610 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74  ion in process t
14620 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74  o fail and for t
14630 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
14640 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20  action.** to be 
14650 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42  rolled back.  AB
14660 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ORT processing m
14670 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69  eans the operati
14680 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a  on in process.**
14690 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70   fails and any p
146a0 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f  rior changes fro
146b0 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61  m that one opera
146c0 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20  tion are backed 
146d0 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20  out,.** but the 
146e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
146f0 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  ot rolled back. 
14700 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67   FAIL processing
14710 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74   means that.** t
14720 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
14730 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61  progress stops a
14740 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72  nd returns an er
14750 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70  ror code.  But p
14760 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20  rior.** changes 
14770 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20  due to the same 
14780 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f  operation are no
14790 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64  t backed out and
147a0 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   no rollback.** 
147b0 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20  occurs.  IGNORE 
147c0 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70  means that the p
147d0 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68  articular row th
147e0 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f  at caused the co
147f0 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
14800 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65  r is not inserte
14810 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50  d or updated.  P
14820 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
14830 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
14840 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e  .** is returned.
14850 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20    REPLACE means 
14860 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67  that preexisting
14870 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
14880 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20  hat caused.** a 
14890 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
148a0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
148b0 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20  removed so that 
148c0 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f  the new insert o
148d0 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20  r.** update can 
148e0 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73  proceed.  Proces
148f0 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
14900 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72  nd no error is r
14910 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52  eported..**.** R
14920 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c  ESTRICT, SETNULL
14930 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63  , and CASCADE ac
14940 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79  tions apply only
14950 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73   to foreign keys
14960 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73  ..** RESTRICT is
14970 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f   the same as ABO
14980 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  RT for IMMEDIATE
14990 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e   foreign keys an
149a0 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73  d the.** same as
149b0 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45   ROLLBACK for DE
149c0 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45  FERRED keys.  SE
149d0 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74  TNULL means that
149e0 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
149f0 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55  key is set to NU
14a00 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61  LL.  CASCADE mea
14a10 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45  ns that a DELETE
14a20 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68   or UPDATE of th
14a30 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20  e.** referenced 
14a40 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f  table row is pro
14a50 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65  pagated into the
14a60 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20   row that holds 
14a70 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b  the.** foreign k
14a80 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f  ey..**.** The fo
14a90 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63  llowing symbolic
14aa0 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64   values are used
14ab0 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68   to record which
14ac0 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69   type.** of acti
14ad0 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23  on to take..*/.#
14ae0 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20  define OE_None  
14af0 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20     0   /* There 
14b00 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74  is no constraint
14b10 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65   to check */.#de
14b20 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  fine OE_Rollback
14b30 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65   1   /* Fail the
14b40 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72   operation and r
14b50 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
14b60 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
14b70 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32  ne OE_Abort    2
14b80 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63     /* Back out c
14b90 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f  hanges but do no
14ba0 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61   rollback transa
14bb0 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
14bc0 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20   OE_Fail     3  
14bd0 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65   /* Stop the ope
14be0 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65  ration but leave
14bf0 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67   all prior chang
14c00 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  es */.#define OE
14c10 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a  _Ignore   4   /*
14c20 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f   Ignore the erro
14c30 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65  r. Do not do the
14c40 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
14c50 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  E */.#define OE_
14c60 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20  Replace  5   /* 
14c70 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20  Delete existing 
14c80 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20  record, then do 
14c90 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
14ca0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 55   */.#define OE_U
14cb0 70 64 61 74 65 20 20 20 36 20 20 20 2f 2a 20 50  pdate   6   /* P
14cc0 72 6f 63 65 73 73 20 61 73 20 61 20 44 4f 20 55  rocess as a DO U
14cd0 50 44 41 54 45 20 69 6e 20 61 6e 20 75 70 73 65  PDATE in an upse
14ce0 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  rt */.#define OE
14cf0 5f 52 65 73 74 72 69 63 74 20 37 20 20 20 2f 2a  _Restrict 7   /*
14d00 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d   OE_Abort for IM
14d10 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c  MEDIATE, OE_Roll
14d20 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45  back for DEFERRE
14d30 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  D */.#define OE_
14d40 53 65 74 4e 75 6c 6c 20 20 38 20 20 20 2f 2a 20  SetNull  8   /* 
14d50 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
14d60 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  key value to NUL
14d70 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  L */.#define OE_
14d80 53 65 74 44 66 6c 74 20 20 39 20 20 20 2f 2a 20  SetDflt  9   /* 
14d90 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
14da0 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73  key value to its
14db0 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66   default */.#def
14dc0 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20  ine OE_Cascade  
14dd0 31 30 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74  10  /* Cascade t
14de0 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  he changes */.#d
14df0 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74  efine OE_Default
14e00 20 20 31 31 20 20 2f 2a 20 44 6f 20 77 68 61 74    11  /* Do what
14e10 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74  ever the default
14e20 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a   action is */...
14e30 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
14e40 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
14e50 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
14e60 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 69  passed as the fi
14e70 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
14e80 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65  to sqlite3VdbeKe
14e90 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20  yCompare and is 
14ea0 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20  used to control 
14eb0 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  the.** compariso
14ec0 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64  n of the two ind
14ed0 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e  ex keys..**.** N
14ee0 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72  ote that aSortOr
14ef0 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b  der[] and aColl[
14f00 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20  ] have nField+1 
14f10 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a  slots.  There.**
14f20 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74   are nField slot
14f30 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  s for the column
14f40 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68  s of an index th
14f50 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f  en one extra slo
14f60 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77  t.** for the row
14f70 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  id at the end..*
14f80 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  /.struct KeyInfo
14f90 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20   {.  u32 nRef;  
14fa0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14fb0 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73  er of references
14fc0 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f   to this KeyInfo
14fd0 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20   object */.  u8 
14fe0 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
14ff0 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
15000 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53  g - one of the S
15010 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65  QLITE_UTF* value
15020 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 46  s */.  u16 nKeyF
15030 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ield;      /* Nu
15040 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75  mber of key colu
15050 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  mns in the index
15060 20 2a 2f 0a 20 20 75 31 36 20 6e 41 6c 6c 46 69   */.  u16 nAllFi
15070 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 54 6f 74  eld;      /* Tot
15080 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 63 6c  al columns, incl
15090 75 64 69 6e 67 20 6b 65 79 20 70 6c 75 73 20 6f  uding key plus o
150a0 74 68 65 72 73 20 2a 2f 0a 20 20 73 71 6c 69 74  thers */.  sqlit
150b0 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
150c0 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63  * The database c
150d0 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75  onnection */.  u
150e0 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
150f0 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72     /* Sort order
15100 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
15110 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  . */.  CollSeq *
15120 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f  aColl[1];  /* Co
15130 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
15140 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f   for each term o
15150 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a  f the key */.};.
15160 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65  ./*.** This obje
15170 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72  ct holds a recor
15180 64 20 77 68 69 63 68 20 68 61 73 20 62 65 65 6e  d which has been
15190 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f   parsed out into
151a0 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66   individual.** f
151b0 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70  ields, for the p
151c0 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67  urposes of doing
151d0 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a   a comparison..*
151e0 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73  *.** A record is
151f0 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20   an object that 
15200 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
15210 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64  more fields of d
15220 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20  ata..** Records 
15230 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  are used to stor
15240 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
15250 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64   a table row and
15260 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65   to store.** the
15270 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78   key of an index
15280 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69  .  A blob encodi
15290 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69  ng of a record i
152a0 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20  s created by.** 
152b0 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  the OP_MakeRecor
152c0 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20  d opcode of the 
152d0 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61  VDBE and is disa
152e0 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a  ssembled by the.
152f0 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  ** OP_Column opc
15300 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e  ode..**.** An in
15310 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
15320 62 6a 65 63 74 20 73 65 72 76 65 73 20 61 73 20  bject serves as 
15330 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e  a "key" for doin
15340 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a  g a search on.**
15350 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65   an index b+tree
15360 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68  . The goal of th
15370 65 20 73 65 61 72 63 68 20 69 73 20 74 6f 20 66  e search is to f
15380 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74 68  ind the entry th
15390 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20  at.** is closed 
153a0 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63 72  to the key descr
153b0 69 62 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a  ibed by this obj
153c0 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63  ect.  This objec
153d0 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20  t might hold.** 
153e0 6a 75 73 74 20 61 20 70 72 65 66 69 78 20 6f 66  just a prefix of
153f0 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e   the key.  The n
15400 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
15410 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70  is given by.** p
15420 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e  KeyInfo->nField.
15430 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e  .**.** The r1 an
15440 64 20 72 32 20 66 69 65 6c 64 73 20 61 72 65 20  d r2 fields are 
15450 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65  the values to re
15460 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79  turn if this key
15470 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a   is less than.**
15480 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
15490 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74   a key in the bt
154a0 72 65 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ree, respectivel
154b0 79 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f  y.  These are no
154c0 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64  rmally.** -1 and
154d0 20 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c 79   +1 respectively
154e0 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65 20 69  , but might be i
154f0 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e  nverted to +1 an
15500 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72  d -1 if the b-tr
15510 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43  ee.** is in DESC
15520 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68   order..**.** Th
15530 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e  e key comparison
15540 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61   functions actua
15550 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61 75  lly return defau
15560 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20  lt_rc when they 
15570 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c  find.** an equal
15580 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64  s comparison.  d
15590 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65  efault_rc can be
155a0 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20   -1, 0, or +1.  
155b0 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20  If there are.** 
155c0 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73  multiple entries
155d0 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77   in the b-tree w
155e0 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79  ith the same key
155f0 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b   (when only look
15600 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69  ing.** at the fi
15610 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  rst pKeyInfo->nF
15620 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66  ields,) then def
15630 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73  ault_rc can be s
15640 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63  et to -1 to.** c
15650 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
15660 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74  to find the last
15670 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f   match, or +1 to
15680 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63   cause the searc
15690 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65  h to.** find the
156a0 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a   first match..**
156b0 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70  .** The key comp
156c0 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  arison functions
156d0 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e   will set eqSeen
156e0 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 79   to true if they
156f0 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64   ever.** get and
15700 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77   equal results w
15710 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68  hen comparing th
15720 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  is structure to 
15730 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e  a b-tree record.
15740 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74  .** When default
15750 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72  _rc!=0, the sear
15760 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20  ch might end up 
15770 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d  on the record im
15780 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66  mediately.** bef
15790 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d 61  ore the first ma
157a0 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65  tch or immediate
157b0 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61 73  ly after the las
157c0 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a  t match.  The.**
157d0 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69   eqSeen field wi
157e0 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65 74  ll indicate whet
157f0 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78  her or not an ex
15800 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74 73  act match exists
15810 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65   in the.** b-tre
15820 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70  e..*/.struct Unp
15830 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20  ackedRecord {.  
15840 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
15850 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e  o;  /* Collation
15860 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20   and sort-order 
15870 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20  information */. 
15880 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20   Mem *aMem;     
15890 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a       /* Values *
158a0 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20  /.  u16 nField; 
158b0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
158c0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
158d0 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20  apMem[] */.  i8 
158e0 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20  default_rc;     
158f0 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72   /* Comparison r
15900 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72  esult if keys ar
15910 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20  e equal */.  u8 
15920 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
15930 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74   /* Error detect
15940 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d  ed by xRecordCom
15950 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72  pare (CORRUPT or
15960 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20   NOMEM) */.  i8 
15970 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r1;             
15980 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
15990 75 72 6e 20 69 66 20 28 6c 68 73 20 3c 20 72 68  urn if (lhs < rh
159a0 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20  s) */.  i8 r2;  
159b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
159c0 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69  alue to return i
159d0 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f  f (lhs > rhs) */
159e0 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20  .  u8 eqSeen;   
159f0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
15a00 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f  f an equality co
15a10 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65  mparison has bee
15a20 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f  n seen */.};.../
15a30 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e  *.** Each SQL in
15a40 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74  dex is represent
15a50 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
15a60 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
15a70 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
15a80 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
15a90 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   The columns of 
15aa0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
15ab0 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  re to be indexed
15ac0 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a   are described.*
15ad0 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d  * by the aiColum
15ae0 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69  n[] field of thi
15af0 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  s structure.  Fo
15b00 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
15b10 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68  se.** we have th
15b20 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
15b30 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a  e and index:.**.
15b40 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
15b50 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20  BLE Ex1(c1 int, 
15b60 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29  c2 int, c3 text)
15b70 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  ;.**     CREATE 
15b80 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31  INDEX Ex2 ON Ex1
15b90 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49  (c3,c1);.**.** I
15ba0 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75  n the Table stru
15bb0 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
15bc0 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65   Ex1, nCol==3 be
15bd0 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a  cause there are.
15be0 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73  ** three columns
15bf0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
15c00 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72  In the Index str
15c10 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
15c20 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d  g.** Ex2, nColum
15c30 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20  n==2 since 2 of 
15c40 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  the 3 columns of
15c50 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64   Ex1 are indexed
15c60 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
15c70 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32  f aiColumn is {2
15c80 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b  , 0}.  aiColumn[
15c90 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68  0]==2 because th
15ca0 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d  e.** first colum
15cb0 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
15cc0 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c3) has an inde
15cd0 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43  x of 2 in Ex1.aC
15ce0 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63  ol[]..** The sec
15cf0 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  ond column to be
15d00 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61   indexed (c1) ha
15d10 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20  s an index of 0 
15d20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d  in.** Ex1.aCol[]
15d30 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f  , hence Ex2.aiCo
15d40 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a  lumn[1]==0..**.*
15d50 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72  * The Index.onEr
15d60 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d  ror field determ
15d70 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20  ines whether or 
15d80 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20  not the indexed 
15d90 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20  columns.** must 
15da0 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68  be unique and wh
15db0 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79  at to do if they
15dc0 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20   are not.  When 
15dd0 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45  Index.onError=OE
15de0 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61  _None,.** it mea
15df0 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61  ns this is not a
15e00 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20   unique index.  
15e10 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  Otherwise it is 
15e20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a  a unique index.*
15e30 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  * and the value 
15e40 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  of Index.onError
15e50 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68   indicate the wh
15e60 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ich conflict res
15e70 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72  olution.** algor
15e80 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77  ithm to employ w
15e90 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d  henever an attem
15ea0 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e  pt is made to in
15eb0 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75  sert a non-uniqu
15ec0 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a  e.** element..**
15ed0 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e  .** While parsin
15ee0 67 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  g a CREATE TABLE
15ef0 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45 58   or CREATE INDEX
15f00 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72   statement in or
15f10 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61  der to.** genera
15f20 74 65 20 56 44 42 45 20 63 6f 64 65 20 28 61 73  te VDBE code (as
15f30 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73   opposed to pars
15f40 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f  ing one read fro
15f50 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74  m an sqlite_mast
15f60 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70  er.** table as p
15f70 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61  art of parsing a
15f80 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  n existing datab
15f90 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61  ase schema), tra
15fa0 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73  nsient instances
15fb0 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
15fc0 63 74 75 72 65 20 6d 61 79 20 62 65 20 63 72 65  cture may be cre
15fd0 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ated. In this ca
15fe0 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75  se the Index.tnu
15ff0 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a  m variable is.**
16000 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
16010 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
16020 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e  VDBE instruction
16030 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65  , not a database
16040 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20   page.** number 
16050 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65  (it cannot - the
16060 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 69   database page i
16070 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20  s not allocated 
16080 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a  until the VDBE.*
16090 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65  * program is exe
160a0 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76  cuted). See conv
160b0 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69  ertToWithoutRowi
160c0 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74  dTable() for det
160d0 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ails..*/.struct 
160e0 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a  Index {.  char *
160f0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
16100 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
16110 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31  is index */.  i1
16120 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  6 *aiColumn;    
16130 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
16140 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
16150 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20   by this index. 
16160 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c   1st is 0 */.  L
16170 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45  ogEst *aiRowLogE
16180 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20  st;     /* From 
16190 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f  ANALYZE: Est. ro
161a0 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65  ws selected by e
161b0 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
161c0 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20  Table *pTable;  
161d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
161e0 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20  SQL table being 
161f0 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61  indexed */.  cha
16200 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
16210 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
16220 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
16230 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
16240 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
16250 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
16260 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69     /* The next i
16270 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20  ndex associated 
16280 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61  with the same ta
16290 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ble */.  Schema 
162a0 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
162b0 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
162c0 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65  aining this inde
162d0 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  x */.  u8 *aSort
162e0 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
162f0 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* for each colu
16300 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20  mn: True==DESC, 
16310 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20  False==ASC */.  
16320 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43  const char **azC
16330 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oll;     /* Arra
16340 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  y of collation s
16350 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f  equence names fo
16360 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70  r index */.  Exp
16370 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72 65  r *pPartIdxWhere
16380 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63  ;     /* WHERE c
16390 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61  lause for partia
163a0 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45  l indices */.  E
163b0 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70  xprList *aColExp
163c0 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  r;      /* Colum
163d0 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  n expressions */
163e0 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
163f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
16400 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e  B Page containin
16410 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69  g root of this i
16420 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  ndex */.  LogEst
16430 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20   szIdxRow;      
16440 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
16450 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65  average row size
16460 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
16470 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20  16 nKeyCol;     
16480 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16490 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72  r of columns for
164a0 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a  ming the key */.
164b0 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20    u16 nColumn;  
164c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
164d0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
164e0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e  stored in the in
164f0 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72  dex */.  u8 onEr
16500 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ror;            
16510 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f    /* OE_Abort, O
16520 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70  E_Ignore, OE_Rep
16530 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65  lace, or OE_None
16540 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
16550 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f  dxType:2;      /
16560 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d  * 1==UNIQUE, 2==
16570 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d  PRIMARY KEY, 0==
16580 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
16590 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72    unsigned bUnor
165a0 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73  dered:1;   /* Us
165b0 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72  e this index for
165c0 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65   == or IN querie
165d0 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69  s only */.  unsi
165e0 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c  gned uniqNotNull
165f0 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
16600 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e  UNIQUE and NOT N
16610 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75  ULL for all colu
16620 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  mns */.  unsigne
16630 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20  d isResized:1;  
16640 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
16650 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29  izeIndexObject()
16660 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
16670 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
16680 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f  sCovering:1;   /
16690 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69  * True if this i
166a0 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  s a covering ind
166b0 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ex */.  unsigned
166c0 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20   noSkipScan:1;  
166d0 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74   /* Do not try t
166e0 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20  o use skip-scan 
166f0 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73  if true */.  uns
16700 69 67 6e 65 64 20 68 61 73 53 74 61 74 31 3a 31  igned hasStat1:1
16710 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f  ;     /* aiRowLo
16720 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f 6d 65  gEst values come
16730 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
16740 74 31 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  t1 */.  unsigned
16750 20 62 4e 6f 51 75 65 72 79 3a 31 3b 20 20 20 20   bNoQuery:1;    
16760 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 74   /* Do not use t
16770 68 69 73 20 69 6e 64 65 78 20 74 6f 20 6f 70 74  his index to opt
16780 69 6d 69 7a 65 20 71 75 65 72 69 65 73 20 2a 2f  imize queries */
16790 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
167a0 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
167b0 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70  TAT4.  int nSamp
167c0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
167d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65  /* Number of ele
167e0 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65  ments in aSample
167f0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d  [] */.  int nSam
16800 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  pleCol;         
16810 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65   /* Size of Inde
16820 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61  xSample.anEq[] a
16830 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52  nd so on */.  tR
16840 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20  owcnt *aAvgEq;  
16850 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67         /* Averag
16860 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72  e nEq values for
16870 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61   keys not in aSa
16880 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53  mple */.  IndexS
16890 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20  ample *aSample; 
168a0 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66     /* Samples of
168b0 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b   the left-most k
168c0 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  ey */.  tRowcnt 
168d0 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20  *aiRowEst;      
168e0 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68   /* Non-logarith
168f0 6d 69 63 20 73 74 61 74 31 20 64 61 74 61 20 66  mic stat1 data f
16900 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  or this index */
16910 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45  .  tRowcnt nRowE
16920 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  st0;        /* N
16930 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e  on-logarithmic n
16940 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
16950 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65   the index */.#e
16960 6e 64 69 66 0a 20 20 42 69 74 6d 61 73 6b 20 63  ndif.  Bitmask c
16970 6f 6c 4e 6f 74 49 64 78 65 64 3b 20 20 20 20 20  olNotIdxed;     
16980 2f 2a 20 30 20 66 6f 72 20 75 6e 69 6e 64 65 78  /* 0 for unindex
16990 65 64 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 54  ed columns in pT
169a0 61 62 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ab */.};../*.** 
169b0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
169c0 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65  or Index.idxType
169d0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
169e0 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45  TE_IDXTYPE_APPDE
169f0 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72  F      0   /* Cr
16a00 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41  eated using CREA
16a10 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66  TE INDEX */.#def
16a20 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
16a30 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31  PE_UNIQUE      1
16a40 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73     /* Implements
16a50 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
16a60 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
16a70 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50  SQLITE_IDXTYPE_P
16a80 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f  RIMARYKEY  2   /
16a90 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41 52 59  * Is the PRIMARY
16aa0 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62   KEY for the tab
16ab0 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e  le */../* Return
16ac0 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58   true if index X
16ad0 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45   is a PRIMARY KE
16ae0 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  Y index */.#defi
16af0 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49  ne IsPrimaryKeyI
16b00 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69  ndex(X)  ((X)->i
16b10 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49  dxType==SQLITE_I
16b20 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45  DXTYPE_PRIMARYKE
16b30 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72  Y)../* Return tr
16b40 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73  ue if index X is
16b50 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20   a UNIQUE index 
16b60 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e 69  */.#define IsUni
16b70 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20 20  queIndex(X)     
16b80 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d   ((X)->onError!=
16b90 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65  OE_None)../* The
16ba0 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b   Index.aiColumn[
16bb0 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 72  ] values are nor
16bc0 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65 20 69  mally positive i
16bd0 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a 20  nteger.  But.** 
16be0 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20 6e  there are some n
16bf0 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 74  egative values t
16c00 68 61 74 20 68 61 76 65 20 73 70 65 63 69 61 6c  hat have special
16c10 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65   meaning:.*/.#de
16c20 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20 20  fine XN_ROWID   
16c30 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20 49 6e    (-1)     /* In
16c40 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  dexed column is 
16c50 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  the rowid */.#de
16c60 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20 20 20  fine XN_EXPR    
16c70 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20 49 6e    (-2)     /* In
16c80 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  dexed column is 
16c90 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  an expression */
16ca0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d  ../*.** Each sam
16cb0 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  ple stored in th
16cc0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
16cd0 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e  able is represen
16ce0 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a  ted in memory.**
16cf0 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74 75   using a structu
16d00 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e  re of this type.
16d10 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74    See documentat
16d20 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f  ion at the top o
16d30 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65  f the.** analyze
16d40 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66  .c source file f
16d50 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
16d60 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
16d70 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65  ruct IndexSample
16d80 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20   {.  void *p;   
16d90 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
16da0 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63  r to sampled rec
16db0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20  ord */.  int n; 
16dc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
16dd0 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20  ze of record in 
16de0 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63  bytes */.  tRowc
16df0 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20  nt *anEq;    /* 
16e00 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
16e10 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65  ows where the ke
16e20 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61  y equals this sa
16e30 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
16e40 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45  t *anLt;    /* E
16e50 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
16e60 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20  ws where key is 
16e70 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
16e80 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
16e90 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20  nt *anDLt;   /* 
16ea0 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64  Est. number of d
16eb0 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73  istinct keys les
16ec0 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
16ed0 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
16ee0 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e  Each token comin
16ef0 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78  g out of the lex
16f00 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  er is an instanc
16f10 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72  e of.** this str
16f20 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20  ucture.  Tokens 
16f30 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73  are also used as
16f40 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72   part of an expr
16f50 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  ession..**.** Th
16f60 65 20 6d 65 6d 6f 72 79 20 74 68 61 74 20 22 7a  e memory that "z
16f70 22 20 70 6f 69 6e 74 73 20 74 6f 20 69 73 20 6f  " points to is o
16f80 77 6e 65 64 20 62 79 20 6f 74 68 65 72 20 6f 62  wned by other ob
16f90 6a 65 63 74 73 2e 20 20 54 61 6b 65 20 63 61 72  jects.  Take car
16fa0 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 77  e.** that the ow
16fb0 6e 65 72 20 6f 66 20 74 68 65 20 22 7a 22 20 73  ner of the "z" s
16fc0 74 72 69 6e 67 20 64 6f 65 73 20 6e 6f 74 20 64  tring does not d
16fd0 65 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 73 74  eallocate the st
16fe0 72 69 6e 67 20 62 65 66 6f 72 65 0a 2a 2a 20 74  ring before.** t
16ff0 68 65 20 54 6f 6b 65 6e 20 67 6f 65 73 20 6f 75  he Token goes ou
17000 74 20 6f 66 20 73 63 6f 70 65 21 20 20 56 65 72  t of scope!  Ver
17010 79 20 6f 66 74 65 6e 2c 20 74 68 65 20 22 7a 22  y often, the "z"
17020 20 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65 20   points to some 
17030 70 6c 61 63 65 0a 2a 2a 20 69 6e 20 74 68 65 20  place.** in the 
17040 6d 69 64 64 6c 65 20 6f 66 20 74 68 65 20 50 61  middle of the Pa
17050 72 73 65 2e 7a 53 71 6c 20 74 65 78 74 2e 20 20  rse.zSql text.  
17060 42 75 74 20 69 74 20 6d 69 67 68 74 20 61 6c 73  But it might als
17070 6f 20 70 6f 69 6e 74 20 74 6f 20 61 0a 2a 2a 20  o point to a.** 
17080 73 74 61 74 69 63 20 73 74 72 69 6e 67 2e 0a 2a  static string..*
17090 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b  /.struct Token {
170a0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
170b0 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  ;     /* Text of
170c0 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74   the token.  Not
170d0 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64   NULL-terminated
170e0 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  ! */.  unsigned 
170f0 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d  int n;    /* Num
17100 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
17110 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20  s in this token 
17120 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
17130 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
17140 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
17150 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
17160 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
17170 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61  te.** code for a
17180 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e   SELECT that con
17190 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
171a0 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
171b0 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f   If Expr.op==TK_
171c0 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b  AGG_COLUMN or TK
171d0 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68  _AGG_FUNCTION th
171e0 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f  en Expr.pAggInfo
171f0 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
17200 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
17210 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43  re.  The Expr.iC
17220 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74  olumn field is t
17230 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41  he index in.** A
17240 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72  ggInfo.aCol[] or
17250 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d   AggInfo.aFunc[]
17260 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
17270 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
17280 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74  te.** code for t
17290 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  hat node..**.** 
172a0 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79  AggInfo.pGroupBy
172b0 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75   and AggInfo.aFu
172c0 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74  nc.pExpr point t
172d0 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20  o fields within 
172e0 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
172f0 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65  Select structure
17300 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
17310 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
17320 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20  ment.  These.** 
17330 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65  fields do not ne
17340 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77  ed to be freed w
17350 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  hen deallocating
17360 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72   the AggInfo str
17370 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
17380 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38  t AggInfo {.  u8
17390 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20   directMode;    
173a0 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20        /* Direct 
173b0 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d  rendering mode m
173c0 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64  eans take data d
173d0 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20  irectly.        
173e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173f0 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65    ** from source
17400 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74   tables rather t
17410 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c  han from accumul
17420 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73  ators */.  u8 us
17430 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20  eSortingIdx;    
17440 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20     /* In direct 
17450 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20  mode, reference 
17460 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
17470 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20  x rather.       
17480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17490 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73     ** than the s
174a0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
174b0 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b   int sortingIdx;
174c0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
174d0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
174e0 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
174f0 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
17500 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43  dxPTab;     /* C
17510 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
17520 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a  pseudo-table */.
17530 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f    int nSortingCo
17540 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  lumn;     /* Num
17550 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
17560 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
17570 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  dex */.  int mnR
17580 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20  eg, mxReg;      
17590 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67   /* Range of reg
175a0 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
175b0 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46   for aCol and aF
175c0 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  unc */.  ExprLis
175d0 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
175e0 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79   /* The group by
175f0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72   clause */.  str
17600 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20  uct AggInfo_col 
17610 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68  {    /* For each
17620 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20   column used in 
17630 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f  source tables */
17640 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
17650 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
17660 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   Source table */
17670 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
17680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17690 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
176a0 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  f the source tab
176b0 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  le */.    int iC
176c0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
176d0 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
176e0 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73  ber within the s
176f0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
17700 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f     int iSorterCo
17710 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43  lumn;       /* C
17720 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
17730 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
17740 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  x */.    int iMe
17750 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
17760 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
17770 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
17780 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
17790 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
177a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
177b0 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78   The original ex
177c0 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20  pression */.  } 
177d0 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f  *aCol;.  int nCo
177e0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
177f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
17800 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  ed entries in aC
17810 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  ol[] */.  int nA
17820 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20  ccumulator;     
17830 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
17840 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77  olumns that show
17850 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
17860 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20  output..        
17870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17880 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20    ** Additional 
17890 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
178a0 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74   only as paramet
178b0 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20  ers to.         
178c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178d0 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75   ** aggregate fu
178e0 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  nctions */.  str
178f0 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63  uct AggInfo_func
17900 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68   {   /* For each
17910 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
17920 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ion */.    Expr 
17930 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
17940 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
17950 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66  n encoding the f
17960 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46  unction */.    F
17970 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
17980 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
17990 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
179a0 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
179b0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
179c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
179d0 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
179e0 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
179f0 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
17a00 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63      int iDistinc
17a10 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
17a20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  Ephemeral table 
17a30 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20  used to enforce 
17a40 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20  DISTINCT */.  } 
17a50 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46  *aFunc;.  int nF
17a60 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
17a70 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
17a80 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b  ntries in aFunc[
17a90 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ] */.};../*.** T
17aa0 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61  he datatype ynVa
17ab0 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  r is a signed in
17ac0 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36  teger, either 16
17ad0 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a  -bit or 32-bit..
17ae0 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73  ** Usually it is
17af0 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69   16-bits.  But i
17b00 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
17b10 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20  IABLE_NUMBER is 
17b20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
17b30 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f  32767 we have to
17b40 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e   make it 32-bit.
17b50 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66    16-bit is pref
17b60 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a  erred because.**
17b70 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65   it uses less me
17b80 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72  mory in the Expr
17b90 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69   object, which i
17ba0 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75  s a big memory u
17bb0 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d  ser.** in system
17bc0 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70  s with lots of p
17bd0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
17be0 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70  ts.  And few app
17bf0 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65  lications.** nee
17c00 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75  d more than abou
17c10 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61  t 10 or 20 varia
17c20 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20  bles.  But some 
17c30 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61  extreme users wa
17c40 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72  nt.** to have pr
17c50 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
17c60 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36  s with over 3276
17c70 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64  7 variables, and
17c80 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65   for them.** the
17c90 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c   option is avail
17ca0 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65  able (at compile
17cb0 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53  -time)..*/.#if S
17cc0 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
17cd0 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37  LE_NUMBER<=32767
17ce0 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56  .typedef i16 ynV
17cf0 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65  ar;.#else.typede
17d00 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e  f int ynVar;.#en
17d10 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  dif../*.** Each 
17d20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65  node of an expre
17d30 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ssion in the par
17d40 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e  se tree is an in
17d50 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
17d60 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  s structure..**.
17d70 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68  ** Expr.op is th
17d80 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e  e opcode. The in
17d90 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
17da0 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
17db0 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
17dc0 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d  s here. For exam
17dd0 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
17de0 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
17df0 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
17e00 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
17e10 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
17e20 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65  rator. This same
17e30 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73   integer code is
17e40 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65   reused.** to re
17e50 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61  present the grea
17e60 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61  ter-than-or-equa
17e70 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e  l-to operator in
17e80 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
17e90 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  ** tree..**.** I
17ea0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
17eb0 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   is an SQL liter
17ec0 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20  al (TK_INTEGER, 
17ed0 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f  TK_FLOAT, TK_BLO
17ee0 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49  B,.** or TK_STRI
17ef0 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  NG), then Expr.t
17f00 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
17f10 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51  e text of the SQ
17f20 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a  L literal. If.**
17f30 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
17f40 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54  is a variable (T
17f50 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65  K_VARIABLE), the
17f60 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
17f70 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61 72  tains the.** var
17f80 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61  iable name. Fina
17f90 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72  lly, if the expr
17fa0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
17fb0 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55   function (TK_FU
17fc0 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e  NCTION),.** then
17fd0 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
17fe0 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ains the name of
17ff0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a   the function..*
18000 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74  *.** Expr.pRight
18010 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20   and Expr.pLeft 
18020 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64  are the left and
18030 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73   right subexpres
18040 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69  sions of a.** bi
18050 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45  nary operator. E
18060 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61  ither or both ma
18070 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  y be NULL..**.**
18080 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
18090 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d   a list of argum
180a0 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72  ents if the expr
180b0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
180c0 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20   function,.** a 
180d0 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
180e0 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73  or an IN express
180f0 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
18100 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20  "<lhs> IN (<y>, 
18110 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70  <z>...)"..** Exp
18120 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75  r.x.pSelect is u
18130 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65  sed if the expre
18140 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73  ssion is a sub-s
18150 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72  elect or an expr
18160 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  ession of.** the
18170 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
18180 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49  (SELECT ...)". I
18190 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65  f the EP_xIsSele
181a0 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e  ct bit is set in
181b0 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61   the.** Expr.fla
181c0 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78  gs mask, then Ex
181d0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
181e0 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65  valid. Otherwise
181f0 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  , Expr.x.pList i
18200 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a  s.** valid..**.*
18210 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  * An expression 
18220 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f  of the form ID o
18230 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74  r ID.ID refers t
18240 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20  o a column in a 
18250 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75  table..** For su
18260 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20  ch expressions, 
18270 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74  Expr.op is set t
18280 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  o TK_COLUMN and 
18290 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a  Expr.iTable is.*
182a0 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75  * the integer cu
182b0 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61  rsor number of a
182c0 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69   VDBE cursor poi
182d0 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61  nting to that ta
182e0 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e  ble and.** Expr.
182f0 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63  iColumn is the c
18300 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72  olumn number for
18310 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f   the specific co
18320 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  lumn.  If the.**
18330 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75   expression is u
18340 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  sed as a result 
18350 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  in an aggregate 
18360 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65  SELECT, then the
18370 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73  .** value is als
18380 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  o stored in the 
18390 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e  Expr.iAgg column
183a0 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74   in the aggregat
183b0 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20  e so that.** it 
183c0 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20  can be accessed 
183d0 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67  after all aggreg
183e0 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65  ates are compute
183f0 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
18400 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
18410 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c   unbound variabl
18420 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73  e marker (a ques
18430 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68 61  tion mark.** cha
18440 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68  racter '?' in th
18450 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20  e original SQL) 
18460 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54  then the Expr.iT
18470 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69  able holds the i
18480 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20 66  ndex.** number f
18490 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c 65  or that variable
184a0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
184b0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
184c0 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78 70  ubquery then Exp
184d0 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  r.iColumn holds 
184e0 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65  an integer.** re
184f0 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f  gister number co
18500 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73  ntaining the res
18510 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71 75  ult of the subqu
18520 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ery.  If the.** 
18530 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20 61  subquery gives a
18540 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74   constant result
18550 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  , then iTable is
18560 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75 62   -1.  If the sub
18570 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61  query.** gives a
18580 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65   different answe
18590 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20 74  r at different t
185a0 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61 74  imes during stat
185b0 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67  ement processing
185c0 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20  .** then iTable 
185d0 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  is the address o
185e0 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74  f a subroutine t
185f0 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65  hat computes the
18600 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a   subquery..**.**
18610 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73 20   If the Expr is 
18620 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d  of type OP_Colum
18630 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65  n, and the table
18640 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67   it is selecting
18650 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69   from.** is a di
18660 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20  sk table or the 
18670 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74  "old.*" pseudo-t
18680 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20  able, then pTab 
18690 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
186a0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
186b0 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e  able definition.
186c0 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f  .**.** ALLOCATIO
186d0 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45  N NOTES:.**.** E
186e0 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20  xpr objects can 
186f0 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d  use a lot of mem
18700 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61 74  ory space in dat
18710 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54  abase schema.  T
18720 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65  o.** help reduce
18730 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d   memory requirem
18740 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20  ents, sometimes 
18750 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77  an Expr object w
18760 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61  ill be.** trunca
18770 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64  ted.  And to red
18780 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  uce the number o
18790 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  f memory allocat
187a0 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a  ions, sometimes.
187b0 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45  ** two or more E
187c0 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c  xpr objects will
187d0 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20   be stored in a 
187e0 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c  single memory al
187f0 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67  location,.** tog
18800 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72 2e  ether with Expr.
18810 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a  zToken strings..
18820 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f  **.** If the EP_
18830 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54  Reduced and EP_T
18840 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61  okenOnly flags a
18850 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61  re set when.** a
18860 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73  n Expr object is
18870 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65   truncated.  Whe
18880 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20  n EP_Reduced is 
18890 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a  set, then all.**
188a0 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72 20   the child Expr 
188b0 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45  objects in the E
188c0 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78  xpr.pLeft and Ex
188d0 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72 65  pr.pRight subtre
188e0 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69  es.** are contai
188f0 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 73  ned within the s
18900 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ame memory alloc
18910 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f  ation.  Note, ho
18920 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74  wever, that.** t
18930 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20 45  he subtrees in E
18940 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45  xpr.x.pList or E
18950 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72  xpr.x.pSelect ar
18960 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61 74  e always separat
18970 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64  ely.** allocated
18980 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
18990 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45  whether or not E
189a0 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74  P_Reduced is set
189b0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
189c0 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
189d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
189e0 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d  peration perform
189f0 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
18a00 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
18a10 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ty;         /* T
18a20 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74  he affinity of t
18a30 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69  he column or 0 i
18a40 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a  f not a column *
18a50 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20  /.  u32 flags;  
18a60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
18a70 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50  rious flags.  EP
18a80 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a  _* See below */.
18a90 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68    union {.    ch
18aa0 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20  ar *zToken;     
18ab0 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61       /* Token va
18ac0 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e  lue. Zero termin
18ad0 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65  ated and dequote
18ae0 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61  d */.    int iVa
18af0 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  lue;            
18b00 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  /* Non-negative 
18b10 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66  integer value if
18b20 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a   EP_IntValue */.
18b30 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20    } u;..  /* If 
18b40 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
18b50 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
18b60 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
18b70 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
18b80 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
18b90 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
18ba0 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
18bb0 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
18bc0 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
18bd0 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
18be0 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
18bf0 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
18c00 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
18c10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18c20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18c30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18c40 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20  ******/..  Expr 
18c50 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20  *pLeft;         
18c60 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64    /* Left subnod
18c70 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69  e */.  Expr *pRi
18c80 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ght;          /*
18c90 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a   Right subnode *
18ca0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
18cb0 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b  ExprList *pList;
18cc0 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c       /* op = IN,
18cd0 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c   EXISTS, SELECT,
18ce0 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c   CASE, FUNCTION,
18cf0 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20   BETWEEN */.    
18d00 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
18d10 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65       /* EP_xIsSe
18d20 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e  lect and op = IN
18d30 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
18d40 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a   */.  } x;..  /*
18d50 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
18d60 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ed flag is set i
18d70 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
18d80 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
18d90 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
18da0 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
18db0 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
18dc0 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
18dd0 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
18de0 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
18df0 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
18e00 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
18e10 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
18e20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18e30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18e40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18e50 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53  ********/..#if S
18e60 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
18e70 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65  EPTH>0.  int nHe
18e80 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
18e90 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68 65  /* Height of the
18ea0 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79 20   tree headed by 
18eb0 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e  this node */.#en
18ec0 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65  dif.  int iTable
18ed0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
18ee0 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f  TK_COLUMN: curso
18ef0 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  r number of tabl
18f00 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e  e holding column
18f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18f20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
18f30 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73 74  REGISTER: regist
18f40 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20  er number.      
18f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f60 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52     ** TK_TRIGGER
18f70 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e  : 1 -> new, 0 ->
18f80 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20   old.           
18f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
18fa0 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31   EP_Unlikely:  1
18fb0 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c  34217728 times l
18fc0 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20 20  ikelihood.      
18fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fe0 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 3a     ** TK_SELECT:
18ff0 20 31 73 74 20 72 65 67 69 73 74 65 72 20 6f 66   1st register of
19000 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a   result vector *
19010 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d  /.  ynVar iColum
19020 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b  n;         /* TK
19030 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20  _COLUMN: column 
19040 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72  index.  -1 for r
19050 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20  owid..          
19060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19070 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76  * TK_VARIABLE: v
19080 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28  ariable number (
19090 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20 20  always >= 1)..  
190a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190b0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c         ** TK_SEL
190c0 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75  ECT_COLUMN: colu
190d0 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  mn of the result
190e0 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31 36   vector */.  i16
190f0 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20 20   iAgg;          
19100 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74      /* Which ent
19110 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e  ry in pAggInfo->
19120 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e  aCol[] or ->aFun
19130 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69  c[] */.  i16 iRi
19140 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20  ghtJoinTable;   
19150 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69  /* If EP_FromJoi
19160 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61 62  n, the right tab
19170 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a  le of the join *
19180 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20  /.  u8 op2;     
19190 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
191a0 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69  _REGISTER: origi
191b0 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70  nal value of Exp
191c0 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20  r.op.           
191d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
191e0 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20   TK_COLUMN: the 
191f0 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20  value of p5 for 
19200 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  OP_Column.      
19210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19220 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e     ** TK_AGG_FUN
19230 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64  CTION: nesting d
19240 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66  epth */.  AggInf
19250 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20  o *pAggInfo;    
19260 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41   /* Used by TK_A
19270 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b  GG_COLUMN and TK
19280 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f  _AGG_FUNCTION */
19290 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
192a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
192b0 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e  le for TK_COLUMN
192c0 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 43   expressions.  C
192d0 61 6e 20 62 65 20 4e 55 4c 4c 0a 20 20 20 20 20  an be NULL.     
192e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192f0 20 20 20 20 2a 2a 20 66 6f 72 20 61 20 63 6f 6c      ** for a col
19300 75 6d 6e 20 6f 66 20 61 6e 20 69 6e 64 65 78 20  umn of an index 
19310 6f 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  on an expression
19320 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
19330 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55  TE_OMIT_WINDOWFU
19340 4e 43 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69  NC.  Window *pWi
19350 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  n;          /* W
19360 69 6e 64 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e  indow definition
19370 20 66 6f 72 20 77 69 6e 64 6f 77 20 66 75 6e 63   for window func
19380 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  tions */.#endif.
19390 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
193a0 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20  llowing are the 
193b0 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73  meanings of bits
193c0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
193d0 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
193e0 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e  fine EP_FromJoin
193f0 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72    0x000001 /* Or
19400 69 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55  iginates in ON/U
19410 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f  SING clause of o
19420 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
19430 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20  fine EP_Agg     
19440 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f    0x000002 /* Co
19450 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
19460 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
19470 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
19480 65 20 45 50 5f 48 61 73 46 75 6e 63 20 20 20 30  e EP_HasFunc   0
19490 78 30 30 30 30 30 34 20 2f 2a 20 43 6f 6e 74 61  x000004 /* Conta
194a0 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
194b0 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20 61 6e 79  functions of any
194c0 20 6b 69 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65   kind */.#define
194d0 20 45 50 5f 46 69 78 65 64 43 6f 6c 20 20 30 78   EP_FixedCol  0x
194e0 30 30 30 30 30 38 20 2f 2a 20 54 4b 5f 43 6f 6c  000008 /* TK_Col
194f0 75 6d 6e 20 77 69 74 68 20 61 20 6b 6e 6f 77 6e  umn with a known
19500 20 66 69 78 65 64 20 76 61 6c 75 65 20 2a 2f 0a   fixed value */.
19510 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69  #define EP_Disti
19520 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a  nct  0x000010 /*
19530 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
19540 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43  ion with DISTINC
19550 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  T keyword */.#de
19560 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63  fine EP_VarSelec
19570 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53  t 0x000020 /* pS
19580 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61  elect is correla
19590 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e  ted, not constan
195a0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
195b0 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30  DblQuoted 0x0000
195c0 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61  40 /* token.z wa
195d0 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20  s originally in 
195e0 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65  "..." */.#define
195f0 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78   EP_InfixFunc 0x
19600 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66  000080 /* True f
19610 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63  or an infix func
19620 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42  tion: LIKE, GLOB
19630 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65  , etc */.#define
19640 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78   EP_Collate   0x
19650 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63  000100 /* Tree c
19660 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c  ontains a TK_COL
19670 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LATE operator */
19680 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65  .#define EP_Gene
19690 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20 2f  ric   0x000200 /
196a0 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45  * Ignore COLLATE
196b0 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20   or affinity on 
196c0 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65  this tree */.#de
196d0 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65  fine EP_IntValue
196e0 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e    0x000400 /* In
196f0 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74  teger value cont
19700 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75  ained in u.iValu
19710 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
19720 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30 38  xIsSelect 0x0008
19730 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20  00 /* x.pSelect 
19740 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77  is valid (otherw
19750 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20  ise x.pList is) 
19760 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b  */.#define EP_Sk
19770 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ip      0x001000
19780 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c   /* COLLATE, AS,
19790 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a   or UNLIKELY */.
197a0 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63  #define EP_Reduc
197b0 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a  ed   0x002000 /*
197c0 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
197d0 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79  R_REDUCEDSIZE by
197e0 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
197f0 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  ine EP_TokenOnly
19800 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70   0x004000 /* Exp
19810 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f  r struct EXPR_TO
19820 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65  KENONLYSIZE byte
19830 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
19840 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 30  e EP_Static    0
19850 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20  x008000 /* Held 
19860 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62  in memory not ob
19870 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c  tained from mall
19880 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oc() */.#define 
19890 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30  EP_MemToken  0x0
198a0 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f  10000 /* Need to
198b0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
198c0 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a   Expr.zToken */.
198d0 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64  #define EP_NoRed
198e0 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a  uce  0x020000 /*
198f0 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f   Cannot EXPRDUP_
19900 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72  REDUCE this Expr
19910 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55   */.#define EP_U
19920 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30  nlikely  0x04000
19930 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20  0 /* unlikely() 
19940 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20  or likelihood() 
19950 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
19960 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63  ine EP_ConstFunc
19970 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53   0x080000 /* A S
19980 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
19990 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20  ANT or _SLOCHNG 
199a0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
199b0 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c  ine EP_CanBeNull
199c0 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e   0x100000 /* Can
199d0 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65   be null despite
199e0 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
199f0 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
19a00 45 50 5f 53 75 62 71 75 65 72 79 20 20 30 78 32  EP_Subquery  0x2
19a10 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f  00000 /* Tree co
19a20 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45  ntains a TK_SELE
19a30 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23  CT operator */.#
19a40 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61 73 20  define EP_Alias 
19a50 20 20 20 20 30 78 34 30 30 30 30 30 20 2f 2a 20      0x400000 /* 
19a60 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  Is an alias for 
19a70 61 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c  a result set col
19a80 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  umn */.#define E
19a90 50 5f 4c 65 61 66 20 20 20 20 20 20 30 78 38 30  P_Leaf      0x80
19aa0 30 30 30 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65  0000 /* Expr.pLe
19ab0 66 74 2c 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e  ft, .pRight, .u.
19ac0 70 53 65 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c  pSelect all NULL
19ad0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 45   */../*.** The E
19ae0 50 5f 50 72 6f 70 61 67 61 74 65 20 6d 61 73 6b  P_Propagate mask
19af0 20 69 73 20 61 20 73 65 74 20 6f 66 20 70 72 6f   is a set of pro
19b00 70 65 72 74 69 65 73 20 74 68 61 74 20 61 75 74  perties that aut
19b10 6f 6d 61 74 69 63 61 6c 6c 79 20 70 72 6f 70 61  omatically propa
19b20 67 61 74 65 0a 2a 2a 20 75 70 77 61 72 64 73 20  gate.** upwards 
19b30 69 6e 74 6f 20 70 61 72 65 6e 74 20 6e 6f 64 65  into parent node
19b40 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  s..*/.#define EP
19b50 5f 50 72 6f 70 61 67 61 74 65 20 28 45 50 5f 43  _Propagate (EP_C
19b60 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71 75 65  ollate|EP_Subque
19b70 72 79 7c 45 50 5f 48 61 73 46 75 6e 63 29 0a 0a  ry|EP_HasFunc)..
19b80 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
19b90 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
19ba0 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
19bb0 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
19bc0 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20  e.** Expr.flags 
19bd0 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
19be0 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74  e ExprHasPropert
19bf0 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29  y(E,P)     (((E)
19c00 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29  ->flags&(P))!=0)
19c10 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
19c20 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29  AllProperty(E,P)
19c30 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
19c40 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
19c50 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
19c60 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e  y(E,P)     (E)->
19c70 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  flags|=(P).#defi
19c80 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70  ne ExprClearProp
19c90 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d  erty(E,P)   (E)-
19ca0 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  >flags&=~(P)../*
19cb0 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41 50   The ExprSetVVAP
19cc0 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20  roperty() macro 
19cd0 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72 69  is used for Veri
19ce0 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61  fication, Valida
19cf0 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63  tion,.** and Acc
19d00 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e  reditation only.
19d10 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20    It works like 
19d20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
19d30 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20  ) during VVA.** 
19d40 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69 73  processes but is
19d50 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c   a no-op for del
19d60 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  ivery..*/.#ifdef
19d70 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
19d80 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
19d90 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  AProperty(E,P)  
19da0 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
19db0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45  #else.# define E
19dc0 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
19dd0 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  y(E,P).#endif../
19de0 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
19df0 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d  etermine the num
19e00 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71  ber of bytes req
19e10 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61  uired by a norma
19e20 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72 75 63 74  l Expr.** struct
19e30 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74  , an Expr struct
19e40 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64   with the EP_Red
19e50 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e  uced flag set in
19e60 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61   Expr.flags.** a
19e70 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  nd an Expr struc
19e80 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f  t with the EP_To
19e90 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74  kenOnly flag set
19ea0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
19eb0 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20  R_FULLSIZE      
19ec0 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72       sizeof(Expr
19ed0 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  )           /* F
19ee0 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66  ull size */.#def
19ef0 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44  ine EXPR_REDUCED
19f00 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73  SIZE        offs
19f10 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65  etof(Expr,iTable
19f20 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61  )  /* Common fea
19f30 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tures */.#define
19f40 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
19f50 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f  IZE      offseto
19f60 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20  f(Expr,pLeft)   
19f70 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65  /* Fewer feature
19f80 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67  s */../*.** Flag
19f90 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
19fa0 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
19fb0 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74   function. See t
19fc0 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
19fd0 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74  t.** above sqlit
19fe0 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72 20  e3ExprDup() for 
19ff0 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66  details..*/.#def
1a000 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44 55  ine EXPRDUP_REDU
1a010 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30 30  CE         0x000
1a020 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63  1  /* Used reduc
1a030 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64  ed-size Expr nod
1a040 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c  es */../*.** A l
1a050 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
1a060 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65 73  ns.  Each expres
1a070 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61  sion may optiona
1a080 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61  lly have a.** na
1a090 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d  me.  An expr/nam
1a0a0 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61  e combination ca
1a0b0 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65 76  n be used in sev
1a0c0 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a  eral ways, such.
1a0d0 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f  ** as the list o
1a0e0 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20 66  f "expr AS ID" f
1a0f0 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  ields following 
1a100 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e  a "SELECT" or in
1a110 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20   the.** list of 
1a120 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d  "ID = expr" item
1a130 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20  s in an UPDATE. 
1a140 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
1a150 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c  ssions can.** al
1a160 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68  so be used as th
1a170 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20  e argument to a 
1a180 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69  function, in whi
1a190 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e  ch case the a.zN
1a1a0 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20  ame.** field is 
1a1b0 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  not used..**.** 
1a1c0 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20 45  By default the E
1a1d0 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20  xpr.zSpan field 
1a1e0 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65  holds a human-re
1a1f0 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74 69  adable descripti
1a200 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70  on of.** the exp
1a210 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
1a220 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65  used in the gene
1a230 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20  ration of error 
1a240 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20  messages and.** 
1a250 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20  column labels.  
1a260 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45 78  In this case, Ex
1a270 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69  pr.zSpan is typi
1a280 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f  cally the text o
1a290 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78  f a.** column ex
1a2a0 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65  pression as it e
1a2b0 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43  xists in a SELEC
1a2c0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f  T statement.  Ho
1a2d0 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65  wever, if.** the
1a2e0 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67   bSpanIsTab flag
1a2f0 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53   is set, then zS
1a300 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65  pan is overloade
1a310 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61  d to mean the na
1a320 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73  me.** of the res
1a330 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ult column in th
1a340 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45  e form: DATABASE
1a350 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20  .TABLE.COLUMN.  
1a360 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f  This later.** fo
1a370 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e  rm is used for n
1a380 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77  ame resolution w
1a390 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20  ith nested FROM 
1a3a0 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75  clauses..*/.stru
1a3b0 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20  ct ExprList {.  
1a3c0 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20  int nExpr;      
1a3d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1a3e0 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
1a3f0 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  on the list */. 
1a400 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74   struct ExprList
1a410 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65  _item { /* For e
1a420 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ach expression i
1a430 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20  n the list */.  
1a440 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
1a450 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1a460 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20   parse tree for 
1a470 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20  this expression 
1a480 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
1a490 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
1a4a0 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74  * Token associat
1a4b0 65 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70  ed with this exp
1a4c0 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63  ression */.    c
1a4d0 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20  har *zSpan;     
1a4e0 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e         /* Origin
1a4f0 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 65  al text of the e
1a500 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
1a510 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20   u8 sortOrder;  
1a520 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f           /* 1 fo
1a530 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20  r DESC or 0 for 
1a540 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ASC */.    unsig
1a550 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20  ned done :1;    
1a560 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20     /* A flag to 
1a570 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70 72  indicate when pr
1a580 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69  ocessing is fini
1a590 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69  shed */.    unsi
1a5a0 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62 20  gned bSpanIsTab 
1a5b0 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c  :1; /* zSpan hol
1a5c0 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55  ds DB.TABLE.COLU
1a5d0 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  MN */.    unsign
1a5e0 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20  ed reusable :1; 
1a5f0 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78    /* Constant ex
1a600 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73  pression is reus
1a610 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69  able */.    unsi
1a620 67 6e 65 64 20 62 53 6f 72 74 65 72 52 65 66 20  gned bSorterRef 
1a630 3a 31 3b 20 2f 2a 20 44 65 66 65 72 20 65 76 61  :1; /* Defer eva
1a640 6c 75 61 74 69 6f 6e 20 75 6e 74 69 6c 20 61 66  luation until af
1a650 74 65 72 20 73 6f 72 74 69 6e 67 20 2a 2f 0a 20  ter sorting */. 
1a660 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20     union {.     
1a670 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
1a680 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f    u16 iOrderByCo
1a690 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f  l;      /* For O
1a6a0 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20  RDER BY, column 
1a6b0 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74  number in result
1a6c0 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20   set */.        
1a6d0 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20  u16 iAlias;     
1a6e0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
1a6f0 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73  nto Parse.aAlias
1a700 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a  [] for zName */.
1a710 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20        } x;.     
1a720 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52   int iConstExprR
1a730 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69  eg;      /* Regi
1a740 73 74 65 72 20 69 6e 20 77 68 69 63 68 20 45 78  ster in which Ex
1a750 70 72 20 76 61 6c 75 65 20 69 73 20 63 61 63 68  pr value is cach
1a760 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20  ed */.    } u;. 
1a770 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20   } a[1];        
1a780 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1a790 20 73 6c 6f 74 20 66 6f 72 20 65 61 63 68 20 65   slot for each e
1a7a0 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
1a7b0 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
1a7c0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
1a7d0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
1a7e0 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70   can hold a simp
1a7f0 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74  le list of ident
1a800 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20  ifiers,.** such 
1a810 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62  as the list "a,b
1a820 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  ,c" in the follo
1a830 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a  wing statements:
1a840 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45  .**.**      INSE
1a850 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
1a860 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20   VALUES ...;.** 
1a870 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
1a880 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63  X idx ON t(a,b,c
1a890 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  );.**      CREAT
1a8a0 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42  E TRIGGER trig B
1a8b0 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20  EFORE UPDATE ON 
1a8c0 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a  t(a,b,c) ...;.**
1a8d0 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61  .** The IdList.a
1a8e0 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73  .idx field is us
1a8f0 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69  ed when the IdLi
1a900 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  st represents th
1a910 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c  e list of.** col
1a920 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20  umn names after 
1a930 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  a table name in 
1a940 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
1a950 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61  ent.  In the sta
1a960 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20  tement.**.**    
1a970 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
1a980 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20  ,b,c) ....**.** 
1a990 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d  If "a" is the k-
1a9a0 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62  th column of tab
1a9b0 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c  le "t", then IdL
1a9c0 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e  ist.a[0].idx==k.
1a9d0 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73  .*/.struct IdLis
1a9e0 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c  t {.  struct IdL
1a9f0 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63  ist_item {.    c
1aa00 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
1aa10 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
1aa20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20  identifier */.  
1aa30 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20    int idx;      
1aa40 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
1aa50 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b  some Table.aCol[
1aa60 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61  ] of a column na
1aa70 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d  med zName */.  }
1aa80 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20   *a;.  int nId; 
1aa90 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1aaa0 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  r of identifiers
1aab0 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
1aac0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
1aad0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1aae0 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  e describes the 
1aaf0 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
1ab00 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1ab10 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65  t..** Each table
1ab20 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
1ab30 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1ab40 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c  is a separate el
1ab50 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20  ement of.** the 
1ab60 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61  SrcList.a[] arra
1ab70 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68  y..**.** With th
1ab80 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75  e addition of mu
1ab90 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
1aba0 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c  support, the fol
1abb0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1abc0 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  .** can also be 
1abd0 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65  used to describe
1abe0 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
1abf0 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20  ble such as the 
1ac00 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73  table that.** is
1ac10 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20   modified by an 
1ac20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20  INSERT, DELETE, 
1ac30 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
1ac40 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72  ent.  In standar
1ac50 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61  d SQL,.** such a
1ac60 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61   table must be a
1ac70 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44   simple name: ID
1ac80 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65  .  But in SQLite
1ac90 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a  , the table can.
1aca0 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69  ** now be identi
1acb0 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61  fied by a databa
1acc0 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20  se name, a dot, 
1acd0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  then the table n
1ace0 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a  ame: ID.ID..**.*
1acf0 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73  * The jointype s
1ad00 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e  tarts out showin
1ad10 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20  g the join type 
1ad20 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72  between the curr
1ad30 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64  ent table.** and
1ad40 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20   the next table 
1ad50 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68  on the list.  Th
1ad60 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20  e parser builds 
1ad70 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61  the list this wa
1ad80 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65  y..** But sqlite
1ad90 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
1ada0 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68  nType() later sh
1adb0 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70  ifts the jointyp
1adc0 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a  es so that each.
1add0 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72  ** jointype expr
1ade0 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62  esses the join b
1adf0 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65  etween the table
1ae00 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
1ae10 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  s table..**.** I
1ae20 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69  n the colUsed fi
1ae30 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72  eld, the high-or
1ae40 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29  der bit (bit 63)
1ae50 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74   is set if the t
1ae60 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  able.** contains
1ae70 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f   more than 63 co
1ae80 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34  lumns and the 64
1ae90 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c  -th or later col
1aea0 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  umn is used..*/.
1aeb0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b  struct SrcList {
1aec0 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20  .  int nSrc;    
1aed0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1aee0 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
1aef0 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f  eries in the FRO
1af00 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33  M clause */.  u3
1af10 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  2 nAlloc;      /
1af20 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
1af30 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ies allocated in
1af40 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   a[] below */.  
1af50 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
1af60 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61  tem {.    Schema
1af70 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53   *pSchema;  /* S
1af80 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74  chema to which t
1af90 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65  his item is fixe
1afa0 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  d */.    char *z
1afb0 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61  Database;  /* Na
1afc0 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  me of database h
1afd0 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c  olding this tabl
1afe0 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
1aff0 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
1b000 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
1b010 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c  */.    char *zAl
1b020 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  ias;     /* The 
1b030 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41  "B" part of a "A
1b040 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20   AS B" phrase.  
1b050 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22  zName is the "A"
1b060 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
1b070 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  Tab;      /* An 
1b080 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73  SQL table corres
1b090 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65  ponding to zName
1b0a0 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
1b0b0 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53  pSelect;  /* A S
1b0c0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
1b0d0 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66  used in place of
1b0e0 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f   a table name */
1b0f0 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c  .    int addrFil
1b100 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73  lSub;  /* Addres
1b110 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20  s of subroutine 
1b120 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75  to manifest a su
1b130 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e  bquery */.    in
1b140 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20  t regReturn;    
1b150 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
1b160 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65  ing return addre
1b170 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75  ss of addrFillSu
1b180 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  b */.    int reg
1b190 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65  Result;    /* Re
1b1a0 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
1b1b0 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d  results of a co-
1b1c0 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73  routine */.    s
1b1d0 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 75 38  truct {.      u8
1b1e0 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20   jointype;      
1b1f0 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20  /* Type of join 
1b200 62 65 74 77 65 65 6e 20 74 68 69 73 20 74 61 62  between this tab
1b210 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69  le and the previ
1b220 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  ous */.      uns
1b230 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64  igned notIndexed
1b240 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20   :1;    /* True 
1b250 69 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f  if there is a NO
1b260 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65  T INDEXED clause
1b270 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1b280 65 64 20 69 73 49 6e 64 65 78 65 64 42 79 20 3a  ed isIndexedBy :
1b290 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  1;   /* True if 
1b2a0 74 68 65 72 65 20 69 73 20 61 6e 20 49 4e 44 45  there is an INDE
1b2b0 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  XED BY clause */
1b2c0 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1b2d0 69 73 54 61 62 46 75 6e 63 20 3a 31 3b 20 20 20  isTabFunc :1;   
1b2e0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 61 62    /* True if tab
1b2f0 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69  le-valued-functi
1b300 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20  on syntax */.   
1b310 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f     unsigned isCo
1b320 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a  rrelated :1;  /*
1b330 20 54 72 75 65 20 69 66 20 73 75 62 2d 71 75 65   True if sub-que
1b340 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ry is correlated
1b350 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1b360 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20  ed viaCoroutine 
1b370 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e  :1;  /* Implemen
1b380 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74  ted as a co-rout
1b390 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  ine */.      uns
1b3a0 69 67 6e 65 64 20 69 73 52 65 63 75 72 73 69 76  igned isRecursiv
1b3b0 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  e :1;   /* True 
1b3c0 66 6f 72 20 72 65 63 75 72 73 69 76 65 20 72 65  for recursive re
1b3d0 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20  ference in WITH 
1b3e0 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 20 20 20  */.    } fg;.   
1b3f0 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20   int iCursor;   
1b400 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
1b410 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65  ursor number use
1b420 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 73  d to access this
1b430 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78   table */.    Ex
1b440 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20  pr *pOn;        
1b450 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65  /* The ON clause
1b460 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
1b470 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67    IdList *pUsing
1b480 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47  ;   /* The USING
1b490 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
1b4a0 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b  n */.    Bitmask
1b4b0 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69   colUsed;  /* Bi
1b4c0 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69  t N (1<<N) set i
1b4d0 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54  f column N of pT
1b4e0 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20  ab is used */.  
1b4f0 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20    union {.      
1b500 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79  char *zIndexedBy
1b510 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69  ;    /* Identifi
1b520 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44  er from "INDEXED
1b530 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c   BY <zIndex>" cl
1b540 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 45 78  ause */.      Ex
1b550 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41 72 67  prList *pFuncArg
1b560 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20  ;  /* Arguments 
1b570 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d  to table-valued-
1b580 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
1b590 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65 78 20  } u1;.    Index 
1b5a0 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49  *pIBIndex;  /* I
1b5b0 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 63  ndex structure c
1b5c0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
1b5d0 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f  u1.zIndexedBy */
1b5e0 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20  .  } a[1];      
1b5f0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
1b600 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65  try for each ide
1b610 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c  ntifier on the l
1b620 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
1b630 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65   Permitted value
1b640 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74  s of the SrcList
1b650 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c  .a.jointype fiel
1b660 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d.*/.#define JT_
1b670 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31  INNER     0x0001
1b680 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20      /* Any kind 
1b690 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73  of inner or cros
1b6a0 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  s join */.#defin
1b6b0 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30  e JT_CROSS     0
1b6c0 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c  x0002    /* Expl
1b6d0 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20  icit use of the 
1b6e0 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f  CROSS keyword */
1b6f0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55  .#define JT_NATU
1b700 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20  RAL   0x0004    
1b710 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e  /* True for a "n
1b720 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a  atural" join */.
1b730 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20  #define JT_LEFT 
1b740 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f       0x0008    /
1b750 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69  * Left outer joi
1b760 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1b770 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30  RIGHT     0x0010
1b780 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74      /* Right out
1b790 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
1b7a0 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20  ne JT_OUTER     
1b7b0 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65  0x0020    /* The
1b7c0 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64   "OUTER" keyword
1b7d0 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23   is present */.#
1b7e0 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20  define JT_ERROR 
1b7f0 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a      0x0040    /*
1b800 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75   unknown or unsu
1b810 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70  pported join typ
1b820 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  e */.../*.** Fla
1b830 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66  gs appropriate f
1b840 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67  or the wctrlFlag
1b850 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73  s parameter of s
1b860 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
1b870 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68  ().** and the Wh
1b880 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61  ereInfo.wctrlFla
1b890 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a  gs member..**.**
1b8a0 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
1b8b0 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61  ts (enforced via
1b8c0 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
1b8d0 20 20 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d     WHERE_USE_LIM
1b8e0 49 54 20 20 3d 3d 20 53 46 5f 46 69 78 65 64 4c  IT  == SF_FixedL
1b8f0 69 6d 69 74 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  imit.*/.#define 
1b900 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f  WHERE_ORDERBY_NO
1b910 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a  RMAL   0x0000 /*
1b920 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e   No-op */.#defin
1b930 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
1b940 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31 20  MIN      0x0001 
1b950 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
1b960 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29  essing for min()
1b970 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
1b980 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d   WHERE_ORDERBY_M
1b990 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20 2f  AX      0x0002 /
1b9a0 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
1b9b0 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20  ssing for max() 
1b9c0 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
1b9d0 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45  WHERE_ONEPASS_DE
1b9e0 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a  SIRED  0x0004 /*
1b9f0 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d   Want to do one-
1ba00 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45  pass UPDATE/DELE
1ba10 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  TE */.#define WH
1ba20 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54  ERE_ONEPASS_MULT
1ba30 49 52 4f 57 20 30 78 30 30 30 38 20 2f 2a 20 4f  IROW 0x0008 /* O
1ba40 4e 45 50 41 53 53 20 69 73 20 6f 6b 20 77 69 74  NEPASS is ok wit
1ba50 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  h multiple rows 
1ba60 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1ba70 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20  _DUPLICATES_OK  
1ba80 20 20 30 78 30 30 31 30 20 2f 2a 20 4f 6b 20 74    0x0010 /* Ok t
1ba90 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d  o return a row m
1baa0 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f  ore than once */
1bab0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1bac0 52 5f 53 55 42 43 4c 41 55 53 45 20 20 20 20 20  R_SUBCLAUSE     
1bad0 30 78 30 30 32 30 20 2f 2a 20 50 72 6f 63 65 73  0x0020 /* Proces
1bae0 73 69 6e 67 20 61 20 73 75 62 2d 57 48 45 52 45  sing a sub-WHERE
1baf0 20 61 73 20 70 61 72 74 20 6f 66 0a 20 20 20 20   as part of.    
1bb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb20 20 20 2a 2a 20 74 68 65 20 4f 52 20 6f 70 74 69    ** the OR opti
1bb30 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23 64 65  mization  */.#de
1bb40 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50  fine WHERE_GROUP
1bb50 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30 30  BY          0x00
1bb60 34 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69  40 /* pOrderBy i
1bb70 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50  s really a GROUP
1bb80 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57   BY */.#define W
1bb90 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20  HERE_DISTINCTBY 
1bba0 20 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20        0x0080 /* 
1bbb0 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61 6c  pOrderby is real
1bbc0 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c  ly a DISTINCT cl
1bbd0 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1bbe0 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49  WHERE_WANT_DISTI
1bbf0 4e 43 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a  NCT    0x0100 /*
1bc00 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64   All output need
1bc10 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74  s to be distinct
1bc20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1bc30 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20  E_SORTBYGROUP   
1bc40 20 20 20 30 78 30 32 30 30 20 2f 2a 20 53 75 70     0x0200 /* Sup
1bc50 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65 72  port sqlite3Wher
1bc60 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23  eIsSorted() */.#
1bc70 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45  define WHERE_SEE
1bc80 4b 5f 54 41 42 4c 45 20 20 20 20 20 20 20 30 78  K_TABLE       0x
1bc90 30 34 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64  0400 /* Do not d
1bca0 65 66 65 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61  efer seeks on ma
1bcb0 69 6e 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  in table */.#def
1bcc0 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
1bcd0 59 5f 4c 49 4d 49 54 20 20 20 20 30 78 30 38 30  Y_LIMIT    0x080
1bce0 30 20 2f 2a 20 4f 52 44 45 52 42 59 2b 4c 49 4d  0 /* ORDERBY+LIM
1bcf0 49 54 20 6f 6e 20 74 68 65 20 69 6e 6e 65 72 20  IT on the inner 
1bd00 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  loop */.#define 
1bd10 57 48 45 52 45 5f 53 45 45 4b 5f 55 4e 49 51 5f  WHERE_SEEK_UNIQ_
1bd20 54 41 42 4c 45 20 20 30 78 31 30 30 30 20 2f 2a  TABLE  0x1000 /*
1bd30 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65   Do not defer se
1bd40 65 6b 73 20 69 66 20 75 6e 69 71 75 65 20 2a 2f  eks if unique */
1bd50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bd60 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20           /*     
1bd70 30 78 32 30 30 30 20 20 20 20 6e 6f 74 20 63 75  0x2000    not cu
1bd80 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a  rrently used */.
1bd90 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 55 53  #define WHERE_US
1bda0 45 5f 4c 49 4d 49 54 20 20 20 20 20 20 20 20 30  E_LIMIT        0
1bdb0 78 34 30 30 30 20 2f 2a 20 55 73 65 20 74 68 65  x4000 /* Use the
1bdc0 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73 74 20 65   LIMIT in cost e
1bdd0 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20 20 20 20  stimates */.    
1bde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdf0 20 20 20 20 2f 2a 20 20 20 20 20 30 78 38 30 30      /*     0x800
1be00 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74  0    not current
1be10 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20 41  ly used */../* A
1be20 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61  llowed return va
1be30 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  lues from sqlite
1be40 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
1be50 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ().*/.#define WH
1be60 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f  ERE_DISTINCT_NOO
1be70 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53  P      0  /* DIS
1be80 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f  TINCT keyword no
1be90 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  t used */.#defin
1bea0 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1beb0 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a  _UNIQUE    1  /*
1bec0 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a   No duplicates *
1bed0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1bee0 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44  DISTINCT_ORDERED
1bef0 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70     2  /* All dup
1bf00 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a 61  licates are adja
1bf10 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cent */.#define 
1bf20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
1bf30 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44  NORDERED 3  /* D
1bf40 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73 63  uplicates are sc
1bf50 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a  attered */../*.*
1bf60 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  * A NameContext 
1bf70 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78  defines a contex
1bf80 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65  t in which to re
1bf90 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20  solve table and 
1bfa0 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e  column.** names.
1bfb0 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f    The context co
1bfc0 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74  nsists of a list
1bfd0 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65 20   of tables (the 
1bfe0 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20  pSrcList) field 
1bff0 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66  and.** a list of
1c000 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
1c010 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65  n (pEList).  The
1c020 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
1c030 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65  n list may.** be
1c040 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63   NULL.  The pSrc
1c050 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
1c060 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1c070 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a  of a SELECT or.*
1c080 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  * to the table b
1c090 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
1c0a0 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41   by INSERT, UPDA
1c0b0 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20  TE, or DELETE.  
1c0c0 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f  The.** pEList co
1c0d0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
1c0e0 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61   result set of a
1c0f0 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e   SELECT and is N
1c100 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72  ULL for.** other
1c110 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
1c120 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20  ** NameContexts 
1c130 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20  can be nested.  
1c140 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e  When resolving n
1c150 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d  ames, the inner-
1c160 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20  most.** context 
1c170 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73  is searched firs
1c180 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20  t.  If no match 
1c190 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65  is found, the ne
1c1a0 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74  xt outer.** cont
1c1b0 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20  ext is checked. 
1c1c0 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69   If there is sti
1c1d0 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65  ll no match, the
1c1e0 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a   next context.**
1c1f0 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68   is checked.  Th
1c200 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69  is process conti
1c210 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65  nues until eithe
1c220 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  r a match is fou
1c230 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e  nd.** or all con
1c240 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e  texts are check.
1c250 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69    When a match i
1c260 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65  s found, the nRe
1c270 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74  f member of.** t
1c280 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61  he context conta
1c290 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20  ining the match 
1c2a0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
1c2b0 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75  **.** Each subqu
1c2c0 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e  ery gets a new N
1c2d0 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65  ameContext.  The
1c2e0 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69   pNext field poi
1c2f0 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61  nts to the.** Na
1c300 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65  meContext in the
1c310 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20   parent query.  
1c320 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73  Thus the process
1c330 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65   of scanning the
1c340 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
1c350 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  list corresponds
1c360 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68   to searching th
1c370 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65  rough successive
1c380 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71  ly outer.** subq
1c390 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66  ueries looking f
1c3a0 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73  or a match..*/.s
1c3b0 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
1c3c0 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  t {.  Parse *pPa
1c3d0 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  rse;       /* Th
1c3e0 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72  e parser */.  Sr
1c3f0 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
1c400 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72     /* One or mor
1c410 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f  e tables used to
1c420 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a   resolve names *
1c430 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
1c440 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
1c450 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c  ;    /* Optional
1c460 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d   list of result-
1c470 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  set columns */. 
1c480 20 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67     AggInfo *pAgg
1c490 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72  Info;   /* Infor
1c4a0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67  mation about agg
1c4b0 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20  regates at this 
1c4c0 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 55 70 73  level */.    Ups
1c4d0 65 72 74 20 2a 70 55 70 73 65 72 74 3b 20 20 20  ert *pUpsert;   
1c4e0 20 20 2f 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54    /* ON CONFLICT
1c4f0 20 63 6c 61 75 73 65 20 69 6e 66 6f 72 6d 61 74   clause informat
1c500 69 6f 6e 20 66 72 6f 6d 20 61 6e 20 75 70 73 65  ion from an upse
1c510 72 74 20 2a 2f 0a 20 20 7d 20 75 4e 43 3b 0a 20  rt */.  } uNC;. 
1c520 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
1c530 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75  ext;  /* Next ou
1c540 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74  ter name context
1c550 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65  .  NULL for oute
1c560 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  rmost */.  int n
1c570 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
1c580 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d  /* Number of nam
1c590 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74  es resolved by t
1c5a0 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  his context */. 
1c5b0 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
1c5c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1c5d0 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e  of errors encoun
1c5e0 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f  tered while reso
1c5f0 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20  lving names */. 
1c600 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20 20   u16 ncFlags;   
1c610 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72        /* Zero or
1c620 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73   more NC_* flags
1c630 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a   defined below *
1c640 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 57 69 6e  /.  Select *pWin
1c650 53 65 6c 65 63 74 3b 20 20 2f 2a 20 53 45 4c 45  Select;  /* SELE
1c660 43 54 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72  CT statement for
1c670 20 61 6e 79 20 77 69 6e 64 6f 77 20 66 75 6e 63   any window func
1c680 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  tions */.};../*.
1c690 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
1c6a0 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f  s for the NameCo
1c6b0 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66  ntext, ncFlags f
1c6c0 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  ield..**.** Valu
1c6d0 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61  e constraints (a
1c6e0 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61  ll checked via a
1c6f0 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
1c700 4e 43 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20  NC_HasAgg    == 
1c710 53 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20  SF_HasAgg.**    
1c720 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20  NC_MinMaxAgg == 
1c730 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20  SF_MinMaxAgg == 
1c740 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
1c750 41 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65  AX.**.*/.#define
1c760 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78   NC_AllowAgg  0x
1c770 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61  0001  /* Aggrega
1c780 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  te functions are
1c790 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f   allowed here */
1c7a0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74  .#define NC_Part
1c7b0 49 64 78 20 20 20 30 78 30 30 30 32 20 20 2f 2a  Idx   0x0002  /*
1c7c0 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
1c7d0 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64  ng a partial ind
1c7e0 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66  ex WHERE */.#def
1c7f0 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20  ine NC_IsCheck  
1c800 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65   0x0004  /* True
1c810 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
1c820 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
1c830 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
1c840 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e  fine NC_InAggFun
1c850 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75  c 0x0008  /* Tru
1c860 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61  e if analyzing a
1c870 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61  rguments to an a
1c880 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  gg func */.#defi
1c890 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20  ne NC_HasAgg    
1c8a0 30 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f  0x0010  /* One o
1c8b0 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
1c8c0 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20   functions seen 
1c8d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64  */.#define NC_Id
1c8e0 78 45 78 70 72 20 20 20 30 78 30 30 32 30 20 20  xExpr   0x0020  
1c8f0 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
1c900 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  ving columns of 
1c910 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
1c920 23 64 65 66 69 6e 65 20 4e 43 5f 56 61 72 53 65  #define NC_VarSe
1c930 6c 65 63 74 20 30 78 30 30 34 30 20 20 2f 2a 20  lect 0x0040  /* 
1c940 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62  A correlated sub
1c950 71 75 65 72 79 20 68 61 73 20 62 65 65 6e 20 73  query has been s
1c960 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
1c970 43 5f 55 45 4c 69 73 74 20 20 20 20 30 78 30 30  C_UEList    0x00
1c980 38 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75  80  /* True if u
1c990 4e 43 2e 70 45 4c 69 73 74 20 69 73 20 75 73 65  NC.pEList is use
1c9a0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  d */.#define NC_
1c9b0 55 41 67 67 49 6e 66 6f 20 20 30 78 30 31 30 30  UAggInfo  0x0100
1c9c0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43    /* True if uNC
1c9d0 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 75 73 65  .pAggInfo is use
1c9e0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  d */.#define NC_
1c9f0 55 55 70 73 65 72 74 20 20 20 30 78 30 32 30 30  UUpsert   0x0200
1ca00 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43    /* True if uNC
1ca10 2e 70 55 70 73 65 72 74 20 69 73 20 75 73 65 64  .pUpsert is used
1ca20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d   */.#define NC_M
1ca30 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30 20  inMaxAgg 0x1000 
1ca40 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72   /* min/max aggr
1ca50 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65  egates seen.  Se
1ca60 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a  e note above */.
1ca70 23 64 65 66 69 6e 65 20 4e 43 5f 43 6f 6d 70 6c  #define NC_Compl
1ca80 65 78 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20  ex   0x2000  /* 
1ca90 54 72 75 65 20 69 66 20 61 20 66 75 6e 63 74 69  True if a functi
1caa0 6f 6e 20 6f 72 20 73 75 62 71 75 65 72 79 20 73  on or subquery s
1cab0 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
1cac0 43 5f 41 6c 6c 6f 77 57 69 6e 20 20 30 78 34 30  C_AllowWin  0x40
1cad0 30 30 20 20 2f 2a 20 57 69 6e 64 6f 77 20 66 75  00  /* Window fu
1cae0 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f  nctions are allo
1caf0 77 65 64 20 68 65 72 65 20 2a 2f 0a 0a 2f 2a 0a  wed here */../*.
1cb00 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
1cb10 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1cb20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73  object describes
1cb30 20 61 20 73 69 6e 67 6c 65 20 4f 4e 20 43 4f 4e   a single ON CON
1cb40 46 4c 49 43 54 0a 2a 2a 20 63 6c 61 75 73 65 20  FLICT.** clause 
1cb50 69 6e 20 61 6e 20 75 70 73 65 72 74 2e 0a 2a 2a  in an upsert..**
1cb60 0a 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74 54  .** The pUpsertT
1cb70 61 72 67 65 74 20 66 69 65 6c 64 20 69 73 20 6f  arget field is o
1cb80 6e 6c 79 20 73 65 74 20 69 66 20 74 68 65 20 4f  nly set if the O
1cb90 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
1cba0 65 20 69 6e 63 6c 75 64 65 73 0a 2a 2a 20 63 6f  e includes.** co
1cbb0 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20 63 6c  nflict-target cl
1cbc0 61 75 73 65 2e 20 20 28 49 6e 20 22 4f 4e 20 43  ause.  (In "ON C
1cbd0 4f 4e 46 4c 49 43 54 28 61 2c 62 29 22 20 74 68  ONFLICT(a,b)" th
1cbe0 65 20 22 28 61 2c 62 29 22 20 69 73 20 74 68 65  e "(a,b)" is the
1cbf0 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72  .** conflict-tar
1cc00 67 65 74 20 63 6c 61 75 73 65 2e 29 20 20 54 68  get clause.)  Th
1cc10 65 20 70 55 70 73 65 72 74 54 61 72 67 65 74 57  e pUpsertTargetW
1cc20 68 65 72 65 20 69 73 20 74 68 65 20 6f 70 74 69  here is the opti
1cc30 6f 6e 61 6c 0a 2a 2a 20 57 48 45 52 45 20 63 6c  onal.** WHERE cl
1cc40 61 75 73 65 20 75 73 65 64 20 74 6f 20 69 64 65  ause used to ide
1cc50 6e 74 69 66 79 20 70 61 72 74 69 61 6c 20 75 6e  ntify partial un
1cc60 69 71 75 65 20 69 6e 64 65 78 65 73 2e 0a 2a 2a  ique indexes..**
1cc70 0a 2a 2a 20 70 55 70 73 65 72 74 53 65 74 20 69  .** pUpsertSet i
1cc80 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 63 6f  s the list of co
1cc90 6c 75 6d 6e 3d 65 78 70 72 20 74 65 72 6d 73 20  lumn=expr terms 
1cca0 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  of the UPDATE st
1ccb0 61 74 65 6d 65 6e 74 2e 20 0a 2a 2a 20 54 68 65  atement. .** The
1ccc0 20 70 55 70 73 65 72 74 53 65 74 20 66 69 65 6c   pUpsertSet fiel
1ccd0 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20 61 20  d is NULL for a 
1cce0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 44 4f 20 4e  ON CONFLICT DO N
1ccf0 4f 54 48 49 4e 47 2e 20 20 54 68 65 0a 2a 2a 20  OTHING.  The.** 
1cd00 70 55 70 73 65 72 74 57 68 65 72 65 20 69 73 20  pUpsertWhere is 
1cd10 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
1cd20 20 66 6f 72 20 74 68 65 20 55 50 44 41 54 45 20   for the UPDATE 
1cd30 61 6e 64 20 69 73 20 4e 55 4c 4c 20 69 66 20 74  and is NULL if t
1cd40 68 65 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61 75  he.** WHERE clau
1cd50 73 65 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a 2a  se is omitted..*
1cd60 2f 0a 73 74 72 75 63 74 20 55 70 73 65 72 74 20  /.struct Upsert 
1cd70 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 55  {.  ExprList *pU
1cd80 70 73 65 72 74 54 61 72 67 65 74 3b 20 20 2f 2a  psertTarget;  /*
1cd90 20 4f 70 74 69 6f 6e 61 6c 20 64 65 73 63 72 69   Optional descri
1cda0 70 74 69 6f 6e 20 6f 66 20 63 6f 6e 66 6c 69 63  ption of conflic
1cdb0 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
1cdc0 45 78 70 72 20 2a 70 55 70 73 65 72 74 54 61 72  Expr *pUpsertTar
1cdd0 67 65 74 57 68 65 72 65 3b 20 2f 2a 20 57 48 45  getWhere; /* WHE
1cde0 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61  RE clause for pa
1cdf0 72 74 69 61 6c 20 69 6e 64 65 78 20 74 61 72 67  rtial index targ
1ce00 65 74 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  ets */.  ExprLis
1ce10 74 20 2a 70 55 70 73 65 72 74 53 65 74 3b 20 20  t *pUpsertSet;  
1ce20 20 20 20 2f 2a 20 54 68 65 20 53 45 54 20 63 6c     /* The SET cl
1ce30 61 75 73 65 20 66 72 6f 6d 20 61 6e 20 4f 4e 20  ause from an ON 
1ce40 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45 20  CONFLICT UPDATE 
1ce50 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70 73 65  */.  Expr *pUpse
1ce60 72 74 57 68 65 72 65 3b 20 20 20 20 20 20 20 2f  rtWhere;       /
1ce70 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  * WHERE clause f
1ce80 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  or the ON CONFLI
1ce90 43 54 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 2f  CT UPDATE */.  /
1cea0 2a 20 54 68 65 20 66 69 65 6c 64 73 20 61 62 6f  * The fields abo
1ceb0 76 65 20 63 6f 6d 70 72 69 73 65 20 74 68 65 20  ve comprise the 
1cec0 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 74  parse tree for t
1ced0 68 65 20 75 70 73 65 72 74 20 63 6c 61 75 73 65  he upsert clause
1cee0 2e 0a 20 20 2a 2a 20 54 68 65 20 66 69 65 6c 64  ..  ** The field
1cef0 73 20 62 65 6c 6f 77 20 61 72 65 20 75 73 65 64  s below are used
1cf00 20 74 6f 20 74 72 61 6e 73 66 65 72 20 69 6e 66   to transfer inf
1cf10 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68  ormation from th
1cf20 65 20 49 4e 53 45 52 54 0a 20 20 2a 2a 20 70 72  e INSERT.  ** pr
1cf30 6f 63 65 73 73 69 6e 67 20 64 6f 77 6e 20 69 6e  ocessing down in
1cf40 74 6f 20 74 68 65 20 55 50 44 41 54 45 20 70 72  to the UPDATE pr
1cf50 6f 63 65 73 73 69 6e 67 20 77 68 69 6c 65 20 67  ocessing while g
1cf60 65 6e 65 72 61 74 69 6e 67 20 63 6f 64 65 2e 0a  enerating code..
1cf70 20 20 2a 2a 20 55 70 73 65 72 74 20 6f 77 6e 73    ** Upsert owns
1cf80 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f   the memory allo
1cf90 63 61 74 65 64 20 61 62 6f 76 65 2c 20 62 75 74  cated above, but
1cfa0 20 6e 6f 74 20 74 68 65 20 6d 65 6d 6f 72 79 20   not the memory 
1cfb0 62 65 6c 6f 77 2e 20 2a 2f 0a 20 20 49 6e 64 65  below. */.  Inde
1cfc0 78 20 2a 70 55 70 73 65 72 74 49 64 78 3b 20 20  x *pUpsertIdx;  
1cfd0 20 20 20 20 20 20 2f 2a 20 43 6f 6e 73 74 72 61        /* Constra
1cfe0 69 6e 74 20 74 68 61 74 20 70 55 70 73 65 72 74  int that pUpsert
1cff0 54 61 72 67 65 74 20 69 64 65 6e 74 69 66 69 65  Target identifie
1d000 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  s */.  SrcList *
1d010 70 55 70 73 65 72 74 53 72 63 3b 20 20 20 20 20  pUpsertSrc;     
1d020 20 2f 2a 20 54 61 62 6c 65 20 74 6f 20 62 65 20   /* Table to be 
1d030 75 70 64 61 74 65 64 20 2a 2f 0a 20 20 69 6e 74  updated */.  int
1d040 20 72 65 67 44 61 74 61 3b 20 20 20 20 20 20 20   regData;       
1d050 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
1d060 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  register holding
1d070 20 61 72 72 61 79 20 6f 66 20 56 41 4c 55 45 53   array of VALUES
1d080 20 2a 2f 0a 20 20 69 6e 74 20 69 44 61 74 61 43   */.  int iDataC
1d090 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ur;             
1d0a0 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
1d0b0 64 61 74 61 20 63 75 72 73 6f 72 20 2a 2f 0a 20  data cursor */. 
1d0c0 20 69 6e 74 20 69 49 64 78 43 75 72 3b 20 20 20   int iIdxCur;   
1d0d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1d0e0 64 65 78 20 6f 66 20 74 68 65 20 66 69 72 73 74  dex of the first
1d0f0 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a 2f   index cursor */
1d100 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
1d110 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
1d120 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1d130 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69  e contains all i
1d140 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65  nformation.** ne
1d150 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
1d160 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67   code for a sing
1d170 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
1d180 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74  ent..**.** See t
1d190 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
1d1a0 74 20 6f 6e 20 74 68 65 20 63 6f 6d 70 75 74 65  t on the compute
1d1b0 4c 69 6d 69 74 52 65 67 69 73 74 65 72 73 28 29  LimitRegisters()
1d1c0 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 61 0a 2a   routine for a.*
1d1d0 2a 20 64 65 74 61 69 6c 65 64 20 64 65 73 63 72  * detailed descr
1d1e0 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 65  iption of the me
1d1f0 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 69 4c 69  aning of the iLi
1d200 6d 69 74 20 61 6e 64 20 69 4f 66 66 73 65 74 20  mit and iOffset 
1d210 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 61 64  fields..**.** ad
1d220 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74  drOpenEphm[] ent
1d230 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65  ries contain the
1d240 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f   address of OP_O
1d250 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63  penEphemeral opc
1d260 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61  odes..** These a
1d270 64 64 72 65 73 73 65 73 20 6d 75 73 74 20 62 65  ddresses must be
1d280 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20   stored so that 
1d290 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61  we can go back a
1d2a0 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68  nd fill in.** th
1d2b0 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64  e P4_KEYINFO and
1d2c0 20 50 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c   P2 parameters l
1d2d0 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74  ater.  Neither t
1d2e0 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a  he KeyInfo nor.*
1d2f0 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
1d300 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61  columns in P2 ca
1d310 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74  n be computed at
1d320 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a   the same time.*
1d330 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e  * as the OP_Open
1d340 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  Ephm instruction
1d350 20 69 73 20 63 6f 64 65 64 20 62 65 63 61 75 73   is coded becaus
1d360 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20  e not.** enough 
1d370 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
1d380 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71  t the compound q
1d390 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74  uery is known at
1d3a0 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20   that point..** 
1d3b0 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20  The KeyInfo for 
1d3c0 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20  addrOpenTran[0] 
1d3d0 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73  and [1] contains
1d3e0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
1d3f0 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20  nces.** for the 
1d400 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65  result set.  The
1d410 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64   KeyInfo for add
1d420 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e  rOpenEphm[2] con
1d430 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a  tains collating.
1d440 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72  ** sequences for
1d450 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1d460 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
1d470 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c  Select {.  ExprL
1d480 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20  ist *pEList;    
1d490 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20    /* The fields 
1d4a0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f  of the result */
1d4b0 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
1d4c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1d4d0 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b   of: TK_UNION TK
1d4e0 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43  _ALL TK_INTERSEC
1d4f0 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20  T TK_EXCEPT */. 
1d500 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63 74 52   LogEst nSelectR
1d510 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d  ow;     /* Estim
1d520 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72  ated number of r
1d530 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20  esult rows */.  
1d540 75 33 32 20 73 65 6c 46 6c 61 67 73 3b 20 20 20  u32 selFlags;   
1d550 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
1d560 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  s SF_* values */
1d570 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69  .  int iLimit, i
1d580 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d  Offset;   /* Mem
1d590 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 68 6f  ory registers ho
1d5a0 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46  lding LIMIT & OF
1d5b0 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  FSET counters */
1d5c0 0a 20 20 75 33 32 20 73 65 6c 49 64 3b 20 20 20  .  u32 selId;   
1d5d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 6e 69            /* Uni
1d5e0 71 75 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e  que identifier n
1d5f0 75 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20 53  umber for this S
1d600 45 4c 45 43 54 20 2a 2f 0a 20 20 69 6e 74 20 61  ELECT */.  int a
1d610 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20  ddrOpenEphm[2]; 
1d620 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65    /* OP_OpenEphe
1d630 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65  m opcodes relate
1d640 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
1d650 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
1d660 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Src;         /* 
1d670 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  The FROM clause 
1d680 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
1d690 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  e;          /* T
1d6a0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1d6b0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1d6c0 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54  GroupBy;    /* T
1d6d0 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
1d6e0 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48  se */.  Expr *pH
1d6f0 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f  aving;         /
1d700 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61  * The HAVING cla
1d710 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
1d720 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20  t *pOrderBy;    
1d730 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
1d740 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65  clause */.  Sele
1d750 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20  ct *pPrior;     
1d760 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65     /* Prior sele
1d770 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
1d780 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
1d790 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  t */.  Select *p
1d7a0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
1d7b0 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20   Next select to 
1d7c0 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f  the left in a co
1d7d0 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72  mpound */.  Expr
1d7e0 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20   *pLimit;       
1d7f0 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72     /* LIMIT expr
1d800 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61  ession. NULL mea
1d810 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  ns not used. */.
1d820 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20    With *pWith;  
1d830 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48           /* WITH
1d840 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64   clause attached
1d850 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e   to this select.
1d860 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 23 69 66   Or NULL. */.#if
1d870 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1d880 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 57 69  _WINDOWFUNC.  Wi
1d890 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20 20  ndow *pWin;     
1d8a0 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
1d8b0 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73  window functions
1d8c0 20 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57   */.  Window *pW
1d8d0 69 6e 44 65 66 6e 3b 20 20 20 20 20 20 2f 2a 20  inDefn;      /* 
1d8e0 4c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 77 69  List of named wi
1d8f0 6e 64 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e 73  ndow definitions
1d900 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
1d910 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
1d920 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73  ues for Select.s
1d930 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53  elFlags.  The "S
1d940 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64 73  F" prefix stands
1d950 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20   for.** "Select 
1d960 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c  Flag"..**.** Val
1d970 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
1d980 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20  all checked via 
1d990 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20 20 20  assert()).**    
1d9a0 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20 3d   SF_HasAgg     =
1d9b0 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a 20 20  = NC_HasAgg.**  
1d9c0 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20     SF_MinMaxAgg 
1d9d0 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67   == NC_MinMaxAgg
1d9e0 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46       == SQLITE_F
1d9f0 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20 20  UNC_MINMAX.**   
1da00 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20    SF_FixedLimit 
1da10 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d  == WHERE_USE_LIM
1da20 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  IT.*/.#define SF
1da30 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20  _Distinct       
1da40 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75 74 70  0x00001  /* Outp
1da50 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53  ut should be DIS
1da60 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  TINCT */.#define
1da70 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20 20   SF_All         
1da80 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a 20 49     0x00002  /* I
1da90 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c 20  ncludes the ALL 
1daa0 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
1dab0 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20  ne SF_Resolved  
1dac0 20 20 20 20 20 30 78 30 30 30 30 34 20 20 2f 2a       0x00004  /*
1dad0 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76   Identifiers hav
1dae0 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20  e been resolved 
1daf0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67  */.#define SF_Ag
1db00 67 72 65 67 61 74 65 20 20 20 20 20 20 30 78 30  gregate      0x0
1db10 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0008  /* Contain
1db20 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e 73 20  s agg functions 
1db30 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f  or a GROUP BY */
1db40 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 41  .#define SF_HasA
1db50 67 67 20 20 20 20 20 20 20 20 20 30 78 30 30 30  gg         0x000
1db60 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  10  /* Contains 
1db70 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1db80 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ons */.#define S
1db90 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20  F_UsesEphemeral 
1dba0 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55 73 65   0x00020  /* Use
1dbb0 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65  s the OpenEpheme
1dbc0 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64  ral opcode */.#d
1dbd0 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65  efine SF_Expande
1dbe0 64 20 20 20 20 20 20 20 30 78 30 30 30 34 30 20  d       0x00040 
1dbf0 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63   /* sqlite3Selec
1dc00 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64  tExpand() called
1dc10 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66   on this */.#def
1dc20 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e  ine SF_HasTypeIn
1dc30 66 6f 20 20 20 20 30 78 30 30 30 38 30 20 20 2f  fo    0x00080  /
1dc40 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65  * FROM subquerie
1dc50 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74  s have Table met
1dc60 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65  adata */.#define
1dc70 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20   SF_Compound    
1dc80 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20 50     0x00100  /* P
1dc90 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e  art of a compoun
1dca0 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69  d query */.#defi
1dcb0 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20  ne SF_Values    
1dcc0 20 20 20 20 20 30 78 30 30 32 30 30 20 20 2f 2a       0x00200  /*
1dcd0 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f   Synthesized fro
1dce0 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20  m VALUES clause 
1dcf0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 75  */.#define SF_Mu
1dd00 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30 78 30  ltiValue     0x0
1dd10 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20  0400  /* Single 
1dd20 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74 68  VALUES term with
1dd30 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
1dd40 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73  /.#define SF_Nes
1dd50 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78 30 30  tedFrom     0x00
1dd60 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  800  /* Part of 
1dd70 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20  a parenthesized 
1dd80 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23  FROM clause */.#
1dd90 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78  define SF_MinMax
1dda0 41 67 67 20 20 20 20 20 20 30 78 30 31 30 30 30  Agg      0x01000
1ddb0 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63    /* Aggregate c
1ddc0 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20  ontaining min() 
1ddd0 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66  or max() */.#def
1dde0 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65  ine SF_Recursive
1ddf0 20 20 20 20 20 20 30 78 30 32 30 30 30 20 20 2f        0x02000  /
1de00 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20  * The recursive 
1de10 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73  part of a recurs
1de20 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69  ive CTE */.#defi
1de30 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74  ne SF_FixedLimit
1de40 20 20 20 20 20 30 78 30 34 30 30 30 20 20 2f 2a       0x04000  /*
1de50 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65 74 20   nSelectRow set 
1de60 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c 49  by a constant LI
1de70 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  MIT */.#define S
1de80 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20  F_MaybeConvert  
1de90 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e 65 65   0x08000  /* Nee
1dea0 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  d convertCompoun
1deb0 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1dec0 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  y() */.#define S
1ded0 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20  F_Converted     
1dee0 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42 79 20   0x10000  /* By 
1def0 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
1df00 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
1df10 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ) */.#define SF_
1df20 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20 30  IncludeHidden  0
1df30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c 75  x20000  /* Inclu
1df40 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  de hidden column
1df50 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 23  s in output */.#
1df60 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6c 65  define SF_Comple
1df70 78 52 65 73 75 6c 74 20 20 30 78 34 30 30 30 30  xResult  0x40000
1df80 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 6e 74    /* Result cont
1df90 61 69 6e 73 20 73 75 62 71 75 65 72 79 20 6f 72  ains subquery or
1dfa0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a   function */../*
1dfb0 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20  .** The results 
1dfc0 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20  of a SELECT can 
1dfd0 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20 69  be distributed i
1dfe0 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
1dff0 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79  as defined.** by
1e000 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
1e010 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54  owing macros.  T
1e020 68 65 20 22 53 52 54 22 20 70 72 65 66 69 78 20  he "SRT" prefix 
1e030 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65  means "SELECT Re
1e040 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a  sult.** Type"..*
1e050 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69  *.**     SRT_Uni
1e060 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  on       Store r
1e070 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20  esults as a key 
1e080 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69  in a temporary i
1e090 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20 20 20 20  ndex.**         
1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 69 64 65 6e              iden
1e0b0 74 69 66 69 65 64 20 62 79 20 70 44 65 73 74 2d  tified by pDest-
1e0c0 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20  >iSDParm..**.** 
1e0d0 20 20 20 20 53 52 54 5f 45 78 63 65 70 74 20 20      SRT_Except  
1e0e0 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c      Remove resul
1e0f0 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70  ts from the temp
1e100 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44 65 73  orary index pDes
1e110 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a  t->iSDParm..**.*
1e120 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73 74 73  *     SRT_Exists
1e130 20 20 20 20 20 20 53 74 6f 72 65 20 61 20 31 20        Store a 1 
1e140 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70  in memory cell p
1e150 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66  Dest->iSDParm if
1e160 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20   the result.**  
1e170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e180 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d     set is not em
1e190 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  pty..**.**     S
1e1a0 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 54  RT_Discard     T
1e1b0 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73  hrow the results
1e1c0 20 61 77 61 79 2e 20 20 54 68 69 73 20 69 73 20   away.  This is 
1e1d0 75 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a  used by SELECT.*
1e1e0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e1f0 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73        statements
1e200 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1e210 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70   whose only purp
1e220 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20  ose is.**       
1e230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1e240 65 20 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f  e side-effects o
1e250 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  f functions..**.
1e260 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62  ** All of the ab
1e270 6f 76 65 20 61 72 65 20 66 72 65 65 20 74 6f 20  ove are free to 
1e280 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44  ignore their ORD
1e290 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68  ER BY clause. Th
1e2a0 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c  ose that.** foll
1e2b0 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68  ow must honor th
1e2c0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1e2d0 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  e..**.**     SRT
1e2e0 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47 65 6e  _Output      Gen
1e2f0 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f  erate a row of o
1e300 75 74 70 75 74 20 28 75 73 69 6e 67 20 74 68 65  utput (using the
1e310 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a   OP_ResultRow.**
1e320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e330 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72       opcode) for
1e340 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65   each row in the
1e350 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a   result set..**.
1e360 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20  **     SRT_Mem  
1e370 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69         Only vali
1e380 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
1e390 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  is a single colu
1e3a0 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  mn..**          
1e3b0 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 72 65             Store
1e3c0 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d   the first colum
1e3d0 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 72  n of the first r
1e3e0 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20  esult row.**    
1e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e400 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65   in register pDe
1e410 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e  st->iSDParm then
1e420 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73   abandon the res
1e430 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1e440 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
1e450 71 75 65 72 79 2e 20 20 54 68 69 73 20 64 65 73  query.  This des
1e460 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73  tination implies
1e470 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a   "LIMIT 1"..**.*
1e480 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20 20 20  *     SRT_Set   
1e490 20 20 20 20 20 20 54 68 65 20 72 65 73 75 6c 74        The result
1e4a0 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c   must be a singl
1e4b0 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65  e column.  Store
1e4c0 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20   each.**        
1e4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
1e4e0 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74 68   of result as th
1e4f0 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70  e key in table p
1e500 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1e510 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e520 20 20 20 20 20 20 41 70 70 6c 79 20 74 68 65 20        Apply the 
1e530 61 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e  affinity pDest->
1e540 61 66 66 53 64 73 74 20 62 65 66 6f 72 65 20 73  affSdst before s
1e550 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20  toring.**       
1e560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1e570 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20  sults.  Used to 
1e580 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53  implement "IN (S
1e590 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a  ELECT ...)"..**.
1e5a0 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d  **     SRT_Ephem
1e5b0 54 61 62 20 20 20 20 43 72 65 61 74 65 20 61 6e  Tab    Create an
1e5c0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1e5d0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1e5e0 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20  and store.**    
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e600 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 65 72   the result ther
1e610 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  e. The cursor is
1e620 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72   left open after
1e630 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e640 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e          returnin
1e650 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65  g.  This is like
1e660 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70   SRT_Table excep
1e670 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20  t that.**       
1e680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1e690 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75  is destination u
1e6a0 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ses OP_OpenEphem
1e6b0 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a  eral to create.*
1e6c0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e6d0 20 20 20 20 20 20 74 68 65 20 74 61 62 6c 65 20        the table 
1e6e0 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  first..**.**    
1e6f0 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
1e700 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72   Generate a co-r
1e710 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65 74 75  outine that retu
1e720 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66  rns a new row of
1e730 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e740 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 20          results 
1e750 65 61 63 68 20 74 69 6d 65 20 69 74 20 69 73 20  each time it is 
1e760 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e  invoked.  The en
1e770 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20  try point.**    
1e780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e790 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69   of the co-routi
1e7a0 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ne is stored in 
1e7b0 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e  register pDest->
1e7c0 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20  iSDParm.**      
1e7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1e7e0 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f  nd the result ro
1e7f0 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70  w is stored in p
1e800 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69  Dest->nDest regi
1e810 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20  sters.**        
1e820 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1e830 72 74 69 6e 67 20 77 69 74 68 20 70 44 65 73 74  rting with pDest
1e840 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  ->iSdst..**.**  
1e850 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20     SRT_Table    
1e860 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1e870 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61   in temporary ta
1e880 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1e890 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46  rm..**     SRT_F
1e8a0 69 66 6f 20 20 20 20 20 20 20 20 54 68 69 73 20  ifo        This 
1e8b0 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65  is like SRT_Ephe
1e8c0 6d 54 61 62 20 65 78 63 65 70 74 20 74 68 61 74  mTab except that
1e8d0 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20   the table.**   
1e8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8f0 20 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20    is assumed to 
1e900 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e  already be open.
1e910 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a    SRT_Fifo has.*
1e920 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e930 20 20 20 20 20 20 74 68 65 20 61 64 64 69 74 69        the additi
1e940 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66  onal property of
1e950 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69   being able to i
1e960 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  gnore.**        
1e970 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1e980 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1e990 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1e9a0 44 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72  DistFifo    Stor
1e9b0 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74  e results in a t
1e9c0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1e9d0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1e9e0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e9f0 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75        But also u
1ea00 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  se temporary tab
1ea10 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1ea20 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20  m+1 as.**       
1ea30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 20                a 
1ea40 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72  record of all pr
1ea50 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20  ior results and 
1ea60 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69  ignore any dupli
1ea70 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  cate.**         
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 73              rows
1ea90 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20  .  Name means:  
1eaa0 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e  "Distinct Fifo".
1eab0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51  .**.**     SRT_Q
1eac0 75 65 75 65 20 20 20 20 20 20 20 53 74 6f 72 65  ueue       Store
1ead0 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f   results in prio
1eae0 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74  rity queue pDest
1eaf0 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c  ->iSDParm (reall
1eb00 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  y.**            
1eb10 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65           an inde
1eb20 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65  x).  Append a se
1eb30 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f  quence number so
1eb40 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65   that all entrie
1eb50 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1eb60 20 20 20 20 20 20 20 20 20 61 72 65 20 64 69 73           are dis
1eb70 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  tinct..**.**    
1eb80 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20   SRT_DistQueue  
1eb90 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1eba0 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65  n priority queue
1ebb0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1ebc0 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20  only if.**      
1ebd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ebe0 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68  he same record h
1ebf0 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74  as never been st
1ec00 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68  ored before.  Th
1ec10 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1ec20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 61           index a
1ec30 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  t pDest->iSDParm
1ec40 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f  +1 hold all prio
1ec50 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65  r stores..*/.#de
1ec60 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20  fine SRT_Union  
1ec70 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72        1  /* Stor
1ec80 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73  e result as keys
1ec90 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
1eca0 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65  #define SRT_Exce
1ecb0 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52  pt       2  /* R
1ecc0 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f  emove result fro
1ecd0 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20  m a UNION index 
1ece0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1ecf0 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20 2f  xists       3  /
1ed00 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65  * Store 1 if the
1ed10 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65   result is not e
1ed20 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
1ed30 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
1ed40 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61   4  /* Do not sa
1ed50 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ve the results a
1ed60 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  nywhere */.#defi
1ed70 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20  ne SRT_Fifo     
1ed80 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20      5  /* Store 
1ed90 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
1eda0 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
1edb0 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
1edc0 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20  e SRT_DistFifo  
1edd0 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52     6  /* Like SR
1ede0 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71  T_Fifo, but uniq
1edf0 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20  ue results only 
1ee00 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51  */.#define SRT_Q
1ee10 75 65 75 65 20 20 20 20 20 20 20 20 37 20 20 2f  ueue        7  /
1ee20 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
1ee30 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64  n an queue */.#d
1ee40 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75  efine SRT_DistQu
1ee50 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b  eue    8  /* Lik
1ee60 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74  e SRT_Queue, but
1ee70 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20   unique results 
1ee80 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20  only */../* The 
1ee90 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
1eea0 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61  is ignored for a
1eeb0 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ll of the above 
1eec0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72  */.#define Ignor
1eed0 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28  ableOrderby(X) (
1eee0 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f  (X->eDest)<=SRT_
1eef0 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66  DistQueue)..#def
1ef00 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20  ine SRT_Output  
1ef10 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75       9  /* Outpu
1ef20 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65  t each row of re
1ef30 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sult */.#define 
1ef40 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
1ef50 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  10  /* Store res
1ef60 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20  ult in a memory 
1ef70 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cell */.#define 
1ef80 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
1ef90 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  11  /* Store res
1efa0 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20  ults as keys in 
1efb0 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
1efc0 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ine SRT_EphemTab
1efd0 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74      12  /* Creat
1efe0 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20  e transient tab 
1eff0 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53  and store like S
1f000 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66  RT_Table */.#def
1f010 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e  ine SRT_Coroutin
1f020 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72  e   13  /* Gener
1f030 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ate a single row
1f040 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
1f050 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20  efine SRT_Table 
1f060 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f        14  /* Sto
1f070 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74  re result as dat
1f080 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61  a with an automa
1f090 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a  tic rowid */../*
1f0a0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1f0b0 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64  of this object d
1f0c0 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74  escribes where t
1f0d0 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73  o put of the res
1f0e0 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c  ults of.** a SEL
1f0f0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
1f100 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44  /.struct SelectD
1f110 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74  est {.  u8 eDest
1f120 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1f130 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f  How to dispose o
1f140 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20  f the results.  
1f150 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76  On of SRT_* abov
1f160 65 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50  e. */.  int iSDP
1f170 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  arm;         /* 
1f180 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64  A parameter used
1f190 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69   by the eDest di
1f1a0 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f  sposal method */
1f1b0 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20  .  int iSdst;   
1f1c0 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
1f1d0 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72  register where r
1f1e0 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74  esults are writt
1f1f0 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73  en */.  int nSds
1f200 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
1f210 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  Number of regist
1f220 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  ers allocated */
1f230 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 53 64 73  .  char *zAffSds
1f240 74 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e  t;      /* Affin
1f250 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65 44  ity used when eD
1f260 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a  est==SRT_Set */.
1f270 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64    ExprList *pOrd
1f280 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f  erBy;  /* Key co
1f290 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75  lumns for SRT_Qu
1f2a0 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74  eue and SRT_Dist
1f2b0 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  Queue */.};../*.
1f2c0 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67  ** During code g
1f2d0 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61  eneration of sta
1f2e0 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20  tements that do 
1f2f0 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54  inserts into AUT
1f300 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61  OINCREMENT.** ta
1f310 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  bles, the follow
1f320 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
1f330 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
1f340 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49  he Table.u.autoI
1f350 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  nc.p.** pointer 
1f360 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72  of each autoincr
1f370 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72  ement table to r
1f380 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20  ecord some side 
1f390 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
1f3a0 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e  .** the code gen
1f3b0 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57  erator needs.  W
1f3c0 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70  e have to keep p
1f3d0 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63  er-table autoinc
1f3e0 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d  rement.** inform
1f3f0 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e  ation in case in
1f400 73 65 72 74 73 20 61 72 65 20 64 6f 6e 65 20 77  serts are done w
1f410 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20  ithin triggers. 
1f420 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74   Triggers do not
1f430 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f  .** normally coo
1f440 72 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63  rdinate their ac
1f450 74 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65  tivities, but we
1f460 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72   do need to coor
1f470 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f  dinate the.** lo
1f480 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67  ading and saving
1f490 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   of autoincremen
1f4a0 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  t information..*
1f4b0 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63  /.struct Autoinc
1f4c0 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63  Info {.  Autoinc
1f4d0 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f  Info *pNext;   /
1f4e0 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63  * Next info bloc
1f4f0 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74  k in a list of t
1f500 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62  hem all */.  Tab
1f510 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
1f520 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73     /* Table this
1f530 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65   info block refe
1f540 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69  rs to */.  int i
1f550 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
1f560 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c   /* Index in sql
1f570 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61  ite3.aDb[] of da
1f580 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70  tabase holding p
1f590 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  Tab */.  int reg
1f5a0 43 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Ctr;           /
1f5b0 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
1f5c0 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f  r holding the ro
1f5d0 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d  wid counter */.}
1f5e0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73  ;../*.** At leas
1f5f0 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  t one instance o
1f600 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1f610 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65  structure is cre
1f620 61 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a  ated for each.**
1f630 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61   trigger that ma
1f640 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65  y be fired while
1f650 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45   parsing an INSE
1f660 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
1f670 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  LETE.** statemen
1f680 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65  t. All such obje
1f690 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  cts are stored i
1f6a0 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  n the linked lis
1f6b0 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50  t headed at.** P
1f6c0 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1f6d0 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63   and deleted onc
1f6e0 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70  e statement comp
1f6f0 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e  ilation has been
1f700 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a  .** completed..*
1f710 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d  *.** A Vdbe sub-
1f720 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70  program that imp
1f730 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79  lements the body
1f740 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65   and WHEN clause
1f750 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54   of trigger.** T
1f760 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67  riggerPrg.pTrigg
1f770 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64  er, assuming a d
1f780 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1f790 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20  CT clause of.** 
1f7a0 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e  TriggerPrg.orcon
1f7b0 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  f, is stored in 
1f7c0 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70  the TriggerPrg.p
1f7d0 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65  Program variable
1f7e0 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70  ..** The Parse.p
1f7f0 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
1f800 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74  never contains t
1f810 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20  wo entries with 
1f820 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75  the same.** valu
1f830 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69  es for both pTri
1f840 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e  gger and orconf.
1f850 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67  .**.** The Trigg
1f860 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30  erPrg.aColmask[0
1f870 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
1f880 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f  t to a mask of o
1f890 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  ld.* columns.** 
1f8a0 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74  accessed (or set
1f8b0 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65   to 0 for trigge
1f8c0 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65  rs fired as a re
1f8d0 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a  sult of INSERT.*
1f8e0 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53  * statements). S
1f8f0 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72  imilarly, the Tr
1f900 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
1f910 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[1] variable is
1f920 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73   set to.** a mas
1f930 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1f940 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  ns used by the p
1f950 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63  rogram..*/.struc
1f960 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20  t TriggerPrg {. 
1f970 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
1f980 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67  er;      /* Trig
1f990 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d  ger this program
1f9a0 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20   was coded from 
1f9b0 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
1f9c0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
1f9d0 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61  Next entry in Pa
1f9e0 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1f9f0 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f  list */.  SubPro
1fa00 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
1fa10 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70    /* Program imp
1fa20 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67  lementing pTrigg
1fa30 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69  er/orconf */.  i
1fa40 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  nt orconf;      
1fa50 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1fa60 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1fa70 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43  licy */.  u32 aC
1fa80 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20  olmask[2];      
1fa90 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c    /* Masks of ol
1faa0 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  d.*, new.* colum
1fab0 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d  ns accessed */.}
1fac0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62  ;../*.** The yDb
1fad0 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f  Mask datatype fo
1fae0 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66  r the bitmask of
1faf0 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
1fb00 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20  tabases..*/.#if 
1fb10 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1fb20 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66  HED>30.  typedef
1fb30 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79   unsigned char y
1fb40 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d  DbMask[(SQLITE_M
1fb50 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38  AX_ATTACHED+9)/8
1fb60 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  ];.# define DbMa
1fb70 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
1fb80 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c  ((M)[(I)/8]&(1<<
1fb90 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20  ((I)&7)))!=0).# 
1fba0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
1fbb0 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74  o(M)      memset
1fbc0 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29  ((M),0,sizeof(M)
1fbd0 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1fbe0 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
1fbf0 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28  )[(I)/8]|=(1<<((
1fc00 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20  I)&7)).# define 
1fc10 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1fc20 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b     sqlite3DbMask
1fc30 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66  AllZero(M).# def
1fc40 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
1fc50 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44  o(M)   (sqlite3D
1fc60 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d  bMaskAllZero(M)=
1fc70 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  =0).#else.  type
1fc80 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  def unsigned int
1fc90 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69   yDbMask;.# defi
1fca0 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
1fcb0 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79  I)    (((M)&(((y
1fcc0 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29  DbMask)1)<<(I)))
1fcd0 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
1fce0 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
1fcf0 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20   (M)=0.# define 
1fd00 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1fd10 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61     (M)|=(((yDbMa
1fd20 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65  sk)1)<<(I)).# de
1fd30 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1fd40 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23  ro(M)   (M)==0.#
1fd50 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
1fd60 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d  nZero(M)   (M)!=
1fd70 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
1fd80 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f  An SQL parser co
1fd90 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f  ntext.  A copy o
1fda0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
1fdb0 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75   is passed throu
1fdc0 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72  gh.** the parser
1fdd0 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61   and down into a
1fde0 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63  ll the parser ac
1fdf0 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20  tion routine in 
1fe00 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72  order to.** carr
1fe10 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61  y around informa
1fe20 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f  tion that is glo
1fe30 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72  bal to the entir
1fe40 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  e parse..**.** T
1fe50 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  he structure is 
1fe60 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f  divided into two
1fe70 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68   parts.  When th
1fe80 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64  e parser and cod
1fe90 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61  e.** generate ca
1fea0 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65  ll themselves re
1feb0 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66  cursively, the f
1fec0 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
1fed0 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73   structure.** is
1fee0 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68   constant but th
1fef0 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73  e second part is
1ff00 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65   reset at the be
1ff10 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20  ginning and end 
1ff20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72  of.** each recur
1ff30 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sion..**.** The 
1ff40 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61  nTableLock and a
1ff50 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62  TableLock variab
1ff60 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
1ff70 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d  d if the shared-
1ff80 63 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72 65  cache.** feature
1ff90 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20   is enabled (if 
1ffa0 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73  sqlite3Tsd()->us
1ffb0 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74  eSharedData is t
1ffc0 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a  rue). They are.*
1ffd0 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
1ffe0 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65  the set of table
1fff0 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20  -locks required 
20000 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  by the statement
20010 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c   being.** compil
20020 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c  ed. Function sql
20030 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20  ite3TableLock() 
20040 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65  is used to add e
20050 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a  ntries to the.**
20060 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74   list..*/.struct
20070 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74   Parse {.  sqlit
20080 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
20090 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61  /* The main data
200a0 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  base structure *
200b0 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  /.  char *zErrMs
200c0 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65  g;       /* An e
200d0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
200e0 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20    Vdbe *pVdbe;  
200f0 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67         /* An eng
20100 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e  ine for executin
20110 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63  g database bytec
20120 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  ode */.  int rc;
20130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20140 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
20150 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20  m execution */. 
20160 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b   u8 colNamesSet;
20170 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66        /* TRUE af
20180 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d  ter OP_ColumnNam
20190 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65  e has been issue
201a0 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20  d to pVdbe */.  
201b0 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20  u8 checkSchema; 
201c0 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73       /* Causes s
201d0 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65  chema cookie che
201e0 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
201f0 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64  r */.  u8 nested
20200 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
20210 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
20220 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72  calls to the par
20230 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74  ser/code generat
20240 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70  or */.  u8 nTemp
20250 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
20260 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72  Number of tempor
20270 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e  ary registers in
20280 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20   aTempReg[] */. 
20290 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65   u8 isMultiWrite
202a0 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
202b0 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d   statement may m
202c0 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c  odify/insert mul
202d0 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20  tiple rows */.  
202e0 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20  u8 mayAbort;    
202f0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
20300 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68  statement may th
20310 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
20320 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68  eption */.  u8 h
20330 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20  asCompound;     
20340 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f   /* Need to invo
20350 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ke convertCompou
20360 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
20370 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43  ry() */.  u8 okC
20380 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f  onstFactor;    /
20390 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f  * OK to factor o
203a0 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a  ut constants */.
203b0 20 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b    u8 disableLook
203c0 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72  aside; /* Number
203d0 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73   of times lookas
203e0 69 64 65 20 68 61 73 20 62 65 65 6e 20 64 69 73  ide has been dis
203f0 61 62 6c 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  abled */.  int n
20400 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
20410 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74  /* Size of the t
20420 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
20430 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
20440 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20   iRangeReg;     
20450 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73    /* First regis
20460 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  ter in temporary
20470 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
20480 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
20490 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
204a0 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65  ber of errors se
204b0 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62  en */.  int nTab
204c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
204d0 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f  Number of previo
204e0 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56  usly allocated V
204f0 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20  DBE cursors */. 
20500 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
20510 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20520 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
20530 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
20540 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20   int nOpAlloc;  
20550 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20560 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74  of slots allocat
20570 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b  ed for Vdbe.aOp[
20580 5d 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41  ] */.  int szOpA
20590 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 42  lloc;       /* B
205a0 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73  ytes of memory s
205b0 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 66  pace allocated f
205c0 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f  or Vdbe.aOp[] */
205d0 0a 20 20 69 6e 74 20 69 53 65 6c 66 54 61 62 3b  .  int iSelfTab;
205e0 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
205f0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
20600 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 65 78 70   an index on exp
20610 72 2c 20 6f 72 20 6e 65 67 61 74 69 76 65 0a 20  r, or negative. 
20620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20630 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20        ** of the 
20640 62 61 73 65 20 72 65 67 69 73 74 65 72 20 64 75  base register du
20650 72 69 6e 67 20 63 68 65 63 6b 2d 63 6f 6e 73 74  ring check-const
20660 72 61 69 6e 74 20 65 76 61 6c 20 2a 2f 0a 20 20  raint eval */.  
20670 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20  int nLabel;     
20680 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
20690 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f  f labels used */
206a0 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20  .  int *aLabel; 
206b0 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
206c0 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62   to hold the lab
206d0 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  els */.  ExprLis
206e0 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a  t *pConstExpr;/*
206f0 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
20700 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  sions */.  Token
20710 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b   constraintName;
20720 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
20730 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e  onstraint curren
20740 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64  tly being parsed
20750 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72   */.  yDbMask wr
20760 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74  iteMask;   /* St
20770 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e  art a write tran
20780 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65  saction on these
20790 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
207a0 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61  yDbMask cookieMa
207b0 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20  sk;  /* Bitmask 
207c0 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69  of schema verifi
207d0 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  ed databases */.
207e0 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20    int regRowid; 
207f0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
20800 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64  er holding rowid
20810 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45   of CREATE TABLE
20820 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20   entry */.  int 
20830 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20  regRoot;        
20840 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
20850 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e  ding root page n
20860 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62  umber for new ob
20870 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  jects */.  int n
20880 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20  MaxArg;         
20890 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73  /* Max args pass
208a0 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ed to user funct
208b0 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72  ion by sub-progr
208c0 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c  am */.  int nSel
208d0 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ect;         /* 
208e0 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54  Number of SELECT
208f0 20 73 74 6d 74 73 2e 20 43 6f 75 6e 74 65 72 20   stmts. Counter 
20900 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 49 64  for Select.selId
20910 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
20920 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
20930 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c  ACHE.  int nTabl
20940 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a  eLock;        /*
20950 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73   Number of locks
20960 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a   in aTableLock *
20970 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61  /.  TableLock *a
20980 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65  TableLock; /* Re
20990 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63  quired table loc
209a0 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61  ks for shared-ca
209b0 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64  che mode */.#end
209c0 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f  if.  AutoincInfo
209d0 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66   *pAinc;  /* Inf
209e0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41  ormation about A
209f0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75  UTOINCREMENT cou
20a00 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61 72 73 65  nters */.  Parse
20a10 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20   *pToplevel;    
20a20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75  /* Parse structu
20a30 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67  re for main prog
20a40 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f  ram (or NULL) */
20a50 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67  .  Table *pTrigg
20a60 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65  erTab;  /* Table
20a70 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65   triggers are be
20a80 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f  ing coded for */
20a90 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61 62  .  int addrCrTab
20aa0 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65  ;       /* Addre
20ab0 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 42  ss of OP_CreateB
20ac0 74 72 65 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43  tree opcode on C
20ad0 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20  REATE TABLE */. 
20ae0 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b   u32 nQueryLoop;
20af0 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d        /* Est num
20b00 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e  ber of iteration
20b10 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30  s of a query (10
20b20 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75  *log2(N)) */.  u
20b30 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20  32 oldmask;     
20b40 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f      /* Mask of o
20b50 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ld.* columns ref
20b60 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32  erenced */.  u32
20b70 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20   newmask;       
20b80 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77    /* Mask of new
20b90 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
20ba0 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54  enced */.  u8 eT
20bb0 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20  riggerOp;       
20bc0 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  /* TK_UPDATE, TK
20bd0 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45  _INSERT or TK_DE
20be0 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72  LETE */.  u8 eOr
20bf0 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  conf;          /
20c00 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
20c10 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72  FLICT policy for
20c20 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a   trigger steps *
20c30 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72  /.  u8 disableTr
20c40 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65  iggers;  /* True
20c50 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67   to disable trig
20c60 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a  gers */..  /****
20c70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20c80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20c90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20ca0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20cb0 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65 6c  ******.  ** Fiel
20cc0 64 73 20 61 62 6f 76 65 20 6d 75 73 74 20 62 65  ds above must be
20cd0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
20ce0 7a 65 72 6f 2e 20 20 54 68 65 20 66 69 65 6c 64  zero.  The field
20cf0 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a 20  s that follow,. 
20d00 20 2a 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65 20   ** down to the 
20d10 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
20d20 20 72 65 63 75 72 73 69 76 65 20 73 65 63 74 69   recursive secti
20d30 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20  on, do not need 
20d40 74 6f 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74 69  to be.  ** initi
20d50 61 6c 69 7a 65 64 20 61 73 20 74 68 65 79 20 77  alized as they w
20d60 69 6c 6c 20 62 65 20 73 65 74 20 62 65 66 6f 72  ill be set befor
20d70 65 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20 54  e being used.  T
20d80 68 65 20 62 6f 75 6e 64 61 72 79 20 69 73 0a 20  he boundary is. 
20d90 20 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62   ** determined b
20da0 79 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  y offsetof(Parse
20db0 2c 61 54 65 6d 70 52 65 67 29 2e 0a 20 20 2a 2a  ,aTempReg)..  **
20dc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20dd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20de0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20df0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e00 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74  ********/..  int
20e10 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20   aTempReg[8];   
20e20 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20       /* Holding 
20e30 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61  area for tempora
20e40 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a  ry registers */.
20e50 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b    Token sNameTok
20e60 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b  en;       /* Tok
20e70 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66  en with unqualif
20e80 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  ied schema objec
20e90 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a 2a  t name */..  /**
20ea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20eb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20ec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20ed0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20ee0 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76  ******.  ** Abov
20ef0 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65  e is constant be
20f00 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73  tween recursions
20f10 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65  .  Below is rese
20f20 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74  t before and aft
20f30 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63  er.  ** each rec
20f40 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75  ursion.  The bou
20f50 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74 68  ndary between th
20f60 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20  ese two regions 
20f70 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20  is determined.  
20f80 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f  ** using offseto
20f90 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b  f(Parse,sLastTok
20fa0 65 6e 29 20 73 6f 20 74 68 65 20 73 4c 61 73 74  en) so the sLast
20fb0 54 6f 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73 74  Token field must
20fc0 20 62 65 20 74 68 65 0a 20 20 2a 2a 20 66 69 72   be the.  ** fir
20fd0 73 74 20 66 69 65 6c 64 20 69 6e 20 74 68 65 20  st field in the 
20fe0 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e  recursive region
20ff0 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
21000 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21010 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21020 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21030 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
21040 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65   Token sLastToke
21050 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  n;       /* The 
21060 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65  last token parse
21070 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56 61  d */.  ynVar nVa
21080 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
21090 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f   /* Number of '?
210a0 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e  ' variables seen
210b0 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66   in the SQL so f
210c0 61 72 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f  ar */.  u8 iPkSo
210d0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
210e0 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43    /* ASC or DESC
210f0 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49   for INTEGER PRI
21100 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38  MARY KEY */.  u8
21110 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20   explain;       
21120 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
21130 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66  if the EXPLAIN f
21140 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20  lag is found on 
21150 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66  the query */.#if
21160 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
21170 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
21180 4c 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  LE) && !defined(
21190 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45  SQLITE_OMIT_ALTE
211a0 52 54 41 42 4c 45 29 0a 20 20 75 38 20 65 50 61  RTABLE).  u8 ePa
211b0 72 73 65 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  rseMode;        
211c0 20 20 20 20 2f 2a 20 50 41 52 53 45 5f 4d 4f 44      /* PARSE_MOD
211d0 45 5f 58 58 58 20 63 6f 6e 73 74 61 6e 74 20 2a  E_XXX constant *
211e0 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
211f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
21200 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
21210 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  nVtabLock;      
21220 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21230 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  of virtual table
21240 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e  s to lock */.#en
21250 64 69 66 0a 20 20 69 6e 74 20 6e 48 65 69 67 68  dif.  int nHeigh
21260 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
21270 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72  /* Expression tr
21280 65 65 20 68 65 69 67 68 74 20 6f 66 20 63 75 72  ee height of cur
21290 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20  rent sub-select 
212a0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
212b0 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20  E_OMIT_EXPLAIN. 
212c0 20 69 6e 74 20 61 64 64 72 45 78 70 6c 61 69 6e   int addrExplain
212d0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 64  ;          /* Ad
212e0 64 72 65 73 73 20 6f 66 20 63 75 72 72 65 6e 74  dress of current
212f0 20 4f 50 5f 45 78 70 6c 61 69 6e 20 6f 70 63 6f   OP_Explain opco
21300 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 56  de */.#endif.  V
21310 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b 20 20 20  List *pVList;   
21320 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 70 70           /* Mapp
21330 69 6e 67 20 62 65 74 77 65 65 6e 20 76 61 72 69  ing between vari
21340 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e 64 20 6e  able names and n
21350 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56 64 62 65  umbers */.  Vdbe
21360 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20 20   *pReprepare;   
21370 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e        /* VM bein
21380 67 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71  g reprepared (sq
21390 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29  lite3Reprepare()
213a0 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  ) */.  const cha
213b0 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20  r *zTail;       
213c0 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74   /* All SQL text
213d0 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 73   past the last s
213e0 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20  emicolon parsed 
213f0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77  */.  Table *pNew
21400 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f  Table;         /
21410 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20  * A table being 
21420 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43  constructed by C
21430 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20  REATE TABLE */. 
21440 20 49 6e 64 65 78 20 2a 70 4e 65 77 49 6e 64 65   Index *pNewInde
21450 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e  x;         /* An
21460 20 69 6e 64 65 78 20 62 65 69 6e 67 20 63 6f 6e   index being con
21470 73 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41  structed by CREA
21480 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20 54 72  TE INDEX */.  Tr
21490 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67  igger *pNewTrigg
214a0 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67  er;     /* Trigg
214b0 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75  er under constru
214c0 63 74 20 62 79 20 61 20 43 52 45 41 54 45 20 54  ct by a CREATE T
214d0 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73  RIGGER */.  cons
214e0 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
214f0 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68  text; /* The 6th
21500 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62   parameter to db
21510 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b  ->xAuth callback
21520 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  s */.#ifndef SQL
21530 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
21540 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41  TABLE.  Token sA
21550 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
21560 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65    /* Complete te
21570 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61  xt of a module a
21580 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62  rgument */.  Tab
21590 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b  le **apVtabLock;
215a0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
215b0 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62  r to virtual tab
215c0 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b  les needing lock
215d0 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ing */.#endif.  
215e0 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61  Table *pZombieTa
215f0 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  b;        /* Lis
21600 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63  t of Table objec
21610 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74  ts to delete aft
21620 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20  er code gen */. 
21630 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72   TriggerPrg *pTr
21640 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69  iggerPrg;  /* Li
21650 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64  nked list of cod
21660 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20  ed triggers */. 
21670 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
21680 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
21690 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73  rrent WITH claus
216a0 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
216b0 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72 65  With *pWithToFre
216c0 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72 65  e;        /* Fre
216d0 65 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a 65  e this WITH obje
216e0 63 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ct at the end of
216f0 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 23 69   the parse */.#i
21700 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21710 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 52  T_ALTERTABLE.  R
21720 65 6e 61 6d 65 54 6f 6b 65 6e 20 2a 70 52 65 6e  enameToken *pRen
21730 61 6d 65 3b 20 20 20 20 20 2f 2a 20 54 6f 6b 65  ame;     /* Toke
21740 6e 73 20 73 75 62 6a 65 63 74 20 74 6f 20 72 65  ns subject to re
21750 6e 61 6d 69 6e 67 20 62 79 20 41 4c 54 45 52 20  naming by ALTER 
21760 54 41 42 4c 45 20 2a 2f 0a 23 65 6e 64 69 66 0a  TABLE */.#endif.
21770 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 50 41 52 53  };..#define PARS
21780 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 20 20 20  E_MODE_NORMAL   
21790 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 50       0.#define P
217a0 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c 41 52  ARSE_MODE_DECLAR
217b0 45 5f 56 54 41 42 20 20 31 0a 23 64 65 66 69 6e  E_VTAB  1.#defin
217c0 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e  e PARSE_MODE_REN
217d0 41 4d 45 5f 43 4f 4c 55 4d 4e 20 32 0a 0a 2f 2a  AME_COLUMN 2../*
217e0 0a 2a 2a 20 53 69 7a 65 73 20 61 6e 64 20 70 6f  .** Sizes and po
217f0 69 6e 74 65 72 73 20 6f 66 20 76 61 72 69 6f 75  inters of variou
21800 73 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 50  s parts of the P
21810 61 72 73 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a  arse object..*/.
21820 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 48 44  #define PARSE_HD
21830 52 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61  R_SZ offsetof(Pa
21840 72 73 65 2c 61 54 65 6d 70 52 65 67 29 20 2f 2a  rse,aTempReg) /*
21850 20 52 65 63 75 72 73 69 76 65 20 70 61 72 74 20   Recursive part 
21860 77 2f 6f 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a  w/o aColCache*/.
21870 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 52 45  #define PARSE_RE
21880 43 55 52 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f  CURSE_SZ offseto
21890 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b  f(Parse,sLastTok
218a0 65 6e 29 20 20 20 20 2f 2a 20 52 65 63 75 72 73  en)    /* Recurs
218b0 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66  ive part */.#def
218c0 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c 5f 53  ine PARSE_TAIL_S
218d0 5a 20 28 73 69 7a 65 6f 66 28 50 61 72 73 65 29  Z (sizeof(Parse)
218e0 2d 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53  -PARSE_RECURSE_S
218f0 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73  Z) /* Non-recurs
21900 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66  ive part */.#def
21910 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c 28 58  ine PARSE_TAIL(X
21920 29 20 28 28 28 63 68 61 72 2a 29 28 58 29 29 2b  ) (((char*)(X))+
21930 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a  PARSE_RECURSE_SZ
21940 29 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f  )  /* Pointer to
21950 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   tail */../*.** 
21960 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63  Return true if c
21970 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20  urrently inside 
21980 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  an sqlite3_decla
21990 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a  re_vtab() call..
219a0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
219b0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
219c0 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  LE.  #define IN_
219d0 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23  DECLARE_VTAB 0.#
219e0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49  else.  #define I
219f0 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28  N_DECLARE_VTAB (
21a00 70 50 61 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f  pParse->eParseMo
21a10 64 65 3d 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 44  de==PARSE_MODE_D
21a20 45 43 4c 41 52 45 5f 56 54 41 42 29 0a 23 65 6e  ECLARE_VTAB).#en
21a30 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
21a40 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54  (SQLITE_OMIT_ALT
21a50 45 52 54 41 42 4c 45 29 0a 20 20 23 64 65 66 69  ERTABLE).  #defi
21a60 6e 65 20 49 4e 5f 52 45 4e 41 4d 45 5f 43 4f 4c  ne IN_RENAME_COL
21a70 55 4d 4e 20 30 0a 23 65 6c 73 65 0a 20 20 23 64  UMN 0.#else.  #d
21a80 65 66 69 6e 65 20 49 4e 5f 52 45 4e 41 4d 45 5f  efine IN_RENAME_
21a90 43 4f 4c 55 4d 4e 20 28 70 50 61 72 73 65 2d 3e  COLUMN (pParse->
21aa0 65 50 61 72 73 65 4d 6f 64 65 3d 3d 50 41 52 53  eParseMode==PARS
21ab0 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f  E_MODE_RENAME_CO
21ac0 4c 55 4d 4e 29 0a 23 65 6e 64 69 66 0a 0a 23 69  LUMN).#endif..#i
21ad0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
21ae0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
21af0 4c 45 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  LE) && defined(S
21b00 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
21b10 54 41 42 4c 45 29 0a 20 20 23 64 65 66 69 6e 65  TABLE).  #define
21b20 20 49 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52 53   IN_SPECIAL_PARS
21b30 45 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  E 0.#else.  #def
21b40 69 6e 65 20 49 4e 5f 53 50 45 43 49 41 4c 5f 50  ine IN_SPECIAL_P
21b50 41 52 53 45 20 28 70 50 61 72 73 65 2d 3e 65 50  ARSE (pParse->eP
21b60 61 72 73 65 4d 6f 64 65 21 3d 50 41 52 53 45 5f  arseMode!=PARSE_
21b70 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 29 0a 23 65 6e  MODE_NORMAL).#en
21b80 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
21b90 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
21ba0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
21bb0 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65  e can be declare
21bc0 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64  d on a stack and
21bd0 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65   used.** to save
21be0 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68   the Parse.zAuth
21bf0 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f  Context value so
21c00 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
21c10 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a  restored later..
21c20 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f  */.struct AuthCo
21c30 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20  ntext {.  const 
21c40 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
21c50 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76  xt;   /* Put sav
21c60 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  ed Parse.zAuthCo
21c70 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20  ntext here */.  
21c80 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
21c90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
21ca0 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75  he Parse structu
21cb0 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  re */.};../*.** 
21cc0 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66  Bitfield flags f
21cd0 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76  or P5 value in v
21ce0 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a  arious opcodes..
21cf0 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
21d00 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
21d10 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
21d20 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45  .**    OPFLAG_LE
21d30 4e 47 54 48 41 52 47 20 20 20 20 3d 3d 20 53 51  NGTHARG    == SQ
21d40 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48  LITE_FUNC_LENGTH
21d50 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 54 59  .**    OPFLAG_TY
21d60 50 45 4f 46 41 52 47 20 20 20 20 3d 3d 20 53 51  PEOFARG    == SQ
21d70 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
21d80 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 42 55  .**    OPFLAG_BU
21d90 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d 20 42 54  LKCSR      == BT
21da0 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20  REE_BULKLOAD.** 
21db0 20 20 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51     OPFLAG_SEEKEQ
21dc0 20 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f         == BTREE_
21dd0 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50  SEEK_EQ.**    OP
21de0 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20  FLAG_FORDELETE  
21df0 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f 52 44 45    == BTREE_FORDE
21e00 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  LETE.**    OPFLA
21e10 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d  G_SAVEPOSITION =
21e20 3d 20 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49  = BTREE_SAVEPOSI
21e30 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  TION.**    OPFLA
21e40 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20 3d  G_AUXDELETE    =
21e50 3d 20 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54  = BTREE_AUXDELET
21e60 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E.*/.#define OPF
21e70 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20  LAG_NCHANGE     
21e80 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
21e90 49 6e 73 65 72 74 3a 20 53 65 74 20 74 6f 20 75  Insert: Set to u
21ea0 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67  pdate db->nChang
21eb0 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
21ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ed0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 73            /* Als
21ee0 6f 20 75 73 65 64 20 69 6e 20 50 32 20 28 6e 6f  o used in P2 (no
21ef0 74 20 50 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65  t P5) of OP_Dele
21f00 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  te */.#define OP
21f10 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20  FLAG_EPHEM      
21f20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
21f30 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72  _Column: Ephemer
21f40 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20  al output is ok 
21f50 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
21f60 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20  G_LASTROWID     
21f70 30 78 32 30 20 20 20 20 2f 2a 20 53 65 74 20 74  0x20    /* Set t
21f80 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73  o update db->las
21f90 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e  tRowid */.#defin
21fa0 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
21fb0 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  E      0x04    /
21fc0 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74  * This OP_Insert
21fd0 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54   is an sql UPDAT
21fe0 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
21ff0 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20  LAG_APPEND      
22000 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69    0x08    /* Thi
22010 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62  s is likely to b
22020 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23  e an append */.#
22030 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53  define OPFLAG_US
22040 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30  ESEEKRESULT 0x10
22050 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76      /* Try to av
22060 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74  oid a seek in Bt
22070 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23  reeInsert() */.#
22080 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53  define OPFLAG_IS
22090 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78 34 30  NOOP        0x40
220a0 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65      /* OP_Delete
220b0 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61 74 65   does pre-update
220c0 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64  -hook only */.#d
220d0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e  efine OPFLAG_LEN
220e0 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30 20  GTHARG     0x40 
220f0 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
22100 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65  only used for le
22110 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e  ngth() */.#defin
22120 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  e OPFLAG_TYPEOFA
22130 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20 2f  RG     0x80    /
22140 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79  * OP_Column only
22150 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66   used for typeof
22160 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
22170 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20  FLAG_BULKCSR    
22180 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
22190 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20  _Open** used to 
221a0 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72  open bulk cursor
221b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
221c0 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20  AG_SEEKEQ       
221d0 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x02    /* OP_O
221e0 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65  pen** cursor use
221f0 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a  s EQ seek only *
22200 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22210 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 20 30  _FORDELETE     0
22220 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  x08    /* OP_Ope
22230 6e 20 73 68 6f 75 6c 64 20 75 73 65 20 42 54 52  n should use BTR
22240 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a  EE_FORDELETE */.
22250 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50  #define OPFLAG_P
22260 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78 31  2ISREG       0x1
22270 30 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50  0    /* P2 to OP
22280 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67  _Open** is a reg
22290 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ister number */.
222a0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50  #define OPFLAG_P
222b0 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78 30  ERMUTE       0x0
222c0 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61  1    /* OP_Compa
222d0 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d  re: use the perm
222e0 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  utation */.#defi
222f0 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  ne OPFLAG_SAVEPO
22300 53 49 54 49 4f 4e 20 20 30 78 30 32 20 20 20 20  SITION  0x02    
22310 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 2f 49 6e 73  /* OP_Delete/Ins
22320 65 72 74 3a 20 73 61 76 65 20 63 75 72 73 6f 72  ert: save cursor
22330 20 70 6f 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20   pos */.#define 
22340 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
22350 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20       0x04    /* 
22360 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e 64 65 78  OP_Delete: index
22370 20 69 6e 20 61 20 44 45 4c 45 54 45 20 6f 70 20   in a DELETE op 
22380 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22390 47 5f 4e 4f 43 48 4e 47 5f 4d 41 47 49 43 20 20  G_NOCHNG_MAGIC  
223a0 30 78 36 64 20 20 20 20 2f 2a 20 4f 50 5f 4d 61  0x6d    /* OP_Ma
223b0 6b 65 52 65 63 6f 72 64 3a 20 73 65 72 69 61 6c  keRecord: serial
223c0 74 79 70 65 20 31 30 20 69 73 20 6f 6b 20 2a 2f  type 10 is ok */
223d0 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69  ../*. * Each tri
223e0 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20  gger present in 
223f0 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
22400 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73  ema is stored as
22410 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
22420 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65   * struct Trigge
22430 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72  r.. *. * Pointer
22440 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f  s to instances o
22450 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
22460 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
22470 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49  wo ways.. * 1. I
22480 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22  n the "trigHash"
22490 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72   hash table (par
224a0 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  t of the sqlite3
224b0 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74  * that represent
224c0 73 20 74 68 65 0a 20 2a 20 20 20 20 64 61 74 61  s the. *    data
224d0 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f  base). This allo
224e0 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63  ws Trigger struc
224f0 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72  tures to be retr
22500 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20  ieved by name.. 
22510 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72  * 2. All trigger
22520 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
22530 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  h a single table
22540 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c   form a linked l
22550 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20  ist, using the. 
22560 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65  *    pNext membe
22570 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  r of struct Trig
22580 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74  ger. A pointer t
22590 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
225a0 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20  ent of the. *   
225b0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20   linked list is 
225c0 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70  stored as the "p
225d0 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20  Trigger" member 
225e0 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  of the associate
225f0 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54  d. *    struct T
22600 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20  able.. *. * The 
22610 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
22620 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  er points to the
22630 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
22640 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a  f a linked list.
22650 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68   * containing th
22660 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
22670 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68   specified as th
22680 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
22690 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72  m.. */.struct Tr
226a0 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a  igger {.  char *
226b0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
226c0 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66    /* The name of
226d0 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20   the trigger    
226e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226f0 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74      */.  char *t
22700 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
22710 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72   /* The table or
22720 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74   view to which t
22730 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69  he trigger appli
22740 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20  es */.  u8 op;  
22750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22760 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c  /* One of TK_DEL
22770 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20  ETE, TK_UPDATE, 
22780 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20  TK_INSERT       
22790 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b    */.  u8 tr_tm;
227a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
227b0 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52  * One of TRIGGER
227c0 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52  _BEFORE, TRIGGER
227d0 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72  _AFTER */.  Expr
227e0 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20   *pWhen;        
227f0 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20      /* The WHEN 
22800 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78  clause of the ex
22810 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65  pression (may be
22820 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69   NULL) */.  IdLi
22830 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20  st *pColumns;   
22840 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
22850 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c  s an UPDATE OF <
22860 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69  column-list> tri
22870 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20  gger,.          
22880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22890 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c     the <column-l
228a0 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68  ist> is stored h
228b0 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ere */.  Schema 
228c0 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
228d0 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
228e0 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  ining the trigge
228f0 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  r */.  Schema *p
22900 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f  TabSchema;     /
22910 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
22920 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ing the table */
22930 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
22940 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69  step_list; /* Li
22950 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67  nk list of trigg
22960 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73  er program steps
22970 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
22980 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74    Trigger *pNext
22990 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
229a0 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69  t trigger associ
229b0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61  ated with the ta
229c0 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ble */.};../*.**
229d0 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69   A trigger is ei
229e0 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72  ther a BEFORE or
229f0 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65   an AFTER trigge
22a00 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  r.  The followin
22a10 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64  g constants.** d
22a20 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a  etermine which..
22a30 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61  **.** If there a
22a40 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67  re multiple trig
22a50 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20  gers, you might 
22a60 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61  of some BEFORE a
22a70 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a  nd some AFTER..*
22a80 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c  * In that cases,
22a90 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62   the constants b
22aa0 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64  elow can be ORed
22ab0 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64   together..*/.#d
22ac0 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45  efine TRIGGER_BE
22ad0 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20  FORE  1.#define 
22ae0 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20  TRIGGER_AFTER   
22af0 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74  2../*. * An inst
22b00 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54  ance of struct T
22b10 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73  riggerStep is us
22b20 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69  ed to store a si
22b30 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65  ngle SQL stateme
22b40 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20  nt. * that is a 
22b50 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65  part of a trigge
22b60 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a  r-program.. *. *
22b70 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   Instances of st
22b80 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
22b90 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
22ba0 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c   singly linked l
22bb0 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75  ist (linked. * u
22bc0 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22  sing the "pNext"
22bd0 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e   member) referen
22be0 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70  ced by the "step
22bf0 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66  _list" member of
22c00 20 74 68 65 0a 20 2a 20 61 73 73 6f 63 69 61 74   the. * associat
22c10 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ed struct Trigge
22c20 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20  r instance. The 
22c30 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
22c40 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
22c50 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74   is. * the first
22c60 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69   step of the tri
22c70 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger-program.. *
22c80 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d  . * The "op" mem
22c90 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77 68  ber indicates wh
22ca0 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20  ether this is a 
22cb0 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52  "DELETE", "INSER
22cc0 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a  T", "UPDATE" or.
22cd0 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61 74   * "SELECT" stat
22ce0 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69  ement. The meani
22cf0 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72  ngs of the other
22d00 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74 65   members is dete
22d10 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20 2a  rmined by the. *
22d20 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61   value of "op" a
22d30 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a  s follows:. *. *
22d40 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52   (op == TK_INSER
22d50 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20  T). * orconf    
22d60 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e  -> stores the ON
22d70 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69   CONFLICT algori
22d80 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20  thm. * pSelect  
22d90 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
22da0 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
22db0 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61  . SELECT ... sta
22dc0 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
22dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
22de0 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74  s stores a point
22df0 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54  er to the SELECT
22e00 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65   statement. Othe
22e10 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a  rwise NULL.. * z
22e20 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
22e30 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
22e40 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74   table to insert
22e50 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c   into.. * pExprL
22e60 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69  ist -> If this i
22e70 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
22e80 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20   ... VALUES ... 
22e90 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
22ea0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
22eb0 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75  this stores valu
22ec0 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  es to be inserte
22ed0 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  d. Otherwise NUL
22ee0 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20  L.. * pIdList   
22ef0 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
22f00 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
22f10 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e   (<column-names>
22f20 29 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20  ) VALUES .... * 
22f30 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
22f40 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69  tement, then thi
22f50 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c  s stores the col
22f60 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a  umn-names to be.
22f70 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
22f80 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20  inserted into.. 
22f90 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44  *. * (op == TK_D
22fa0 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65  ELETE). * zTarge
22fb0 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20  t   -> Dequoted 
22fc0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
22fd0 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d  e to delete from
22fe0 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
22ff0 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
23000 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45  se of the DELETE
23010 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
23020 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
23030 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
23040 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
23050 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
23060 55 50 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67  UPDATE). * zTarg
23070 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64  et   -> Dequoted
23080 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
23090 6c 65 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a  le to update.. *
230a0 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
230b0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
230c0 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
230d0 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
230e0 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
230f0 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
23100 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70  rwise NULL.. * p
23110 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69  ExprList -> A li
23120 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  st of the column
23130 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20  s to update and 
23140 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  the expressions 
23150 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20  to update. *    
23160 20 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74            them t
23170 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70  o. See sqlite3Up
23180 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61  date() documenta
23190 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65  tion of "pChange
231a0 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  s". *           
231b0 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a     argument.. *.
231c0 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
231d0 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70  erStep {.  u8 op
231e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
231f0 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c  /* One of TK_DEL
23200 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20  ETE, TK_UPDATE, 
23210 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45  TK_INSERT, TK_SE
23220 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63  LECT */.  u8 orc
23230 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  onf;           /
23240 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74  * OE_Rollback et
23250 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  c. */.  Trigger 
23260 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20  *pTrig;      /* 
23270 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74  The trigger that
23280 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20   this step is a 
23290 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c  part of */.  Sel
232a0 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
232b0 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74    /* SELECT stat
232c0 65 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20  ement or RHS of 
232d0 49 4e 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45  INSERT INTO SELE
232e0 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72  CT ... */.  char
232f0 20 2a 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20   *zTarget;      
23300 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65   /* Target table
23310 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44   for DELETE, UPD
23320 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20  ATE, INSERT */. 
23330 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
23340 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
23350 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45  RE clause for DE
23360 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73  LETE or UPDATE s
23370 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  teps */.  ExprLi
23380 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f  st *pExprList; /
23390 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72  * SET clause for
233a0 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 49 64 4c   UPDATE */.  IdL
233b0 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20  ist *pIdList;   
233c0 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65    /* Column name
233d0 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a  s for INSERT */.
233e0 20 20 55 70 73 65 72 74 20 2a 70 55 70 73 65 72    Upsert *pUpser
233f0 74 3b 20 20 20 20 20 2f 2a 20 55 70 73 65 72 74  t;     /* Upsert
23400 20 63 6c 61 75 73 65 73 20 6f 6e 20 61 6e 20 49   clauses on an I
23410 4e 53 45 52 54 20 2a 2f 0a 20 20 63 68 61 72 20  NSERT */.  char 
23420 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20  *zSpan;         
23430 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 53 51 4c 20  /* Original SQL 
23440 74 65 78 74 20 6f 66 20 74 68 69 73 20 63 6f 6d  text of this com
23450 6d 61 6e 64 20 2a 2f 0a 20 20 54 72 69 67 67 65  mand */.  Trigge
23460 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f  rStep *pNext;  /
23470 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69  * Next in the li
23480 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69  nk-list */.  Tri
23490 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b  ggerStep *pLast;
234a0 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e    /* Last elemen
234b0 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20  t in link-list. 
234c0 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c  Valid for 1st el
234d0 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f  em only */.};../
234e0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
234f0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
23500 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
23510 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71  n used by the sq
23520 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f  liteFix....** ro
23530 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77  utines as they w
23540 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72  alk the parse tr
23550 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62  ee to make datab
23560 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a  ase references.*
23570 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74  * explicit..*/.t
23580 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
23590 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73  Fixer DbFixer;.s
235a0 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a  truct DbFixer {.
235b0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
235c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
235d0 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45  sing context.  E
235e0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72  rror messages wr
235f0 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20  itten here */.  
23600 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
23610 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73      /* Fix items
23620 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20   to this schema 
23630 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c  */.  int bVarOnl
23640 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63  y;       /* Chec
23650 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72  k for variable r
23660 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a  eferences only *
23670 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
23680 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20  zDb;    /* Make 
23690 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73  sure all objects
236a0 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69   are contained i
236b0 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  n this database 
236c0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
236d0 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65  *zType;  /* Type
236e0 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
236f0 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
23700 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20  or messages */. 
23710 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e   const Token *pN
23720 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ame; /* Name of 
23730 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
23740 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
23750 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f  essages */.};../
23760 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64  *.** An objected
23770 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c   used to accumul
23780 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20  ate the text of 
23790 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77  a string where w
237a0 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65  e.** do not nece
237b0 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77  ssarily know how
237c0 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20   big the string 
237d0 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65  will be in the e
237e0 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71  nd..*/.struct sq
237f0 6c 69 74 65 33 5f 73 74 72 20 7b 0a 20 20 73 71  lite3_str {.  sq
23800 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
23810 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64     /* Optional d
23820 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b  atabase for look
23830 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e  aside.  Can be N
23840 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ULL */.  char *z
23850 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Text;         /*
23860 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c   The string coll
23870 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a  ected so far */.
23880 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20    u32  nAlloc;  
23890 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74         /* Amount
238a0 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61   of space alloca
238b0 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a  ted in zText */.
238c0 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20    u32  mxAlloc; 
238d0 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
238e0 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61  m allowed alloca
238f0 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20  tion.  0 for no 
23900 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a  malloc usage */.
23910 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20 20 20    u32  nChar;   
23920 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
23930 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73   of the string s
23940 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 20 20  o far */.  u8   
23950 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20  accError;       
23960 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  /* SQLITE_NOMEM 
23970 6f 72 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  or SQLITE_TOOBIG
23980 20 2a 2f 0a 20 20 75 38 20 20 20 70 72 69 6e 74   */.  u8   print
23990 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53 51  fFlags;    /* SQ
239a0 4c 49 54 45 5f 50 52 49 4e 54 46 20 66 6c 61 67  LITE_PRINTF flag
239b0 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64  s below */.};.#d
239c0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49  efine SQLITE_PRI
239d0 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30  NTF_INTERNAL 0x0
239e0 31 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75  1  /* Internal-u
239f0 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65  se-only converte
23a00 72 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64  rs allowed */.#d
23a10 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49  efine SQLITE_PRI
23a20 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30  NTF_SQLFUNC  0x0
23a30 32 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69  2  /* SQL functi
23a40 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  on arguments to 
23a50 56 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66  VXPrintf */.#def
23a60 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
23a70 46 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34 20  F_MALLOCED 0x04 
23a80 20 2f 2a 20 54 72 75 65 20 69 66 20 78 54 65 78   /* True if xTex
23a90 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 73  t is allocated s
23aa0 70 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  pace */..#define
23ab0 20 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20   isMalloced(X)  
23ac0 28 28 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61  (((X)->printfFla
23ad0 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52 49 4e  gs & SQLITE_PRIN
23ae0 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29  TF_MALLOCED)!=0)
23af0 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74  .../*.** A point
23b00 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
23b10 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
23b20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f  communicate info
23b30 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20  rmation.** from 
23b40 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20  sqlite3Init and 
23b50 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69  OP_ParseSchema i
23b60 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49  nto the sqlite3I
23b70 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a  nitCallback..*/.
23b80 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b  typedef struct {
23b90 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
23ba0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
23bb0 74 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69  tabase being ini
23bc0 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68  tialized */.  ch
23bd0 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20  ar **pzErrMsg;  
23be0 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61    /* Error messa
23bf0 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  ge stored here *
23c00 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
23c10 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72          /* 0 for
23c20 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20   main database. 
23c30 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e   1 for TEMP, 2..
23c40 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f   for ATTACHed */
23c50 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
23c60 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
23c70 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72   code stored her
23c80 65 20 2a 2f 0a 20 20 75 33 32 20 6d 49 6e 69 74  e */.  u32 mInit
23c90 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c  Flags;     /* Fl
23ca0 61 67 73 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20  ags controlling 
23cb0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
23cc0 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f  /.} InitData;../
23cd0 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
23ce0 75 65 73 20 66 6f 72 20 6d 49 6e 69 74 46 6c 61  ues for mInitFla
23cf0 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  gs.*/.#define IN
23d00 49 54 46 4c 41 47 5f 41 6c 74 65 72 54 61 62 6c  ITFLAG_AlterTabl
23d10 65 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54  e   0x0001  /* T
23d20 68 69 73 20 69 73 20 61 20 72 65 70 61 72 73 65  his is a reparse
23d30 20 61 66 74 65 72 20 41 4c 54 45 52 20 54 41 42   after ALTER TAB
23d40 4c 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 74 72  LE */../*.** Str
23d50 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e  ucture containin
23d60 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75  g global configu
23d70 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20  ration data for 
23d80 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61  the SQLite libra
23d90 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73  ry..**.** This s
23da0 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f  tructure also co
23db0 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74  ntains some stat
23dc0 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  e information..*
23dd0 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  /.struct Sqlite3
23de0 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62  Config {.  int b
23df0 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20  Memstat;        
23e00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23e10 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d  True to enable m
23e20 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a  emory status */.
23e30 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78    int bCoreMutex
23e40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23e50 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
23e60 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78  nable core mutex
23e70 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75  ing */.  int bFu
23e80 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  llMutex;        
23e90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
23ea0 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c  ue to enable ful
23eb0 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20  l mutexing */.  
23ec0 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20  int bOpenUri;   
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ee0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74    /* True to int
23ef0 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73  erpret filenames
23f00 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e   as URIs */.  in
23f10 74 20 62 55 73 65 43 69 73 3b 20 20 20 20 20 20  t bUseCis;      
23f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f30 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20  /* Use covering 
23f40 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c  indices for full
23f50 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  -scans */.  int 
23f60 62 53 6d 61 6c 6c 4d 61 6c 6c 6f 63 3b 20 20 20  bSmallMalloc;   
23f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23f80 20 41 76 6f 69 64 20 6c 61 72 67 65 20 6d 65 6d   Avoid large mem
23f90 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ory allocations 
23fa0 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 69 6e 74  if true */.  int
23fb0 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20   mxStrlen;      
23fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23fd0 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67  * Maximum string
23fe0 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74   length */.  int
23ff0 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20   neverCorrupt;  
24000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24010 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61 6c  * Database is al
24020 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  ways well-formed
24030 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b   */.  int szLook
24040 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
24050 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
24060 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
24070 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e  fer size */.  in
24080 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20  t nLookaside;   
24090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240a0 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
240b0 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e  side buffer coun
240c0 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 6d 74  t */.  int nStmt
240d0 53 70 69 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  Spill;          
240e0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 6d 74           /* Stmt
240f0 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c 6c 2d 74  -journal spill-t
24100 6f 2d 64 69 73 6b 20 74 68 72 65 73 68 6f 6c 64  o-disk threshold
24110 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65   */.  sqlite3_me
24120 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20  m_methods m;    
24130 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c          /* Low-l
24140 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  evel memory allo
24150 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65  cation interface
24160 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
24170 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65  tex_methods mute
24180 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c  x;      /* Low-l
24190 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72  evel mutex inter
241a0 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
241b0 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73  3_pcache_methods
241c0 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c  2 pcache2;  /* L
241d0 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61  ow-level page-ca
241e0 63 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  che interface */
241f0 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20  .  void *pHeap; 
24200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24210 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f       /* Heap sto
24220 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  rage space */.  
24230 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20  int nHeap;      
24240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24250 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65    /* Size of pHe
24260 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ap[] */.  int mn
24270 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20  Req, mxReq;     
24280 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
24290 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20  in and max heap 
242a0 72 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a  requests sizes *
242b0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
242c0 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
242d0 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20        /* mmap() 
242e0 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66  space per open f
242f0 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ile */.  sqlite3
24300 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20  _int64 mxMmap;  
24310 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
24320 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20  ximum value for 
24330 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64  szMmap */.  void
24340 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20   *pPage;        
24350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24360 20 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f   Page cache memo
24370 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61  ry */.  int szPa
24380 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
24390 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
243a0 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69  e of each page i
243b0 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69  n pPage[] */.  i
243c0 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20  nt nPage;       
243d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61   /* Number of pa
243f0 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  ges in pPage[] *
24400 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72  /.  int mxParser
24410 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20  Stack;          
24420 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d        /* maximum
24430 20 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61   depth of the pa
24440 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20  rser stack */.  
24450 69 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45  int sharedCacheE
24460 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20  nabled;         
24470 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61    /* true if sha
24480 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65  red-cache mode e
24490 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20  nabled */.  u32 
244a0 73 7a 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20  szPma;          
244b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
244c0 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20   Maximum Sorter 
244d0 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a  PMA size */.  /*
244e0 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74   The above might
244f0 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   be initialized 
24500 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68  to non-zero.  Th
24510 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64  e following need
24520 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20   to always.  ** 
24530 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72  initially be zer
24540 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20  o, however. */. 
24550 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20   int isInit;    
24560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24570 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
24580 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
24590 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a  has finished */.
245a0 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73    int inProgress
245b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
245c0 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c      /* True whil
245d0 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
245e0 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a   in progress */.
245f0 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69    int isMutexIni
24600 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
24610 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
24620 72 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e  r mutexes are in
24630 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
24640 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b  nt isMallocInit;
24650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24660 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
24670 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
24680 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
24690 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20  PCacheInit;     
246a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
246b0 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
246c0 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
246d0 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69  */.  int nRefIni
246e0 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  tMutex;         
246f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
24700 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e   of users of pIn
24710 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c  itMutex */.  sql
24720 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69  ite3_mutex *pIni
24730 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f  tMutex;        /
24740 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20  * Mutex used by 
24750 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
24760 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ze() */.  void (
24770 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74  *xLog)(void*,int
24780 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f  ,const char*); /
24790 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c  * Function for l
247a0 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64  ogging */.  void
247b0 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20   *pLogArg;      
247c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247d0 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
247e0 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a  nt to xLog() */.
247f0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
24800 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f  ABLE_SQLLOG.  vo
24810 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69  id(*xSqllog)(voi
24820 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
24830 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20  t char*, int);. 
24840 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72   void *pSqllogAr
24850 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  g;.#endif.#ifdef
24860 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56   SQLITE_VDBE_COV
24870 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66  ERAGE.  /* The f
24880 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63  ollowing callbac
24890 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20  k (if not NULL) 
248a0 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76  is invoked on ev
248b0 65 72 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a  ery VDBE branch.
248c0 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20    ** operation. 
248d0 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63   Set the callbac
248e0 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54  k using SQLITE_T
248f0 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56  ESTCTRL_VDBE_COV
24900 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f  ERAGE..  */.  vo
24910 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68  id (*xVdbeBranch
24920 29 28 76 6f 69 64 2a 2c 75 6e 73 69 67 6e 65 64  )(void*,unsigned
24930 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68   iSrcLine,u8 eTh
24940 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20  is,u8 eMx);  /* 
24950 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  Callback */.  vo
24960 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41  id *pVdbeBranchA
24970 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
24980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24990 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61          /* 1st a
249a0 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69  rgument */.#endi
249b0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
249c0 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 69 6e  _UNTESTABLE.  in
249d0 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63  t (*xTestCallbac
249e0 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20  k)(int);        
249f0 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71  /* Invoked by sq
24a00 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20  lite3FaultSim() 
24a10 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
24a20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b  bLocaltimeFault;
24a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24a40 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f   True to fail lo
24a50 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20  caltime() calls 
24a60 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65 52 65  */.  int iOnceRe
24a70 73 65 74 54 68 72 65 73 68 6f 6c 64 3b 20 20 20  setThreshold;   
24a80 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 74         /* When t
24a90 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63 65 20  o reset OP_Once 
24aa0 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 75 33  counters */.  u3
24ab0 32 20 73 7a 53 6f 72 74 65 72 52 65 66 3b 20 20  2 szSorterRef;  
24ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ad0 2f 2a 20 4d 69 6e 20 73 69 7a 65 20 69 6e 20 62  /* Min size in b
24ae0 79 74 65 73 20 74 6f 20 75 73 65 20 73 6f 72 74  ytes to use sort
24af0 65 72 2d 72 65 66 73 20 2a 2f 0a 7d 3b 0a 0a 2f  er-refs */.};../
24b00 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20  *.** This macro 
24b10 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f  is used inside o
24b20 66 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  f assert() state
24b30 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74  ments to indicat
24b40 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73  e that.** the as
24b50 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c  sert is only val
24b60 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72  id on a well-for
24b70 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 49  med database.  I
24b80 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a  nstead of:.**.**
24b90 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20 29       assert( X )
24ba0 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74  ;.**.** One writ
24bb0 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73  es:.**.**     as
24bc0 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55  sert( X || CORRU
24bd0 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43  PT_DB );.**.** C
24be0 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74 72 75  ORRUPT_DB is tru
24bf0 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20  e during normal 
24c00 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52  operation.  CORR
24c10 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20  UPT_DB does not 
24c20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74  indicate.** that
24c30 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
24c40 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72   definitely corr
24c50 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69  upt, only that i
24c60 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75  t might be corru
24c70 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20  pt..** For most 
24c80 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52  test cases, CORR
24c90 55 50 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f  UPT_DB is set to
24ca0 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73   false using a s
24cb0 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65  pecial.** sqlite
24cc0 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29  3_test_control()
24cd0 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20  .  This enables 
24ce0 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
24cf0 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20  nts to prove.** 
24d00 74 68 69 6e 67 73 20 74 68 61 74 20 61 72 65 20  things that are 
24d10 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72 20  always true for 
24d20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61  well-formed data
24d30 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  bases..*/.#defin
24d40 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73  e CORRUPT_DB  (s
24d50 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76  qlite3Config.nev
24d60 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f  erCorrupt==0)../
24d70 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69  *.** Context poi
24d80 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e  nter passed down
24d90 20 74 68 72 6f 75 67 68 20 74 68 65 20 74 72 65   through the tre
24da0 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63  e-walk..*/.struc
24db0 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50 61 72  t Walker {.  Par
24dc0 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
24dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24de0 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72         /* Parser
24df0 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20   context.  */.  
24e00 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62  int (*xExprCallb
24e10 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78  ack)(Walker*, Ex
24e20 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c  pr*);     /* Cal
24e30 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73  lback for expres
24e40 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28  sions */.  int (
24e50 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b  *xSelectCallback
24e60 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74  )(Walker*,Select
24e70 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  *);  /* Callback
24e80 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
24e90 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74    void (*xSelect
24ea0 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65  Callback2)(Walke
24eb0 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53  r*,Select*);/* S
24ec0 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66  econd callback f
24ed0 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20  or SELECTs */.  
24ee0 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b  int walkerDepth;
24ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
24f10 62 65 72 20 6f 66 20 73 75 62 71 75 65 72 69 65  ber of subquerie
24f20 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b  s */.  u8 eCode;
24f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f50 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63   /* A small proc
24f60 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20  essing code */. 
24f70 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20   union {        
24f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
24fa0 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c  tra data for cal
24fb0 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d  lback */.    Nam
24fc0 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20  eContext *pNC;  
24fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fe0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67         /* Naming
24ff0 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20   context */.    
25000 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
25010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25020 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63            /* A c
25030 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e  ounter */.    in
25040 74 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20  t iCur;         
25050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25060 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72          /* A cur
25070 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  sor number */.  
25080 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
25090 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ist;            
250a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
250b0 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
250c0 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e    struct SrcCoun
250d0 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20  t *pSrcCount;   
250e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
250f0 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72  ounting column r
25100 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20  eferences */.   
25110 20 73 74 72 75 63 74 20 43 43 75 72 48 69 6e 74   struct CCurHint
25120 20 2a 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20   *pCCurHint;    
25130 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
25140 65 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72  ed by codeCursor
25150 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e  Hint() */.    in
25160 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20 20  t *aiCol;       
25170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25180 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61 79          /* array
25190 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78   of column index
251a0 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  es */.    struct
251b0 20 49 64 78 43 6f 76 65 72 20 2a 70 49 64 78 43   IdxCover *pIdxC
251c0 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  over;           
251d0 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72      /* Check for
251e0 20 69 6e 64 65 78 20 63 6f 76 65 72 61 67 65 20   index coverage 
251f0 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49 64  */.    struct Id
25200 78 45 78 70 72 54 72 61 6e 73 20 2a 70 49 64 78  xExprTrans *pIdx
25210 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
25220 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69 64 78 65   /* Convert idxe
25230 64 20 65 78 70 72 20 74 6f 20 63 6f 6c 75 6d 6e  d expr to column
25240 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74   */.    ExprList
25250 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20   *pGroupBy;     
25260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25270 20 20 2f 2a 20 47 52 4f 55 50 20 42 59 20 63 6c    /* GROUP BY cl
25280 61 75 73 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65  ause */.    Sele
25290 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
252a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252b0 20 20 20 20 20 20 2f 2a 20 48 41 56 49 4e 47 20        /* HAVING 
252c0 74 6f 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  to WHERE clause 
252d0 63 74 78 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  ctx */.    struc
252e0 74 20 57 69 6e 64 6f 77 52 65 77 72 69 74 65 20  t WindowRewrite 
252f0 2a 70 52 65 77 72 69 74 65 3b 20 20 20 20 20 20  *pRewrite;      
25300 20 20 20 20 20 2f 2a 20 57 69 6e 64 6f 77 20 72       /* Window r
25310 65 77 72 69 74 65 20 63 6f 6e 74 65 78 74 20 2a  ewrite context *
25320 2f 0a 20 20 20 20 73 74 72 75 63 74 20 57 68 65  /.    struct Whe
25330 72 65 43 6f 6e 73 74 20 2a 70 43 6f 6e 73 74 3b  reConst *pConst;
25340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25350 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
25360 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 20  constants */.   
25370 20 73 74 72 75 63 74 20 52 65 6e 61 6d 65 43 74   struct RenameCt
25380 78 20 2a 70 52 65 6e 61 6d 65 3b 20 20 20 20 20  x *pRename;     
25390 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 45             /* RE
253a0 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20 63 6f 6e 74  NAME COLUMN cont
253b0 65 78 74 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b  ext */.  } u;.};
253c0 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63  ../* Forward dec
253d0 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74  larations */.int
253e0 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72   sqlite3WalkExpr
253f0 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
25400 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
25410 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72  kExprList(Walker
25420 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
25430 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
25440 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65  lect(Walker*, Se
25450 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
25460 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70  te3WalkSelectExp
25470 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  r(Walker*, Selec
25480 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
25490 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57  WalkSelectFrom(W
254a0 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
254b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
254c0 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72  rWalkNoop(Walker
254d0 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
254e0 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b  qlite3SelectWalk
254f0 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Noop(Walker*, Se
25500 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
25510 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 46 61 69  te3SelectWalkFai
25520 6c 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  l(Walker*, Selec
25530 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  t*);.#ifdef SQLI
25540 54 45 5f 44 45 42 55 47 0a 76 6f 69 64 20 73 71  TE_DEBUG.void sq
25550 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 41  lite3SelectWalkA
25560 73 73 65 72 74 32 28 57 61 6c 6b 65 72 2a 2c 20  ssert2(Walker*, 
25570 53 65 6c 65 63 74 2a 29 3b 0a 23 65 6e 64 69 66  Select*);.#endif
25580 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63  ../*.** Return c
25590 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72  ode from the par
255a0 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20  se-tree walking 
255b0 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74  primitives and t
255c0 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  heir.** callback
255d0 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  s..*/.#define WR
255e0 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20  C_Continue    0 
255f0 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f    /* Continue do
25600 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e  wn into children
25610 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
25620 50 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20  Prune       1   
25630 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e  /* Omit children
25640 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61   but continue wa
25650 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a  lking siblings *
25660 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62  /.#define WRC_Ab
25670 6f 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a  ort       2   /*
25680 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65   Abandon the tre
25690 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  e walk */../*.**
256a0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
256b0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 72  this structure r
256c0 65 70 72 65 73 65 6e 74 73 20 61 20 73 65 74 20  epresents a set 
256d0 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43  of one or more C
256e0 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74  TEs.** (common t
256f0 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
25700 29 20 63 72 65 61 74 65 64 20 62 79 20 61 20 73  ) created by a s
25710 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73  ingle WITH claus
25720 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74  e..*/.struct Wit
25730 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20  h {.  int nCte; 
25740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25750 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
25760 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65 20 57  of CTEs in the W
25770 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ITH clause */.  
25780 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20  With *pOuter;   
25790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257a0 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49  /* Containing WI
257b0 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55  TH clause, or NU
257c0 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43  LL */.  struct C
257d0 74 65 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  te {            
257e0 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65          /* For e
257f0 61 63 68 20 43 54 45 20 69 6e 20 74 68 65 20 57  ach CTE in the W
25800 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a  ITH clause.... *
25810 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
25820 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
25830 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
25840 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20   this CTE */.   
25850 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73   ExprList *pCols
25860 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25870 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c   /* List of expl
25880 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  icit column name
25890 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  s, or NULL */.  
258a0 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
258b0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
258c0 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74    /* The definit
258d0 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20  ion of this CTE 
258e0 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  */.    const cha
258f0 72 20 2a 7a 43 74 65 45 72 72 3b 20 20 20 20 20  r *zCteErr;     
25900 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20         /* Error 
25910 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69 72 63  message for circ
25920 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65 73 20  ular references 
25930 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a  */.  } a[1];.};.
25940 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
25950 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  EBUG./*.** An in
25960 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72  stance of the Tr
25970 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73  eeView object is
25980 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69   used for printi
25990 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ng the content o
259a0 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74  f.** data struct
259b0 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44  ures on sqlite3D
259c0 65 62 75 67 50 72 69 6e 74 66 28 29 20 75 73 69  ebugPrintf() usi
259d0 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76  ng a tree-like v
259e0 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  iew..*/.struct T
259f0 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20  reeView {.  int 
25a00 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20  iLevel;         
25a10 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76      /* Which lev
25a20 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65 20 77  el of the tree w
25a30 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38  e are on */.  u8
25a40 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20    bLine[100];   
25a50 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65        /* Draw ve
25a60 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e  rtical in column
25a70 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69   i if bLine[i] i
25a80 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e  s true */.};.#en
25a90 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45  dif /* SQLITE_DE
25aa0 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  BUG */../*.** Th
25ab0 69 73 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65  is object is use
25ac0 64 20 69 6e 20 76 61 72 69 6f 69 75 73 20 77 61  d in varioius wa
25ad0 79 73 2c 20 61 6c 6c 20 72 65 6c 61 74 65 64 20  ys, all related 
25ae0 74 6f 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69  to window functi
25af0 6f 6e 73 0a 2a 2a 0a 2a 2a 20 20 20 28 31 29 20  ons.**.**   (1) 
25b00 41 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63  A single instanc
25b10 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
25b20 75 72 65 20 69 73 20 61 74 74 61 63 68 65 64 20  ure is attached 
25b30 74 6f 20 74 68 65 0a 2a 2a 20 20 20 20 20 20 20  to the.**       
25b40 74 68 65 20 45 78 70 72 2e 70 57 69 6e 20 66 69  the Expr.pWin fi
25b50 65 6c 64 20 66 6f 72 20 65 61 63 68 20 77 69 6e  eld for each win
25b60 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20  dow function in 
25b70 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 72  an expression tr
25b80 65 65 2e 0a 2a 2a 20 20 20 20 20 20 20 54 68 69  ee..**       Thi
25b90 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 74  s object holds t
25ba0 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63  he information c
25bb0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the 
25bc0 4f 56 45 52 20 63 6c 61 75 73 65 2c 0a 2a 2a 20  OVER clause,.** 
25bd0 20 20 20 20 20 20 70 6c 75 73 20 61 64 64 69 74        plus addit
25be0 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 73 65  ional fields use
25bf0 64 20 64 75 72 69 6e 67 20 63 6f 64 65 20 67 65  d during code ge
25c00 6e 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  neration..**.** 
25c10 20 20 28 32 29 20 41 6c 6c 20 77 69 6e 64 6f 77    (2) All window
25c20 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 61 20   functions in a 
25c30 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 66 6f  single SELECT fo
25c40 72 6d 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74  rm a linked-list
25c50 0a 2a 2a 20 20 20 20 20 20 20 61 74 74 61 63 68  .**       attach
25c60 65 64 20 74 6f 20 53 65 6c 65 63 74 2e 70 57 69  ed to Select.pWi
25c70 6e 2e 20 20 54 68 65 20 57 69 6e 64 6f 77 2e 70  n.  The Window.p
25c80 46 75 6e 63 20 61 6e 64 20 57 69 6e 64 6f 77 2e  Func and Window.
25c90 70 45 78 70 72 0a 2a 2a 20 20 20 20 20 20 20 66  pExpr.**       f
25ca0 69 65 6c 64 73 20 70 6f 69 6e 74 20 62 61 63 6b  ields point back
25cb0 20 74 6f 20 74 68 65 20 65 78 70 72 65 73 73 69   to the expressi
25cc0 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20 77  on that is the w
25cd0 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 2e 0a  indow function..
25ce0 2a 2a 0a 2a 2a 20 20 20 28 33 29 20 54 68 65 20  **.**   (3) The 
25cf0 74 65 72 6d 73 20 6f 66 20 74 68 65 20 57 49 4e  terms of the WIN
25d00 44 4f 57 20 63 6c 61 75 73 65 20 6f 66 20 61 20  DOW clause of a 
25d10 53 45 4c 45 43 54 20 61 72 65 20 69 6e 73 74 61  SELECT are insta
25d20 6e 63 65 73 20 6f 66 20 74 68 69 73 0a 2a 2a 20  nces of this.** 
25d30 20 20 20 20 20 20 6f 62 6a 65 63 74 20 6f 6e 20        object on 
25d40 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 61 74  a linked list at
25d50 74 61 63 68 65 64 20 74 6f 20 53 65 6c 65 63 74  tached to Select
25d60 2e 70 57 69 6e 44 65 66 6e 2e 0a 2a 2a 0a 2a 2a  .pWinDefn..**.**
25d70 20 54 68 65 20 75 73 65 73 20 28 31 29 20 61 6e   The uses (1) an
25d80 64 20 28 32 29 20 61 72 65 20 72 65 61 6c 6c 79  d (2) are really
25d90 20 74 68 65 20 73 61 6d 65 20 57 69 6e 64 6f 77   the same Window
25da0 20 6f 62 6a 65 63 74 20 74 68 61 74 20 6a 75 73   object that jus
25db0 74 20 68 61 70 70 65 6e 73 0a 2a 2a 20 74 6f 20  t happens.** to 
25dc0 62 65 20 61 63 63 65 73 73 69 62 6c 65 20 69 6e  be accessible in
25dd0 20 74 77 6f 20 64 69 66 66 65 72 65 6e 74 20 77   two different w
25de0 61 79 73 2e 20 20 55 73 65 20 28 33 29 20 69 73  ays.  Use (3) is
25df0 20 61 72 65 20 73 65 70 61 72 61 74 65 20 6f 62   are separate ob
25e00 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  jects..*/.struct
25e10 20 57 69 6e 64 6f 77 20 7b 0a 20 20 63 68 61 72   Window {.  char
25e20 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
25e30 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 77      /* Name of w
25e40 69 6e 64 6f 77 20 28 6d 61 79 20 62 65 20 4e 55  indow (may be NU
25e50 4c 4c 29 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  LL) */.  ExprLis
25e60 74 20 2a 70 50 61 72 74 69 74 69 6f 6e 3b 20 20  t *pPartition;  
25e70 20 2f 2a 20 50 41 52 54 49 54 49 4f 4e 20 42 59   /* PARTITION BY
25e80 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
25e90 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b  rList *pOrderBy;
25ea0 20 20 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59       /* ORDER BY
25eb0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 38 20   clause */.  u8 
25ec0 65 54 79 70 65 3b 20 20 20 20 20 20 20 20 20 20  eType;          
25ed0 20 20 20 20 20 2f 2a 20 54 4b 5f 52 41 4e 47 45       /* TK_RANGE
25ee0 20 6f 72 20 54 4b 5f 52 4f 57 53 20 2a 2f 0a 20   or TK_ROWS */. 
25ef0 20 75 38 20 65 53 74 61 72 74 3b 20 20 20 20 20   u8 eStart;     
25f00 20 20 20 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f           /* UNBO
25f10 55 4e 44 45 44 2c 20 43 55 52 52 45 4e 54 2c 20  UNDED, CURRENT, 
25f20 50 52 45 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c  PRECEDING or FOL
25f30 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 75 38 20 65  LOWING */.  u8 e
25f40 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
25f50 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44 45 44      /* UNBOUNDED
25f60 2c 20 43 55 52 52 45 4e 54 2c 20 50 52 45 43 45  , CURRENT, PRECE
25f70 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57 49 4e  DING or FOLLOWIN
25f80 47 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 53 74  G */.  Expr *pSt
25f90 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  art;           /
25fa0 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 66 6f 72  * Expression for
25fb0 20 22 3c 65 78 70 72 3e 20 50 52 45 43 45 44 49   "<expr> PRECEDI
25fc0 4e 47 22 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  NG" */.  Expr *p
25fd0 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
25fe0 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 66   /* Expression f
25ff0 6f 72 20 22 3c 65 78 70 72 3e 20 46 4f 4c 4c 4f  or "<expr> FOLLO
26000 57 49 4e 47 22 20 2a 2f 0a 20 20 57 69 6e 64 6f  WING" */.  Windo
26010 77 20 2a 70 4e 65 78 74 57 69 6e 3b 20 20 20 20  w *pNextWin;    
26020 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 6e 64 6f     /* Next windo
26030 77 20 66 75 6e 63 74 69 6f 6e 20 62 65 6c 6f 6e  w function belon
26040 67 69 6e 67 20 74 6f 20 74 68 69 73 20 53 45 4c  ging to this SEL
26050 45 43 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ECT */.  Expr *p
26060 46 69 6c 74 65 72 3b 20 20 20 20 20 20 20 20 20  Filter;         
26070 20 2f 2a 20 54 68 65 20 46 49 4c 54 45 52 20 65   /* The FILTER e
26080 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 46  xpression */.  F
26090 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
260a0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 75         /* The fu
260b0 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  nction */.  int 
260c0 69 45 70 68 43 73 72 3b 20 20 20 20 20 20 20 20  iEphCsr;        
260d0 20 20 20 20 2f 2a 20 50 61 72 74 69 74 69 6f 6e      /* Partition
260e0 20 62 75 66 66 65 72 20 6f 72 20 50 65 65 72 20   buffer or Peer 
260f0 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20  buffer */.  int 
26100 72 65 67 41 63 63 75 6d 3b 0a 20 20 69 6e 74 20  regAccum;.  int 
26110 72 65 67 52 65 73 75 6c 74 3b 0a 20 20 69 6e 74  regResult;.  int
26120 20 63 73 72 41 70 70 3b 20 20 20 20 20 20 20 20   csrApp;        
26130 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e       /* Function
26140 20 63 75 72 73 6f 72 20 28 75 73 65 64 20 62 79   cursor (used by
26150 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69   min/max) */.  i
26160 6e 74 20 72 65 67 41 70 70 3b 20 20 20 20 20 20  nt regApp;      
26170 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69         /* Functi
26180 6f 6e 20 72 65 67 69 73 74 65 72 20 28 61 6c 73  on register (als
26190 6f 20 75 73 65 64 20 62 79 20 6d 69 6e 2f 6d 61  o used by min/ma
261a0 78 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 50  x) */.  int regP
261b0 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  art;            
261c0 2f 2a 20 46 69 72 73 74 20 69 6e 20 61 20 73 65  /* First in a se
261d0 74 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 68  t of registers h
261e0 6f 6c 64 69 6e 67 20 50 41 52 54 49 54 49 4f 4e  olding PARTITION
261f0 20 42 59 0a 20 20 20 20 20 20 20 20 20 20 20 20   BY.            
26200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
26210 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 76 61   and ORDER BY va
26220 6c 75 65 73 20 66 6f 72 20 74 68 65 20 77 69 6e  lues for the win
26230 64 6f 77 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  dow */.  Expr *p
26240 4f 77 6e 65 72 3b 20 20 20 20 20 20 20 20 20 20  Owner;          
26250 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 6f   /* Expression o
26260 62 6a 65 63 74 20 74 68 69 73 20 77 69 6e 64 6f  bject this windo
26270 77 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  w is attached to
26280 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 66 66 65   */.  int nBuffe
26290 72 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  rCol;         /*
262a0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
262b0 6e 73 20 69 6e 20 62 75 66 66 65 72 20 74 61 62  ns in buffer tab
262c0 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 41 72 67  le */.  int iArg
262d0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
262e0 2f 2a 20 4f 66 66 73 65 74 20 6f 66 20 66 69 72  /* Offset of fir
262f0 73 74 20 61 72 67 75 6d 65 6e 74 20 66 6f 72 20  st argument for 
26300 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  this function */
26310 0a 7d 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .};..#ifndef SQL
26320 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46  ITE_OMIT_WINDOWF
26330 55 4e 43 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  UNC.void sqlite3
26340 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 73 71 6c  WindowDelete(sql
26350 69 74 65 33 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b  ite3*, Window*);
26360 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
26370 64 6f 77 4c 69 73 74 44 65 6c 65 74 65 28 73 71  dowListDelete(sq
26380 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e 64 6f  lite3 *db, Windo
26390 77 20 2a 70 29 3b 0a 57 69 6e 64 6f 77 20 2a 73  w *p);.Window *s
263a0 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 6c 6c 6f  qlite3WindowAllo
263b0 63 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  c(Parse*, int, i
263c0 6e 74 2c 20 45 78 70 72 2a 2c 20 69 6e 74 20 2c  nt, Expr*, int ,
263d0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
263e0 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61 63  lite3WindowAttac
263f0 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  h(Parse*, Expr*,
26400 20 57 69 6e 64 6f 77 2a 29 3b 0a 69 6e 74 20 73   Window*);.int s
26410 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 6d 70  qlite3WindowComp
26420 61 72 65 28 50 61 72 73 65 2a 2c 20 57 69 6e 64  are(Parse*, Wind
26430 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76  ow*, Window*);.v
26440 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  oid sqlite3Windo
26450 77 43 6f 64 65 49 6e 69 74 28 50 61 72 73 65 2a  wCodeInit(Parse*
26460 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64  , Window*);.void
26470 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f   sqlite3WindowCo
26480 64 65 53 74 65 70 28 50 61 72 73 65 2a 2c 20 53  deStep(Parse*, S
26490 65 6c 65 63 74 2a 2c 20 57 68 65 72 65 49 6e 66  elect*, WhereInf
264a0 6f 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69  o*, int, int);.i
264b0 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  nt sqlite3Window
264c0 52 65 77 72 69 74 65 28 50 61 72 73 65 2a 2c 20  Rewrite(Parse*, 
264d0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
264e0 6c 69 74 65 33 45 78 70 61 6e 64 53 75 62 71 75  lite3ExpandSubqu
264f0 65 72 79 28 50 61 72 73 65 2a 2c 20 73 74 72 75  ery(Parse*, stru
26500 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 2a  ct SrcList_item*
26510 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
26520 69 6e 64 6f 77 55 70 64 61 74 65 28 50 61 72 73  indowUpdate(Pars
26530 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e  e*, Window*, Win
26540 64 6f 77 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b  dow*, FuncDef*);
26550 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33  .Window *sqlite3
26560 57 69 6e 64 6f 77 44 75 70 28 73 71 6c 69 74 65  WindowDup(sqlite
26570 33 20 2a 64 62 2c 20 45 78 70 72 20 2a 70 4f 77  3 *db, Expr *pOw
26580 6e 65 72 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b  ner, Window *p);
26590 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33  .Window *sqlite3
265a0 57 69 6e 64 6f 77 4c 69 73 74 44 75 70 28 73 71  WindowListDup(sq
265b0 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e 64 6f  lite3 *db, Windo
265c0 77 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69  w *p);.void sqli
265d0 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f  te3WindowFunctio
265e0 6e 73 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a  ns(void);.#else.
265f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
26600 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 61 2c 62  WindowDelete(a,b
26610 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
26620 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f 6e  e3WindowFunction
26630 73 28 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  s().# define sql
26640 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61 63 68  ite3WindowAttach
26650 28 61 2c 62 2c 63 29 0a 23 65 6e 64 69 66 0a 0a  (a,b,c).#endif..
26660 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a  /*.** Assuming z
26670 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  In points to the
26680 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   first byte of a
26690 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
266a0 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e  ,.** advance zIn
266b0 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
266c0 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74   first byte of t
266d0 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68  he next UTF-8 ch
266e0 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  aracter..*/.#def
266f0 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f  ine SQLITE_SKIP_
26700 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20  UTF8(zIn) {     
26710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26720 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49     \.  if( (*(zI
26730 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20  n++))>=0xc0 ){  
26740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26750 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
26760 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26    while( (*zIn &
26770 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20   0xc0)==0x80 ){ 
26780 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20  zIn++; }        
26790 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20       \.  }      
267a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
267d0 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  }../*.** The SQL
267e0 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f  ITE_*_BKPT macro
267f0 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  s are substitute
26800 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20  s for the error 
26810 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68  codes with.** th
26820 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20  e same name but 
26830 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50  without the _BKP
26840 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65  T suffix.  These
26850 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a   macros invoke.*
26860 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20  * routines that 
26870 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d  report the line-
26880 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20  number on which 
26890 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e  the error origin
268a0 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71  ated.** using sq
268b0 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68  lite3_log().  Th
268c0 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20  e routines also 
268d0 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e  provide a conven
268e0 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f  ient place.** to
268f0 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20   set a debugger 
26900 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69  breakpoint..*/.i
26910 6e 74 20 73 71 6c 69 74 65 33 52 65 70 6f 72 74  nt sqlite3Report
26920 45 72 72 6f 72 28 69 6e 74 20 69 45 72 72 2c 20  Error(int iErr, 
26930 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f 6e 73  int lineno, cons
26940 74 20 63 68 61 72 20 2a 7a 54 79 70 65 29 3b 0a  t char *zType);.
26950 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75  int sqlite3Corru
26960 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  ptError(int);.in
26970 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  t sqlite3MisuseE
26980 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
26990 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
269a0 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e  ror(int);.#defin
269b0 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
269c0 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72  _BKPT sqlite3Cor
269d0 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  ruptError(__LINE
269e0 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
269f0 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73  TE_MISUSE_BKPT s
26a00 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
26a10 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
26a20 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f  ine SQLITE_CANTO
26a30 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  PEN_BKPT sqlite3
26a40 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f  CantopenError(__
26a50 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53  LINE__).#ifdef S
26a60 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e  QLITE_DEBUG.  in
26a70 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72  t sqlite3NomemEr
26a80 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  ror(int);.  int 
26a90 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65  sqlite3Ioerrnome
26aa0 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69  mError(int);.  i
26ab0 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
26ac0 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74 2c 50  tPgnoError(int,P
26ad0 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65 20 53  gno);.# define S
26ae0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
26af0 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72   sqlite3NomemErr
26b00 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64  or(__LINE__).# d
26b10 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45  efine SQLITE_IOE
26b20 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71  RR_NOMEM_BKPT sq
26b30 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45  lite3IoerrnomemE
26b40 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
26b50 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43   define SQLITE_C
26b60 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73  ORRUPT_PGNO(P) s
26b70 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e  qlite3CorruptPgn
26b80 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c  oError(__LINE__,
26b90 28 50 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  (P)).#else.# def
26ba0 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  ine SQLITE_NOMEM
26bb0 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d  _BKPT SQLITE_NOM
26bc0 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  EM.# define SQLI
26bd0 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42  TE_IOERR_NOMEM_B
26be0 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  KPT SQLITE_IOERR
26bf0 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20  _NOMEM.# define 
26c00 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50  SQLITE_CORRUPT_P
26c10 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f  GNO(P) sqlite3Co
26c20 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e  rruptError(__LIN
26c30 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E__).#endif../*.
26c40 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53 34  ** FTS3 and FTS4
26c50 20 62 6f 74 68 20 72 65 71 75 69 72 65 20 76 69   both require vi
26c60 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70  rtual table supp
26c70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ort.*/.#if defin
26c80 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
26c90 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75  IRTUALTABLE).# u
26ca0 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
26cb0 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20  LE_FTS3.# undef 
26cc0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
26cd0 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  S4.#endif../*.**
26ce0 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20   FTS4 is really 
26cf0 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72  an extension for
26d00 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e   FTS3.  It is en
26d10 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a  abled using the.
26d20 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ** SQLITE_ENABLE
26d30 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75  _FTS3 macro.  Bu
26d40 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  t to avoid confu
26d50 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c  sion we also cal
26d60 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  l.** the SQLITE_
26d70 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72  ENABLE_FTS4 macr
26d80 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e  o to serve as an
26d90 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54   alias for SQLIT
26da0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a  E_ENABLE_FTS3..*
26db0 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
26dc0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
26dd0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
26de0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
26df0 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
26e00 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a  E_ENABLE_FTS3 1.
26e10 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
26e20 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72  e ctype.h header
26e30 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e   is needed for n
26e40 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73  on-ASCII systems
26e50 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a  .  It is also.**
26e60 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20   needed by FTS3 
26e70 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63  when FTS3 is inc
26e80 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61  luded in the ama
26e90 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  lgamation..*/.#i
26ea0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
26eb0 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20  E_ASCII) || \.  
26ec0 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
26ed0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26  E_ENABLE_FTS3) &
26ee0 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
26ef0 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a  _AMALGAMATION)).
26f00 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  # include <ctype
26f10 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
26f20 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
26f30 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65  macros mimic the
26f40 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72   standard librar
26f50 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70  y functions toup
26f60 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63  per(),.** isspac
26f70 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20  e(), isalnum(), 
26f80 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73  isdigit() and is
26f90 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63  xdigit(), respec
26fa0 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73  tively. The.** s
26fb0 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f  qlite versions o
26fc0 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43  nly work for ASC
26fd0 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72  II characters, r
26fe0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63  egardless of loc
26ff0 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ale..*/.#ifdef S
27000 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65  QLITE_ASCII.# de
27010 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
27020 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73  per(x)  ((x)&~(s
27030 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
27040 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
27050 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69  )]&0x20)).# defi
27060 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
27070 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  e(x)   (sqlite3C
27080 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
27090 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31  d char)(x)]&0x01
270a0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
270b0 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28  e3Isalnum(x)   (
270c0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
270d0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
270e0 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69  x)]&0x06).# defi
270f0 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
27100 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  a(x)   (sqlite3C
27110 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
27120 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32  d char)(x)]&0x02
27130 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27140 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28  e3Isdigit(x)   (
27150 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
27160 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27170 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69  x)]&0x04).# defi
27180 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
27190 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43  it(x)  (sqlite3C
271a0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
271b0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38  d char)(x)]&0x08
271c0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
271d0 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28  e3Tolower(x)   (
271e0 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
271f0 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  wer[(unsigned ch
27200 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e  ar)(x)]).# defin
27210 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65  e sqlite3Isquote
27220 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
27230 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
27240 20 63 68 61 72 29 28 78 29 5d 26 30 78 38 30 29   char)(x)]&0x80)
27250 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
27260 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
27270 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73  )   toupper((uns
27280 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
27290 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
272a0 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73  Isspace(x)   iss
272b0 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63  pace((unsigned c
272c0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
272d0 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
272e0 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75  (x)   isalnum((u
272f0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
27300 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27310 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69  e3Isalpha(x)   i
27320 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64  salpha((unsigned
27330 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
27340 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
27350 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28  it(x)   isdigit(
27360 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27370 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
27380 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20  ite3Isxdigit(x) 
27390 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67   isxdigit((unsig
273a0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
273b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
273c0 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77  lower(x)   tolow
273d0 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
273e0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
273f0 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78  sqlite3Isquote(x
27400 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28  )   ((x)=='"'||(
27410 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27  x)=='\''||(x)=='
27420 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65  ['||(x)=='`').#e
27430 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
27440 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
27450 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74  OPTION_DIAGS.int
27460 20 73 71 6c 69 74 65 33 49 73 49 64 43 68 61 72   sqlite3IsIdChar
27470 28 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (u8);.#endif../*
27480 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e  .** Internal fun
27490 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73  ction prototypes
274a0 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  .*/.int sqlite3S
274b0 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61  trICmp(const cha
274c0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
274d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c  .int sqlite3Strl
274e0 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a  en30(const char*
274f0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
27500 43 6f 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d  ColumnType(Colum
27510 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66 69  n*,char*);.#defi
27520 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  ne sqlite3StrNIC
27530 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69  mp sqlite3_strni
27540 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  cmp..int sqlite3
27550 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29  MallocInit(void)
27560 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
27570 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76  llocEnd(void);.v
27580 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
27590 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  oc(u64);.void *s
275a0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f  qlite3MallocZero
275b0 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (u64);.void *sql
275c0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
275d0 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
275e0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
275f0 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65  MallocRaw(sqlite
27600 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a  3*, u64);.void *
27610 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
27620 61 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75  awNN(sqlite3*, u
27630 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  64);.char *sqlit
27640 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74  e3DbStrDup(sqlit
27650 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
27660 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
27670 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33  bStrNDup(sqlite3
27680 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75  *,const char*, u
27690 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  64);.char *sqlit
276a0 65 33 44 62 53 70 61 6e 44 75 70 28 73 71 6c 69  e3DbSpanDup(sqli
276b0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
276c0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
276d0 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c  oid *sqlite3Real
276e0 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b  loc(void*, u64);
276f0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
27700 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71  ReallocOrFree(sq
27710 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c  lite3 *, void *,
27720 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
27730 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71  ite3DbRealloc(sq
27740 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c  lite3 *, void *,
27750 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u64);.void sqli
27760 74 65 33 44 62 46 72 65 65 28 73 71 6c 69 74 65  te3DbFree(sqlite
27770 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  3*, void*);.void
27780 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e   sqlite3DbFreeNN
27790 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
277a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  );.int sqlite3Ma
277b0 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b  llocSize(void*);
277c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61  .int sqlite3DbMa
277d0 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33  llocSize(sqlite3
277e0 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  *, void*);.void 
277f0 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c  *sqlite3PageMall
27800 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  oc(int);.void sq
27810 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76 6f  lite3PageFree(vo
27820 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
27830 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28  e3MemSetDefault(
27840 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66 20 53  void);.#ifndef S
27850 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
27860 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e  .void sqlite3Ben
27870 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76  ignMallocHooks(v
27880 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76  oid (*)(void), v
27890 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a  oid (*)(void));.
278a0 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
278b0 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c  e3HeapNearlyFull
278c0 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f  (void);../*.** O
278d0 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 61  n systems with a
278e0 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65  mple stack space
278f0 20 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72   and that suppor
27900 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65  t alloca(), make
27910 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63  .** use of alloc
27920 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70  a() to obtain sp
27930 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75  ace for large au
27940 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e  tomatic objects.
27950 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a    By default,.**
27960 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 72   obtain space fr
27970 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a  om malloc()..**.
27980 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20  ** The alloca() 
27990 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65  routine never re
279a0 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69  turns NULL.  Thi
279b0 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64  s will cause cod
279c0 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20  e paths.** that 
279d0 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65  deal with sqlite
279e0 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61  3StackAlloc() fa
279f0 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72  ilures to be unr
27a00 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66  eachable..*/.#if
27a10 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41  def SQLITE_USE_A
27a20 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73  LLOCA.# define s
27a30 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
27a40 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63  Raw(D,N)   alloc
27a50 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  a(N).# define sq
27a60 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a  lite3StackAllocZ
27a70 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74  ero(D,N)  memset
27a80 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e  (alloca(N), 0, N
27a90 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27aa0 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29  e3StackFree(D,P)
27ab0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
27ac0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
27ad0 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69  cRaw(D,N)   sqli
27ae0 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44  te3DbMallocRaw(D
27af0 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
27b00 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65  ite3StackAllocZe
27b10 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33  ro(D,N)  sqlite3
27b20 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  DbMallocZero(D,N
27b30 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27b40 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29  e3StackFree(D,P)
27b50 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
27b60 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66  Free(D,P).#endif
27b70 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f  ../* Do not allo
27b80 77 20 62 6f 74 68 20 4d 45 4d 53 59 53 35 20 61  w both MEMSYS5 a
27b90 6e 64 20 4d 45 4d 53 59 53 33 20 74 6f 20 62 65  nd MEMSYS3 to be
27ba0 20 64 65 66 69 6e 65 64 20 74 6f 67 65 74 68 65   defined togethe
27bb0 72 2e 20 20 49 66 20 74 68 65 79 0a 2a 2a 20 61  r.  If they.** a
27bc0 72 65 2c 20 64 69 73 61 62 6c 65 20 4d 45 4d 53  re, disable MEMS
27bd0 59 53 33 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  YS3.*/.#ifdef SQ
27be0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
27bf0 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS5.const sqlite
27c00 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
27c10 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
27c20 79 73 35 28 76 6f 69 64 29 3b 0a 23 75 6e 64 65  ys5(void);.#unde
27c30 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
27c40 4d 45 4d 53 59 53 33 0a 23 65 6e 64 69 66 0a 23  MEMSYS3.#endif.#
27c50 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
27c60 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73  BLE_MEMSYS3.cons
27c70 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
27c80 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
27c90 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64  mGetMemsys3(void
27ca0 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  );.#endif...#ifn
27cb0 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58  def SQLITE_MUTEX
27cc0 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f  _OMIT.  sqlite3_
27cd0 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
27ce0 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61  nst *sqlite3Defa
27cf0 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  ultMutex(void);.
27d00 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
27d10 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
27d20 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28  qlite3NoopMutex(
27d30 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
27d40 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d  _mutex *sqlite3M
27d50 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a  utexAlloc(int);.
27d60 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
27d70 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20  exInit(void);.  
27d80 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78  int sqlite3Mutex
27d90 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  End(void);.#endi
27da0 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
27db0 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54  QLITE_MUTEX_OMIT
27dc0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
27dd0 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29  LITE_MUTEX_NOOP)
27de0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
27df0 65 6d 6f 72 79 42 61 72 72 69 65 72 28 76 6f 69  emoryBarrier(voi
27e00 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  d);.#else.# defi
27e10 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79  ne sqlite3Memory
27e20 42 61 72 72 69 65 72 28 29 0a 23 65 6e 64 69 66  Barrier().#endif
27e30 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20  ..sqlite3_int64 
27e40 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c  sqlite3StatusVal
27e50 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ue(int);.void sq
27e60 6c 69 74 65 33 53 74 61 74 75 73 55 70 28 69 6e  lite3StatusUp(in
27e70 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
27e80 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77 6e 28  lite3StatusDown(
27e90 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
27ea0 73 71 6c 69 74 65 33 53 74 61 74 75 73 48 69 67  sqlite3StatusHig
27eb0 68 77 61 74 65 72 28 69 6e 74 2c 20 69 6e 74 29  hwater(int, int)
27ec0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4c 6f 6f  ;.int sqlite3Loo
27ed0 6b 61 73 69 64 65 55 73 65 64 28 73 71 6c 69 74  kasideUsed(sqlit
27ee0 65 33 2a 2c 69 6e 74 2a 29 3b 0a 0a 2f 2a 20 41  e3*,int*);../* A
27ef0 63 63 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73  ccess to mutexes
27f00 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
27f10 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c  _status() */.sql
27f20 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
27f30 74 65 33 50 63 61 63 68 65 31 4d 75 74 65 78 28  te3Pcache1Mutex(
27f40 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d  void);.sqlite3_m
27f50 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c  utex *sqlite3Mal
27f60 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  locMutex(void);.
27f70 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
27f80 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54 49  ITE_ENABLE_MULTI
27f90 54 48 52 45 41 44 45 44 5f 43 48 45 43 4b 53 29  THREADED_CHECKS)
27fa0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
27fb0 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 0a  ITE_MUTEX_OMIT).
27fc0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 74 65  void sqlite3Mute
27fd0 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f  xWarnOnContentio
27fe0 6e 28 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 2a  n(sqlite3_mutex*
27ff0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
28000 65 20 73 71 6c 69 74 65 33 4d 75 74 65 78 57 61  e sqlite3MutexWa
28010 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28 78  rnOnContention(x
28020 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ).#endif..#ifnde
28030 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
28040 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69  OATING_POINT.  i
28050 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  nt sqlite3IsNaN(
28060 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23  double);.#else.#
28070 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
28080 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69  sNaN(X)  0.#endi
28090 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
280a0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
280b0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
280c0 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  holds informatio
280d0 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66  n about SQL.** f
280e0 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e  unctions argumen
280f0 74 73 20 74 68 61 74 20 61 72 65 20 74 68 65 20  ts that are the 
28100 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68  parameters to th
28110 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74  e printf() funct
28120 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50  ion..*/.struct P
28130 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b  rintfArguments {
28140 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20  .  int nArg;    
28150 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
28160 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61  otal number of a
28170 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e  rguments */.  in
28180 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20  t nUsed;        
28190 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
281a0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73   of arguments us
281b0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73  ed so far */.  s
281c0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
281d0 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61  pArg;   /* The a
281e0 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a  rgument values *
281f0 2f 0a 7d 3b 0a 0a 63 68 61 72 20 2a 73 71 6c 69  /.};..char *sqli
28200 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  te3MPrintf(sqlit
28210 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
28220 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c   ...);.char *sql
28230 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c  ite3VMPrintf(sql
28240 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
28250 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66  *, va_list);.#if
28260 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
28270 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
28280 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53  d(SQLITE_HAVE_OS
28290 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64 20 73  _TRACE).  void s
282a0 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
282b0 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  f(const char*, .
282c0 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  ..);.#endif.#if 
282d0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
282e0 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c  EST).  void *sql
282f0 69 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74  ite3TestTextToPt
28300 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  r(const char*);.
28310 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
28320 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
28330 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
28340 54 72 65 65 56 69 65 77 45 78 70 72 28 54 72 65  TreeViewExpr(Tre
28350 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78  eView*, const Ex
28360 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64  pr*, u8);.  void
28370 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
28380 42 61 72 65 45 78 70 72 4c 69 73 74 28 54 72 65  BareExprList(Tre
28390 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78  eView*, const Ex
283a0 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
283b0 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
283c0 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70  lite3TreeViewExp
283d0 72 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c  rList(TreeView*,
283e0 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a   const ExprList*
283f0 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72  , u8, const char
28400 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
28410 65 33 54 72 65 65 56 69 65 77 53 65 6c 65 63 74  e3TreeViewSelect
28420 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
28430 74 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a  t Select*, u8);.
28440 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
28450 65 65 56 69 65 77 57 69 74 68 28 54 72 65 65 56  eeViewWith(TreeV
28460 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68  iew*, const With
28470 2a 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  *, u8);.#ifndef 
28480 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44  SQLITE_OMIT_WIND
28490 4f 57 46 55 4e 43 0a 20 20 76 6f 69 64 20 73 71  OWFUNC.  void sq
284a0 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69 6e  lite3TreeViewWin
284b0 64 6f 77 28 54 72 65 65 56 69 65 77 2a 2c 20 63  dow(TreeView*, c
284c0 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38  onst Window*, u8
284d0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
284e0 33 54 72 65 65 56 69 65 77 57 69 6e 46 75 6e 63  3TreeViewWinFunc
284f0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
28500 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a  t Window*, u8);.
28510 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 0a  #endif.#endif...
28520 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53  void sqlite3SetS
28530 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73  tring(char **, s
28540 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
28550 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
28560 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73  te3ErrorMsg(Pars
28570 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
28580 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69   ...);.void sqli
28590 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a  te3Dequote(char*
285a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
285b0 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c  okenInit(Token*,
285c0 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
285d0 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63  te3KeywordCode(c
285e0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
285f0 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
28600 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28  qlite3RunParser(
28610 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
28620 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76  ar*, char **);.v
28630 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
28640 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b  hCoding(Parse*);
28650 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
28660 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a  empReg(Parse*);.
28670 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
28680 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65  aseTempReg(Parse
28690 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
286a0 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28  te3GetTempRange(
286b0 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
286c0 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
286d0 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
286e0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
286f0 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70  sqlite3ClearTemp
28700 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29  RegCache(Parse*)
28710 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
28720 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65  DEBUG.int sqlite
28730 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65 28  3NoTempsInRange(
28740 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
28750 0a 23 65 6e 64 69 66 0a 45 78 70 72 20 2a 73 71  .#endif.Expr *sq
28760 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73  lite3ExprAlloc(s
28770 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
28780 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45  t Token*,int);.E
28790 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
287a0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
287b0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
287c0 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74 61   sqlite3ExprAtta
287d0 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69 74  chSubtrees(sqlit
287e0 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  e3*,Expr*,Expr*,
287f0 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
28800 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73 65  lite3PExpr(Parse
28810 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45  *, int, Expr*, E
28820 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
28830 74 65 33 50 45 78 70 72 41 64 64 53 65 6c 65 63  te3PExprAddSelec
28840 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
28850 20 53 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72 20   Select*);.Expr 
28860 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28  *sqlite3ExprAnd(
28870 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20  sqlite3*,Expr*, 
28880 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
28890 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f  lite3ExprFunctio
288a0 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  n(Parse*,ExprLis
288b0 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  t*, Token*, int)
288c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
288d0 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
288e0 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  r(Parse*, Expr*,
288f0 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u32);.void sqli
28900 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71  te3ExprDelete(sq
28910 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a  lite3*, Expr*);.
28920 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
28930 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28  3ExprListAppend(
28940 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
28950 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73  ,Expr*);.ExprLis
28960 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
28970 73 74 41 70 70 65 6e 64 56 65 63 74 6f 72 28 50  stAppendVector(P
28980 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
28990 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  IdList*,Expr*);.
289a0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
289b0 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72  ListSetSortOrder
289c0 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b  (ExprList*,int);
289d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
289e0 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72  rListSetName(Par
289f0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f  se*,ExprList*,To
28a00 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
28a10 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
28a20 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78  etSpan(Parse*,Ex
28a30 70 72 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  prList*,const ch
28a40 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
28a50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
28a60 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  prListDelete(sql
28a70 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ite3*, ExprList*
28a80 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78  );.u32 sqlite3Ex
28a90 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73  prListFlags(cons
28aa0 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  t ExprList*);.in
28ab0 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71  t sqlite3Init(sq
28ac0 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b  lite3*, char**);
28ad0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
28ae0 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20  Callback(void*, 
28af0 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61  int, char**, cha
28b00 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r**);.int sqlite
28b10 33 49 6e 69 74 4f 6e 65 28 73 71 6c 69 74 65 33  3InitOne(sqlite3
28b20 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20  *, int, char**, 
28b30 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
28b40 65 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c  e3Pragma(Parse*,
28b50 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
28b60 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e 64  ken*,int);.#ifnd
28b70 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
28b80 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d 6f 64 75  IRTUALTABLE.Modu
28b90 6c 65 20 2a 73 71 6c 69 74 65 33 50 72 61 67 6d  le *sqlite3Pragm
28ba0 61 56 74 61 62 52 65 67 69 73 74 65 72 28 73 71  aVtabRegister(sq
28bb0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
28bc0 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64 69  r *zName);.#endi
28bd0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  f.void sqlite3Re
28be0 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
28bf0 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65  onnection(sqlite
28c00 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
28c10 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
28c20 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
28c30 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61  oid sqlite3Colla
28c40 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79  pseDatabaseArray
28c50 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
28c60 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e   sqlite3CommitIn
28c70 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71  ternalChanges(sq
28c80 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
28c90 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d  lite3DeleteColum
28ca0 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c  nNames(sqlite3*,
28cb0 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
28cc0 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45  ite3ColumnsFromE
28cd0 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45  xprList(Parse*,E
28ce0 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f  xprList*,i16*,Co
28cf0 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  lumn**);.void sq
28d00 6c 69 74 65 33 53 65 6c 65 63 74 41 64 64 43 6f  lite3SelectAddCo
28d10 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61  lumnTypeAndColla
28d20 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c  tion(Parse*,Tabl
28d30 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62  e*,Select*);.Tab
28d40 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c  le *sqlite3Resul
28d50 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72  tSetOfSelect(Par
28d60 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f  se*,Select*);.vo
28d70 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61  id sqlite3OpenMa
28d80 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20  sterTable(Parse 
28d90 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a  *, int);.Index *
28da0 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65  sqlite3PrimaryKe
28db0 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a  yIndex(Table*);.
28dc0 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  i16 sqlite3Colum
28dd0 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c  nOfIndex(Index*,
28de0 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69   i16);.void sqli
28df0 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61  te3StartTable(Pa
28e00 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
28e10 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  n*,int,int,int,i
28e20 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  nt);.#if SQLITE_
28e30 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
28e40 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c  LUMNS.  void sql
28e50 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72  ite3ColumnProper
28e60 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62  tiesFromName(Tab
28e70 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23  le*, Column*);.#
28e80 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
28e90 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65  lite3ColumnPrope
28ea0 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c  rtiesFromName(T,
28eb0 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23  C) /* no-op */.#
28ec0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
28ed0 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  e3AddColumn(Pars
28ee0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
28ef0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
28f00 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a  ddNotNull(Parse*
28f10 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28f20 69 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65  ite3AddPrimaryKe
28f30 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
28f40 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  st*, int, int, i
28f50 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28f60 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61  3AddCheckConstra
28f70 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  int(Parse*, Expr
28f80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28f90 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28  AddDefaultValue(
28fa0 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e  Parse*,Expr*,con
28fb0 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
28fc0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
28fd0 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70  te3AddCollateTyp
28fe0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
28ff0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
29000 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ndTable(Parse*,T
29010 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c  oken*,Token*,u8,
29020 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
29030 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f  lite3ParseUri(co
29040 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
29050 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69  char*,unsigned i
29060 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  nt*,.           
29070 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
29080 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68  _vfs**,char**,ch
29090 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73  ar **);.Btree *s
290a0 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74  qlite3DbNameToBt
290b0 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ree(sqlite3*,con
290c0 73 74 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66 64  st char*);..#ifd
290d0 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
290e0 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 73 71  ABLE.# define sq
290f0 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29  lite3FaultSim(X)
29100 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65   SQLITE_OK.#else
29110 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61  .  int sqlite3Fa
29120 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e  ultSim(int);.#en
29130 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c  dif..Bitvec *sql
29140 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65  ite3BitvecCreate
29150 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (u32);.int sqlit
29160 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74  e3BitvecTest(Bit
29170 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  vec*, u32);.int 
29180 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73  sqlite3BitvecTes
29190 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a  tNotNull(Bitvec*
291a0 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
291b0 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74  te3BitvecSet(Bit
291c0 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  vec*, u32);.void
291d0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c   sqlite3BitvecCl
291e0 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32  ear(Bitvec*, u32
291f0 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  , void*);.void s
29200 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74  qlite3BitvecDest
29210 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33  roy(Bitvec*);.u3
29220 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  2 sqlite3BitvecS
29230 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69  ize(Bitvec*);.#i
29240 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
29250 45 53 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69  ESTABLE.int sqli
29260 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e  te3BitvecBuiltin
29270 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a  Test(int,int*);.
29280 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a  #endif..RowSet *
29290 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69  sqlite3RowSetIni
292a0 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  t(sqlite3*, void
292b0 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29  *, unsigned int)
292c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
292d0 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74  wSetClear(RowSet
292e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
292f0 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77  RowSetInsert(Row
29300 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20  Set*, i64);.int 
29310 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73  sqlite3RowSetTes
29320 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69  t(RowSet*, int i
29330 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74  Batch, i64);.int
29340 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
29350 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a  xt(RowSet*, i64*
29360 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
29370 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65  CreateView(Parse
29380 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
29390 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
293a0 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74  ,Select*,int,int
293b0 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
293c0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
293d0 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53  W) || !defined(S
293e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
293f0 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73  ALTABLE).  int s
29400 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
29410 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  umnNames(Parse*,
29420 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23  Table*);.#else.#
29430 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
29440 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
29450 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a  s(A,B) 0.#endif.
29460 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
29470 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e  ATTACHED>30.  in
29480 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41  t sqlite3DbMaskA
29490 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b  llZero(yDbMask);
294a0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
294b0 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61  ite3DropTable(Pa
294c0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
294d0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
294e0 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54  sqlite3CodeDropT
294f0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62  able(Parse*, Tab
29500 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  le*, int, int);.
29510 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
29520 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
29530 2c 20 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20  , Table*);.void 
29540 73 71 6c 69 74 65 33 46 72 65 65 49 6e 64 65 78  sqlite3FreeIndex
29550 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78  (sqlite3*, Index
29560 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
29570 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
29580 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c  EMENT.  void sql
29590 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
295a0 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50  tBegin(Parse *pP
295b0 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71  arse);.  void sq
295c0 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
295d0 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61  ntEnd(Parse *pPa
295e0 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  rse);.#else.# de
295f0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
29600 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58  incrementBegin(X
29610 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
29620 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
29630 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69  nd(X).#endif.voi
29640 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28  d sqlite3Insert(
29650 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
29660 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73  , Select*, IdLis
29670 74 2a 2c 20 69 6e 74 2c 20 55 70 73 65 72 74 2a  t*, int, Upsert*
29680 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
29690 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71  ArrayAllocate(sq
296a0 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74  lite3*,void*,int
296b0 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c  ,int*,int*);.IdL
296c0 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
296d0 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c  stAppend(Parse*,
296e0 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a   IdList*, Token*
296f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64  );.int sqlite3Id
29700 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74  ListIndex(IdList
29710 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
29720 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
29730 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73  SrcListEnlarge(s
29740 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
29750 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72  *, int, int);.Sr
29760 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
29770 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  cListAppend(sqli
29780 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
29790 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
297a0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
297b0 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72  3SrcListAppendFr
297c0 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53  omTerm(Parse*, S
297d0 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
297e0 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20   Token*,.       
297f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
29810 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  oken*, Select*, 
29820 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  Expr*, IdList*);
29830 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
29840 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61  ListIndexedBy(Pa
29850 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
29860 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
29870 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46   sqlite3SrcListF
29880 75 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20  uncArgs(Parse*, 
29890 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
298a0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
298b0 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70  3IndexedByLookup
298c0 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74  (Parse *, struct
298d0 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
298e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
298f0 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
29900 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  pe(SrcList*);.vo
29910 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
29920 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50  tAssignCursors(P
29930 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
29940 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64  ;.void sqlite3Id
29950 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
29960 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  e3*, IdList*);.v
29970 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
29980 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
29990 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e  *, SrcList*);.In
299a0 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f  dex *sqlite3Allo
299b0 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  cateIndexObject(
299c0 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74  sqlite3*,i16,int
299d0 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73  ,char**);.void s
299e0 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64 65  qlite3CreateInde
299f0 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  x(Parse*,Token*,
29a00 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c  Token*,SrcList*,
29a10 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f  ExprList*,int,To
29a20 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
29a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a40 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  Expr*, int, int,
29a50 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
29a60 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73  e3DropIndex(Pars
29a70 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
29a80 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  t);.int sqlite3S
29a90 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65  elect(Parse*, Se
29aa0 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73  lect*, SelectDes
29ab0 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
29ac0 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61  ite3SelectNew(Pa
29ad0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  rse*,ExprList*,S
29ae0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
29af0 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  prList*,.       
29b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b10 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74    Expr*,ExprList
29b20 2a 2c 75 33 32 2c 45 78 70 72 2a 29 3b 0a 76 6f  *,u32,Expr*);.vo
29b30 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
29b40 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
29b50 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65   Select*);.Table
29b60 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
29b70 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53  Lookup(Parse*, S
29b80 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
29b90 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28  lite3IsReadOnly(
29ba0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
29bb0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29bc0 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73  e3OpenTable(Pars
29bd0 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e  e*, int iCur, in
29be0 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69  t iDb, Table*, i
29bf0 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  nt);.#if defined
29c00 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  (SQLITE_ENABLE_U
29c10 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
29c20 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
29c30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
29c40 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69  UERY).Expr *sqli
29c50 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61  te3LimitWhere(Pa
29c60 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
29c70 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
29c80 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64  pr*,char*);.#end
29c90 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
29ca0 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a  eleteFrom(Parse*
29cb0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
29cc0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
29cd0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
29ce0 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  e3Update(Parse*,
29cf0 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
29d00 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 45  ist*,Expr*,int,E
29d10 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 0a  xprList*,Expr*,.
29d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d30 20 20 20 55 70 73 65 72 74 2a 29 3b 0a 57 68 65     Upsert*);.Whe
29d40 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57  reInfo *sqlite3W
29d50 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a  hereBegin(Parse*
29d60 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
29d70 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ExprList*,ExprLi
29d80 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f  st*,u16,int);.vo
29d90 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45  id sqlite3WhereE
29da0 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nd(WhereInfo*);.
29db0 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 57 68  LogEst sqlite3Wh
29dc0 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e  ereOutputRowCoun
29dd0 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
29de0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
29df0 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49  sDistinct(WhereI
29e00 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
29e10 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64  e3WhereIsOrdered
29e20 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
29e30 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 72  t sqlite3WhereOr
29e40 64 65 72 65 64 49 6e 6e 65 72 4c 6f 6f 70 28 57  deredInnerLoop(W
29e50 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
29e60 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
29e70 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  rted(WhereInfo*)
29e80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
29e90 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28  reContinueLabel(
29ea0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
29eb0 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65   sqlite3WhereBre
29ec0 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  akLabel(WhereInf
29ed0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
29ee0 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57  WhereOkOnePass(W
29ef0 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29  hereInfo*, int*)
29f00 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53  ;.#define ONEPAS
29f10 53 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20 20  S_OFF      0    
29f20 20 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e      /* Use of ON
29f30 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65  EPASS not allowe
29f40 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45  d */.#define ONE
29f50 50 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20  PASS_SINGLE   1 
29f60 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53         /* ONEPAS
29f70 53 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69  S valid for a si
29f80 6e 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20  ngle row update 
29f90 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  */.#define ONEPA
29fa0 53 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20  SS_MULTI    2   
29fb0 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20       /* ONEPASS 
29fc0 69 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c  is valid for mul
29fd0 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f  tiple rows */.vo
29fe0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
29ff0 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d  deLoadIndexColum
2a000 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  n(Parse*, Index*
2a010 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
2a020 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2a030 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50  rCodeGetColumn(P
2a040 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
2a050 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  nt, int, int, u8
2a060 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a070 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
2a080 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54  OfTable(Vdbe*, T
2a090 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
2a0a0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2a0b0 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28  te3ExprCodeMove(
2a0c0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
2a0d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2a0e0 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72  ite3ExprCode(Par
2a0f0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
2a100 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2a110 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72 73 65  prCodeCopy(Parse
2a120 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2a130 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2a140 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50  CodeFactorable(P
2a150 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2a160 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2a170 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61  xprCodeAtInit(Pa
2a180 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2a190 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2a1a0 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
2a1b0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
2a1c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2a1d0 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
2a1e0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2a1f0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2a200 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72  CodeAndCache(Par
2a210 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
2a220 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2a230 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61  rCodeExprList(Pa
2a240 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2a250 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
2a260 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
2a270 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30  CEL_DUP      0x0
2a280 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20  1  /* Deep, not 
2a290 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a  shallow copies *
2a2a0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
2a2b0 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30  _ECEL_FACTOR   0
2a2c0 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f  x02  /* Factor o
2a2d0 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d  ut constant term
2a2e0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
2a2f0 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20  ITE_ECEL_REF    
2a300 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45    0x04  /* Use E
2a310 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64  xprList.u.x.iOrd
2a320 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66 69  erByCol */.#defi
2a330 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 4f  ne SQLITE_ECEL_O
2a340 4d 49 54 52 45 46 20 20 30 78 30 38 20 20 2f 2a  MITREF  0x08  /*
2a350 20 4f 6d 69 74 20 69 66 20 45 78 70 72 4c 69 73   Omit if ExprLis
2a360 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f  t.u.x.iOrderByCo
2a370 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  l */.void sqlite
2a380 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73  3ExprIfTrue(Pars
2a390 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
2a3a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2a3b0 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61  e3ExprIfFalse(Pa
2a3c0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2a3d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2a3e0 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 44  ite3ExprIfFalseD
2a3f0 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  up(Parse*, Expr*
2a400 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62  , int, int);.Tab
2a410 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54  le *sqlite3FindT
2a420 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  able(sqlite3*,co
2a430 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2a440 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65   char*);.#define
2a450 20 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20 20   LOCATE_VIEW    
2a460 30 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43  0x01.#define LOC
2a470 41 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30 32  ATE_NOERR   0x02
2a480 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
2a490 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65  ocateTable(Parse
2a4a0 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73  *,u32 flags,cons
2a4b0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2a4c0 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
2a4d0 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
2a4e0 49 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32 20  Item(Parse*,u32 
2a4f0 66 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72 63  flags,struct Src
2a500 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e  List_item *);.In
2a510 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  dex *sqlite3Find
2a520 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63  Index(sqlite3*,c
2a530 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2a540 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2a550 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2a560 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
2a570 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
2a580 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2a590 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2a5a0 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  eIndex(sqlite3*,
2a5b0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
2a5c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2a5d0 63 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b 65  cuum(Parse*,Toke
2a5e0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2a5f0 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a  RunVacuum(char**
2a600 2c 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  , sqlite3*, int)
2a610 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e  ;.char *sqlite3N
2a620 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c  ameFromToken(sql
2a630 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  ite3*, Token*);.
2a640 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2a650 6f 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 45 78  ompare(Parse*,Ex
2a660 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
2a670 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2a680 72 43 6f 6d 70 61 72 65 53 6b 69 70 28 45 78 70  rCompareSkip(Exp
2a690 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
2a6a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2a6b0 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72  ListCompare(Expr
2a6c0 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
2a6d0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2a6e0 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78  te3ExprImpliesEx
2a6f0 70 72 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  pr(Parse*,Expr*,
2a700 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
2a710 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70  t sqlite3ExprImp
2a720 6c 69 65 73 4e 6f 6e 4e 75 6c 6c 52 6f 77 28 45  liesNonNullRow(E
2a730 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  xpr*,int);.void 
2a740 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
2a750 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d  zeAggregates(Nam
2a760 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a  eContext*, Expr*
2a770 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a780 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73  xprAnalyzeAggLis
2a790 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45  t(NameContext*,E
2a7a0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
2a7b0 71 6c 69 74 65 33 45 78 70 72 43 6f 76 65 72 65  qlite3ExprCovere
2a7c0 64 42 79 49 6e 64 65 78 28 45 78 70 72 2a 2c 20  dByIndex(Expr*, 
2a7d0 69 6e 74 20 69 43 75 72 2c 20 49 6e 64 65 78 20  int iCur, Index 
2a7e0 2a 70 49 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69  *pIdx);.int sqli
2a7f0 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54  te3FunctionUsesT
2a800 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72  hisSrc(Expr*, Sr
2a810 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73  cList*);.Vdbe *s
2a820 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61  qlite3GetVdbe(Pa
2a830 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  rse*);.#ifndef S
2a840 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
2a850 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
2a860 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29  gSaveState(void)
2a870 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
2a880 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76  ngRestoreState(v
2a890 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  oid);.#endif.voi
2a8a0 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63  d sqlite3Rollbac
2a8b0 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e  kAll(sqlite3*,in
2a8c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2a8d0 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
2a8e0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
2a8f0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
2a900 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61  erifyNamedSchema
2a910 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
2a920 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20  har *zDb);.void 
2a930 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e  sqlite3BeginTran
2a940 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  saction(Parse*, 
2a950 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2a960 65 33 45 6e 64 54 72 61 6e 73 61 63 74 69 6f 6e  e3EndTransaction
2a970 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
2a980 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  id sqlite3Savepo
2a990 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
2a9a0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
2a9b0 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
2a9c0 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29  oints(sqlite3 *)
2a9d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65  ;.void sqlite3Le
2a9e0 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65  aveMutexAndClose
2a9f0 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29  Zombie(sqlite3*)
2aa00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2aa10 72 49 64 54 6f 54 72 75 65 46 61 6c 73 65 28 45  rIdToTrueFalse(E
2aa20 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2aa30 65 33 45 78 70 72 54 72 75 74 68 56 61 6c 75 65  e3ExprTruthValue
2aa40 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69  (const Expr*);.i
2aa50 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
2aa60 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b  Constant(Expr*);
2aa70 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2aa80 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69  IsConstantNotJoi
2aa90 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  n(Expr*);.int sq
2aaa0 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
2aab0 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78  antOrFunction(Ex
2aac0 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  pr*, u8);.int sq
2aad0 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
2aae0 61 6e 74 4f 72 47 72 6f 75 70 42 79 28 50 61 72  antOrGroupBy(Par
2aaf0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  se*, Expr*, Expr
2ab00 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2ab10 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f  te3ExprIsTableCo
2ab20 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74  nstant(Expr*,int
2ab30 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2ab40 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48  _ENABLE_CURSOR_H
2ab50 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33  INTS.int sqlite3
2ab60 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71  ExprContainsSubq
2ab70 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e  uery(Expr*);.#en
2ab80 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  dif.int sqlite3E
2ab90 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70  xprIsInteger(Exp
2aba0 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
2abb0 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e  qlite3ExprCanBeN
2abc0 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29  ull(const Expr*)
2abd0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2abe0 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79  rNeedsNoAffinity
2abf0 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70  Change(const Exp
2ac00 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73  r*, char);.int s
2ac10 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f  qlite3IsRowid(co
2ac20 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
2ac30 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
2ac40 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20 50  RowDelete(.    P
2ac50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69  arse*,Table*,Tri
2ac60 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  gger*,int,int,in
2ac70 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69  t,i16,u8,u8,u8,i
2ac80 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2ac90 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65  3GenerateRowInde
2aca0 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20  xDelete(Parse*, 
2acb0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
2acc0 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  , int*, int);.in
2acd0 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  t sqlite3Generat
2ace0 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a  eIndexKey(Parse*
2acf0 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
2ad00 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e  nt, int, int*,In
2ad10 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  dex*,int);.void 
2ad20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61  sqlite3ResolvePa
2ad30 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65  rtIdxLabel(Parse
2ad40 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2ad50 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73  ite3GenerateCons
2ad60 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72  traintChecks(Par
2ad70 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c  se*,Table*,int*,
2ad80 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  int,int,int,int,
2ad90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2adb0 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c        u8,u8,int,
2adc0 69 6e 74 2a 2c 69 6e 74 2a 2c 55 70 73 65 72 74  int*,int*,Upsert
2add0 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
2ade0 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52  E_ENABLE_NULL_TR
2adf0 49 4d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  IM.  void sqlite
2ae00 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35  3SetMakeRecordP5
2ae10 28 56 64 62 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  (Vdbe*,Table*);.
2ae20 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2ae30 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63  qlite3SetMakeRec
2ae40 6f 72 64 50 35 28 41 2c 42 29 0a 23 65 6e 64 69  ordP5(A,B).#endi
2ae50 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  f.void sqlite3Co
2ae60 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28  mpleteInsertion(
2ae70 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
2ae80 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69  t,int,int,int*,i
2ae90 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74  nt,int,int);.int
2aea0 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
2aeb0 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73  eAndIndices(Pars
2aec0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
2aed0 20 75 38 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69   u8, int, u8*, i
2aee0 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64  nt*, int*);.void
2aef0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69   sqlite3BeginWri
2af00 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73  teOperation(Pars
2af10 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
2af20 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69  oid sqlite3Multi
2af30 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76  Write(Parse*);.v
2af40 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62  oid sqlite3MayAb
2af50 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ort(Parse*);.voi
2af60 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e  d sqlite3HaltCon
2af70 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
2af80 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c  int, int, char*,
2af90 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73   i8, u8);.void s
2afa0 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73  qlite3UniqueCons
2afb0 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
2afc0 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  nt, Index*);.voi
2afd0 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f  d sqlite3RowidCo
2afe0 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
2aff0 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45   int, Table*);.E
2b000 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
2b010 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
2b020 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73  r*,int);.ExprLis
2b030 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
2b040 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  stDup(sqlite3*,E
2b050 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53  xprList*,int);.S
2b060 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
2b070 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  rcListDup(sqlite
2b080 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29  3*,SrcList*,int)
2b090 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
2b0a0 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74  3IdListDup(sqlit
2b0b0 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65  e3*,IdList*);.Se
2b0c0 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
2b0d0 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  ectDup(sqlite3*,
2b0e0 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f  Select*,int);.vo
2b0f0 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74  id sqlite3Insert
2b100 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e  BuiltinFuncs(Fun
2b110 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63  cDef*,int);.Func
2b120 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Def *sqlite3Find
2b130 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
2b140 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
2b150 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73  t,u8,u8);.void s
2b160 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75  qlite3RegisterBu
2b170 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76  iltinFunctions(v
2b180 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
2b190 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69  e3RegisterDateTi
2b1a0 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  meFunctions(void
2b1b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2b1c0 65 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63  egisterPerConnec
2b1d0 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74  tionBuiltinFunct
2b1e0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
2b1f0 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
2b200 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33  yCheckOk(sqlite3
2b210 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2b220 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72  afetyCheckSickOr
2b230 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  Ok(sqlite3*);.vo
2b240 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65  id sqlite3Change
2b250 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69  Cookie(Parse*, i
2b260 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
2b270 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
2b280 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64  IEW) && !defined
2b290 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
2b2a0 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74  GGER).void sqlit
2b2b0 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65  e3MaterializeVie
2b2c0 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  w(Parse*, Table*
2b2d0 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73  , Expr*, ExprLis
2b2e0 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23  t*,Expr*,int);.#
2b2f0 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
2b300 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
2b310 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ER.  void sqlite
2b320 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61  3BeginTrigger(Pa
2b330 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b  rse*, Token*,Tok
2b340 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69  en*,int,int,IdLi
2b350 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20  st*,SrcList*,.  
2b360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b370 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69           Expr*,i
2b380 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
2b390 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72   sqlite3FinishTr
2b3a0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
2b3b0 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65  iggerStep*, Toke
2b3c0 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  n*);.  void sqli
2b3d0 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50  te3DropTrigger(P
2b3e0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2b3f0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2b400 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
2b410 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  Ptr(Parse*, Trig
2b420 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  ger*);.  Trigger
2b430 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
2b440 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20  sExist(Parse *, 
2b450 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Table*, int, Exp
2b460 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61  rList*, int *pMa
2b470 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  sk);.  Trigger *
2b480 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
2b490 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
2b4a0 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  e *);.  void sql
2b4b0 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
2b4c0 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
2b4d0 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  er *, int, ExprL
2b4e0 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  ist*, int, Table
2b4f0 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   *,.            
2b500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b510 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
2b520 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
2b530 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
2b540 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67  ct(Parse *, Trig
2b550 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  ger *, Table *, 
2b560 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
2b570 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65    void sqliteVie
2b580 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a  wTriggers(Parse*
2b590 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
2b5a0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29   int, ExprList*)
2b5b0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2b5c0 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65  DeleteTriggerSte
2b5d0 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  p(sqlite3*, Trig
2b5e0 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69  gerStep*);.  Tri
2b5f0 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
2b600 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74  3TriggerSelectSt
2b610 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  ep(sqlite3*,Sele
2b620 63 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ct*,.           
2b630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b640 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2b650 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
2b660 68 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  har*);.  Trigger
2b670 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
2b680 67 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 50  ggerInsertStep(P
2b690 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64  arse*,Token*, Id
2b6a0 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
2b6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
2b6d0 65 6c 65 63 74 2a 2c 75 38 2c 55 70 73 65 72 74  elect*,u8,Upsert
2b6e0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2b6f0 20 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 63 6f 6e 73 74             const
2b710 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
2b720 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  r*);.  TriggerSt
2b730 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
2b740 65 72 55 70 64 61 74 65 53 74 65 70 28 50 61 72  erUpdateStep(Par
2b750 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  se*,Token*,ExprL
2b760 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c  ist*, Expr*, u8,
2b770 0a 20 20 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 63 6f 6e 73 74 20 63           const c
2b7a0 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
2b7b0 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
2b7c0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
2b7d0 44 65 6c 65 74 65 53 74 65 70 28 50 61 72 73 65  DeleteStep(Parse
2b7e0 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c  *,Token*, Expr*,
2b7f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b810 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
2b820 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
2b830 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2b840 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  3DeleteTrigger(s
2b850 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
2b860 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2b870 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2b880 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
2b890 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
2b8a0 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  *);.  u32 sqlite
2b8b0 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
2b8c0 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Parse*,Trigger*,
2b8d0 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e  ExprList*,int,in
2b8e0 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23  t,Table*,int);.#
2b8f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
2b900 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
2b910 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20  ((p)->pToplevel 
2b920 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c  ? (p)->pToplevel
2b930 20 3a 20 28 70 29 29 0a 23 20 64 65 66 69 6e 65   : (p)).# define
2b940 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76   sqlite3IsToplev
2b950 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70  el(p) ((p)->pTop
2b960 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a  level==0).#else.
2b970 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2b980 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c  TriggersExist(B,
2b990 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66  C,D,E,F) 0.# def
2b9a0 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74  ine sqlite3Delet
2b9b0 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20  eTrigger(A,B).# 
2b9c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72  define sqlite3Dr
2b9d0 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42  opTriggerPtr(A,B
2b9e0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2b9f0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2ba00 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a  eTrigger(A,B,C).
2ba10 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2ba20 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41  CodeRowTrigger(A
2ba30 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49  ,B,C,D,E,F,G,H,I
2ba40 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2ba50 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
2ba60 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45  Direct(A,B,C,D,E
2ba70 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,F).# define sql
2ba80 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
2ba90 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65  X, Y) 0.# define
2baa0 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
2bab0 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66  level(p) p.# def
2bac0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70  ine sqlite3IsTop
2bad0 6c 65 76 65 6c 28 70 29 20 31 0a 23 20 64 65 66  level(p) 1.# def
2bae0 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
2baf0 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c  erColmask(A,B,C,
2bb00 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69  D,E,F,G) 0.#endi
2bb10 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  f..int sqlite3Jo
2bb20 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  inType(Parse*, T
2bb30 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
2bb40 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2bb50 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67  ite3CreateForeig
2bb60 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  nKey(Parse*, Exp
2bb70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  rList*, Token*, 
2bb80 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  ExprList*, int);
2bb90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
2bba0 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  erForeignKey(Par
2bbb0 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64  se*, int);.#ifnd
2bbc0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
2bbd0 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76  UTHORIZATION.  v
2bbe0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52  oid sqlite3AuthR
2bbf0 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ead(Parse*,Expr*
2bc00 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74  ,Schema*,SrcList
2bc10 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
2bc20 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65  3AuthCheck(Parse
2bc30 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
2bc40 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
2bc50 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
2bc60 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
2bc70 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72  hContextPush(Par
2bc80 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74  se*, AuthContext
2bc90 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2bca0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
2bcb0 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75  uthContextPop(Au
2bcc0 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69  thContext*);.  i
2bcd0 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  nt sqlite3AuthRe
2bce0 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f  adCol(Parse*, co
2bcf0 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73  nst char *, cons
2bd00 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
2bd10 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2bd20 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61  qlite3AuthRead(a
2bd30 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65  ,b,c,d).# define
2bd40 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
2bd50 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20  k(a,b,c,d,e)    
2bd60 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69  SQLITE_OK.# defi
2bd70 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
2bd80 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29  ntextPush(a,b,c)
2bd90 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2bda0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
2bdb0 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a  a)  ((void)(a)).
2bdc0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2bdd0 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a  te3Attach(Parse*
2bde0 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  , Expr*, Expr*, 
2bdf0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2be00 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65  ite3Detach(Parse
2be10 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
2be20 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44  sqlite3FixInit(D
2be30 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c  bFixer*, Parse*,
2be40 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2be50 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
2be60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
2be70 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a  SrcList(DbFixer*
2be80 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74  , SrcList*);.int
2be90 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63   sqlite3FixSelec
2bea0 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65  t(DbFixer*, Sele
2beb0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
2bec0 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72  3FixExpr(DbFixer
2bed0 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
2bee0 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73  qlite3FixExprLis
2bef0 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  t(DbFixer*, Expr
2bf00 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2bf10 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65  te3FixTriggerSte
2bf20 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67  p(DbFixer*, Trig
2bf30 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73  gerStep*);.int s
2bf40 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74  qlite3AtoF(const
2bf50 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65   char *z, double
2bf60 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
2bf70 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32   sqlite3GetInt32
2bf80 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69  (const char *, i
2bf90 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2bfa0 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72  3Atoi(const char
2bfb0 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2bfc0 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e  TE_OMIT_UTF16.in
2bfd0 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79  t sqlite3Utf16By
2bfe0 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64  teLen(const void
2bff0 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68   *pData, int nCh
2c000 61 72 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  ar);.#endif.int 
2c010 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c  sqlite3Utf8CharL
2c020 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  en(const char *p
2c030 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29  Data, int nByte)
2c040 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66  ;.u32 sqlite3Utf
2c050 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a  8Read(const u8**
2c060 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
2c070 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f  3LogEst(u64);.Lo
2c080 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
2c090 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67  stAdd(LogEst,Log
2c0a0 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  Est);.#ifndef SQ
2c0b0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2c0c0 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71  LTABLE.LogEst sq
2c0d0 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44  lite3LogEstFromD
2c0e0 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23  ouble(double);.#
2c0f0 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
2c100 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2c110 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 29  STMT_SCANSTATUS)
2c120 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   || \.    define
2c130 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2c140 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 29 20  STAT3_OR_STAT4) 
2c150 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  || \.    defined
2c160 28 53 51 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f  (SQLITE_EXPLAIN_
2c170 45 53 54 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a  ESTIMATED_ROWS).
2c180 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  u64 sqlite3LogEs
2c190 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a  tToInt(LogEst);.
2c1a0 23 65 6e 64 69 66 0a 56 4c 69 73 74 20 2a 73 71  #endif.VList *sq
2c1b0 6c 69 74 65 33 56 4c 69 73 74 41 64 64 28 73 71  lite3VListAdd(sq
2c1c0 6c 69 74 65 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f  lite3*,VList*,co
2c1d0 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e  nst char*,int,in
2c1e0 74 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  t);.const char *
2c1f0 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54  sqlite3VListNumT
2c200 6f 4e 61 6d 65 28 56 4c 69 73 74 2a 2c 69 6e 74  oName(VList*,int
2c210 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 4c  );.int sqlite3VL
2c220 69 73 74 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c 69  istNameToNum(VLi
2c230 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  st*,const char*,
2c240 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75  int);../*.** Rou
2c250 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e  tines to read an
2c260 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c 65  d write variable
2c270 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73  -length integers
2c280 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74 6f  .  These used to
2c290 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c  .** be defined l
2c2a0 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20  ocally, but now 
2c2b0 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69 6e  we use the varin
2c2c0 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68  t routines in th
2c2d0 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65  e util.c.** file
2c2e0 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
2c2f0 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e  PutVarint(unsign
2c300 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a  ed char*, u64);.
2c310 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
2c320 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  int(const unsign
2c330 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a  ed char *, u64 *
2c340 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
2c350 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75  Varint32(const u
2c360 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
2c370 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  u32 *);.int sqli
2c380 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34  te3VarintLen(u64
2c390 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   v);../*.** The 
2c3a0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66  common case is f
2c3b0 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62  or a varint to b
2c3c0 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e  e a single byte.
2c3d0 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67    They following
2c3e0 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c  .** macros handl
2c3f0 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  e the common cas
2c400 65 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63  e without a proc
2c410 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20  edure call, but 
2c420 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65  then call.** the
2c430 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c   procedure for l
2c440 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a  arger varints..*
2c450 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  /.#define getVar
2c460 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20  int32(A,B)  \.  
2c470 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30  (u8)((*(A)<(u8)0
2c480 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a  x80)?((B)=(u32)*
2c490 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65  (A)),1:sqlite3Ge
2c4a0 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75  tVarint32((A),(u
2c4b0 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66  32 *)&(B))).#def
2c4c0 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28  ine putVarint32(
2c4d0 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
2c4e0 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78  (u32)(B)<(u32)0x
2c4f0 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67  80)?(*(A)=(unsig
2c500 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a  ned char)(B)),1:
2c510 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61  \.  sqlite3PutVa
2c520 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23  rint((A),(B))).#
2c530 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
2c540 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61      sqlite3GetVa
2c550 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74  rint.#define put
2c560 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
2c570 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e  3PutVarint...con
2c580 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2c590 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72  IndexAffinityStr
2c5a0 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78  (sqlite3*, Index
2c5b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c5c0 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64  TableAffinity(Vd
2c5d0 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
2c5e0 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43  );.char sqlite3C
2c5f0 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45  ompareAffinity(E
2c600 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
2c610 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69   aff2);.int sqli
2c620 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
2c630 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  Ok(Expr *pExpr, 
2c640 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74  char idx_affinit
2c650 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  y);.char sqlite3
2c660 54 61 62 6c 65 43 6f 6c 75 6d 6e 41 66 66 69 6e  TableColumnAffin
2c670 69 74 79 28 54 61 62 6c 65 2a 2c 69 6e 74 29 3b  ity(Table*,int);
2c680 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70  .char sqlite3Exp
2c690 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  rAffinity(Expr *
2c6a0 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
2c6b0 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20  te3Atoi64(const 
2c6c0 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74  char*, i64*, int
2c6d0 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
2c6e0 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28  e3DecOrHexToI64(
2c6f0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34  const char*, i64
2c700 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c710 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c  ErrorWithMsg(sql
2c720 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
2c730 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f  t char*,...);.vo
2c740 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  id sqlite3Error(
2c750 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
2c760 6f 69 64 20 73 71 6c 69 74 65 33 53 79 73 74 65  oid sqlite3Syste
2c770 6d 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c  mError(sqlite3*,
2c780 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
2c790 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c  te3HexToBlob(sql
2c7a0 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
2c7b0 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38  r *z, int n);.u8
2c7c0 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74   sqlite3HexToInt
2c7d0 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c  (int h);.int sql
2c7e0 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28  ite3TwoPartName(
2c7f0 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
2c800 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
2c810 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e   **);..#if defin
2c820 65 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45  ed(SQLITE_NEED_E
2c830 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63  RR_NAME).const c
2c840 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e  har *sqlite3ErrN
2c850 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ame(int);.#endif
2c860 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2c870 45 4e 41 42 4c 45 5f 44 45 53 45 52 49 41 4c 49  ENABLE_DESERIALI
2c880 5a 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  ZE.int sqlite3Me
2c890 6d 64 62 49 6e 69 74 28 76 6f 69 64 29 3b 0a 23  mdbInit(void);.#
2c8a0 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61  endif..const cha
2c8b0 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72  r *sqlite3ErrStr
2c8c0 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
2c8d0 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61 72  e3ReadSchema(Par
2c8e0 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c  se *pParse);.Col
2c8f0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e  lSeq *sqlite3Fin
2c900 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33  dCollSeq(sqlite3
2c910 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20  *,u8 enc, const 
2c920 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  char*,int);.int 
2c930 73 71 6c 69 74 65 33 49 73 42 69 6e 61 72 79 28  sqlite3IsBinary(
2c940 63 6f 6e 73 74 20 43 6f 6c 6c 53 65 71 2a 29 3b  const CollSeq*);
2c950 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2c960 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50  3LocateCollSeq(P
2c970 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f  arse *pParse, co
2c980 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b  nst char*zName);
2c990 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2c9a0 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72  3ExprCollSeq(Par
2c9b0 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2c9c0 20 2a 70 45 78 70 72 29 3b 0a 43 6f 6c 6c 53 65   *pExpr);.CollSe
2c9d0 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4e 4e  q *sqlite3ExprNN
2c9e0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
2c9f0 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78  Parse, Expr *pEx
2ca00 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
2ca10 45 78 70 72 43 6f 6c 6c 53 65 71 4d 61 74 63 68  ExprCollSeqMatch
2ca20 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 45 78  (Parse*,Expr*,Ex
2ca30 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
2ca40 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74  te3ExprAddCollat
2ca50 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50  eToken(Parse *pP
2ca60 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e  arse, Expr*, con
2ca70 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b  st Token*, int);
2ca80 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
2ca90 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69  prAddCollateStri
2caa0 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ng(Parse*,Expr*,
2cab0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78  const char*);.Ex
2cac0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53  pr *sqlite3ExprS
2cad0 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a  kipCollate(Expr*
2cae0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
2caf0 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  eckCollSeq(Parse
2cb00 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a   *, CollSeq *);.
2cb10 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
2cb20 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65  ObjectName(Parse
2cb30 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2cb40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2cb50 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71  dbeSetChanges(sq
2cb60 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69  lite3 *, int);.i
2cb70 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  nt sqlite3AddInt
2cb80 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
2cb90 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36  t sqlite3SubInt6
2cba0 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
2cbb0 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34   sqlite3MulInt64
2cbc0 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
2cbd0 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28  sqlite3AbsInt32(
2cbe0 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  int);.#ifdef SQL
2cbf0 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e  ITE_ENABLE_8_3_N
2cc00 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65  AMES.void sqlite
2cc10 33 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e  3FileSuffix3(con
2cc20 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29  st char*, char*)
2cc30 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2cc40 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
2cc50 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a  ix3(X,Y).#endif.
2cc60 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  u8 sqlite3GetBoo
2cc70 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  lean(const char 
2cc80 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76  *z,u8);..const v
2cc90 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  oid *sqlite3Valu
2cca0 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61  eText(sqlite3_va
2ccb0 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73  lue*, u8);.int s
2ccc0 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73  qlite3ValueBytes
2ccd0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
2cce0 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
2ccf0 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71  e3ValueSetStr(sq
2cd00 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e  lite3_value*, in
2cd10 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c  t, const void *,
2cd20 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  u8,.            
2cd30 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64              void
2cd40 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
2cd50 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
2cd60 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61  tNull(sqlite3_va
2cd70 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  lue*);.void sqli
2cd80 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c  te3ValueFree(sql
2cd90 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71  ite3_value*);.sq
2cda0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c  lite3_value *sql
2cdb0 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c  ite3ValueNew(sql
2cdc0 69 74 65 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66  ite3 *);.#ifndef
2cdd0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
2cde0 31 36 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  16.char *sqlite3
2cdf0 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33  Utf16to8(sqlite3
2ce00 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c   *, const void*,
2ce10 20 69 6e 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69   int, u8);.#endi
2ce20 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  f.int sqlite3Val
2ce30 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74  ueFromExpr(sqlit
2ce40 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38  e3 *, Expr *, u8
2ce50 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61  , u8, sqlite3_va
2ce60 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  lue **);.void sq
2ce70 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41  lite3ValueApplyA
2ce80 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f  ffinity(sqlite3_
2ce90 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29  value *, u8, u8)
2cea0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2ceb0 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78  _AMALGAMATION.ex
2cec0 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
2ced0 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
2cee0 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  OpcodeProperty[]
2cef0 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63  ;.extern const c
2cf00 68 61 72 20 73 71 6c 69 74 65 33 53 74 72 42 49  har sqlite3StrBI
2cf10 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  NARY[];.extern c
2cf20 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2cf30 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54  ar sqlite3UpperT
2cf40 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e  oLower[];.extern
2cf50 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
2cf60 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70  char sqlite3Ctyp
2cf70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  eMap[];.extern c
2cf80 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74  onst Token sqlit
2cf90 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65  e3IntTokens[];.e
2cfa0 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
2cfb0 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43   struct Sqlite3C
2cfc0 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
2cfd0 66 69 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63  fig;.extern Func
2cfe0 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 42  DefHash sqlite3B
2cff0 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b  uiltinFunctions;
2d000 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2d010 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20  OMIT_WSD.extern 
2d020 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69  int sqlite3Pendi
2d030 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23  ngByte;.#endif.#
2d040 65 6e 64 69 66 0a 23 69 66 64 65 66 20 56 44 42  endif.#ifdef VDB
2d050 45 5f 50 52 4f 46 49 4c 45 0a 65 78 74 65 72 6e  E_PROFILE.extern
2d060 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20   sqlite3_uint64 
2d070 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65 43  sqlite3NProfileC
2d080 6e 74 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  nt;.#endif.void 
2d090 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
2d0a0 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69  oved(sqlite3*, i
2d0b0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
2d0c0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64  oid sqlite3Reind
2d0d0 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ex(Parse*, Token
2d0e0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
2d0f0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e   sqlite3AlterFun
2d100 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
2d110 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52  id sqlite3AlterR
2d120 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65  enameTable(Parse
2d130 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
2d140 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2d150 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 43 6f 6c  e3AlterRenameCol
2d160 75 6d 6e 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  umn(Parse*, SrcL
2d170 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
2d180 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2d190 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74  e3GetToken(const
2d1a0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
2d1b0 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73  , int *);.void s
2d1c0 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73  qlite3NestedPars
2d1d0 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  e(Parse*, const 
2d1e0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
2d1f0 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50  d sqlite3ExpireP
2d200 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
2d210 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  s(sqlite3*, int)
2d220 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
2d230 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65  eSubselect(Parse
2d240 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20  *, Expr *, int, 
2d250 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2d260 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72  e3SelectPrep(Par
2d270 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
2d280 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69  meContext*);.voi
2d290 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  d sqlite3SelectW
2d2a0 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f  rongNumTermsErro
2d2b0 72 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  r(Parse *pParse,
2d2c0 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74   Select *p);.int
2d2d0 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61   sqlite3MatchSpa
2d2e0 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72  nName(const char
2d2f0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2d300 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2d310 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
2d320 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70  qlite3ResolveExp
2d330 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  rNames(NameConte
2d340 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  xt*, Expr*);.int
2d350 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
2d360 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d  xprListNames(Nam
2d370 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c  eContext*, ExprL
2d380 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
2d390 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74  te3ResolveSelect
2d3a0 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65  Names(Parse*, Se
2d3b0 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
2d3c0 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  xt*);.void sqlit
2d3d0 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66  e3ResolveSelfRef
2d3e0 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61  erence(Parse*,Ta
2d3f0 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45  ble*,int,Expr*,E
2d400 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
2d410 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64  qlite3ResolveOrd
2d420 65 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a  erGroupBy(Parse*
2d430 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c  , Select*, ExprL
2d440 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
2d450 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2d460 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64  ColumnDefault(Vd
2d470 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  be *, Table *, i
2d480 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2d490 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73  qlite3AlterFinis
2d4a0 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  hAddColumn(Parse
2d4b0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f   *, Token *);.vo
2d4c0 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42  id sqlite3AlterB
2d4d0 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61  eginAddColumn(Pa
2d4e0 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
2d4f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2d500 65 6e 61 6d 65 54 6f 6b 65 6e 28 50 61 72 73 65  enameToken(Parse
2d510 2a 2c 20 76 6f 69 64 2a 2c 20 54 6f 6b 65 6e 2a  *, void*, Token*
2d520 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
2d530 6f 76 65 52 65 6e 61 6d 65 54 6f 6b 65 6e 28 50  oveRenameToken(P
2d540 61 72 73 65 2a 2c 20 76 6f 69 64 20 2a 70 54 6f  arse*, void *pTo
2d550 2c 20 76 6f 69 64 20 2a 70 46 72 6f 6d 29 3b 0a  , void *pFrom);.
2d560 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
2d570 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  GetCollSeq(Parse
2d580 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a  *, u8, CollSeq *
2d590 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2d5a0 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66 69  char sqlite3Affi
2d5b0 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63  nityType(const c
2d5c0 68 61 72 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a  har*, Column*);.
2d5d0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c  void sqlite3Anal
2d5e0 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  yze(Parse*, Toke
2d5f0 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  n*, Token*);.int
2d600 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75   sqlite3InvokeBu
2d610 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61  syHandler(BusyHa
2d620 6e 64 6c 65 72 2a 2c 20 73 71 6c 69 74 65 33 5f  ndler*, sqlite3_
2d630 66 69 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  file*);.int sqli
2d640 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65  te3FindDb(sqlite
2d650 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
2d660 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61   sqlite3FindDbNa
2d670 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  me(sqlite3 *, co
2d680 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
2d690 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
2d6a0 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Load(sqlite3*,in
2d6b0 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c  t iDB);.void sql
2d6c0 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53  ite3DeleteIndexS
2d6d0 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c  amples(sqlite3*,
2d6e0 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
2d6f0 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45  lite3DefaultRowE
2d700 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  st(Index*);.void
2d710 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
2d720 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71  LikeFunctions(sq
2d730 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e  lite3*, int);.in
2d740 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46  t sqlite3IsLikeF
2d750 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
2d760 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72  ,Expr*,int*,char
2d770 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2d780 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64  SchemaClear(void
2d790 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c   *);.Schema *sql
2d7a0 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73 71  ite3SchemaGet(sq
2d7b0 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a  lite3 *, Btree *
2d7c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63  );.int sqlite3Sc
2d7d0 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69  hemaToIndex(sqli
2d7e0 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20  te3 *db, Schema 
2d7f0 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
2d800 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63  ite3KeyInfoAlloc
2d810 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e  (sqlite3*,int,in
2d820 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2d830 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79  KeyInfoUnref(Key
2d840 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  Info*);.KeyInfo 
2d850 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52  *sqlite3KeyInfoR
2d860 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65  ef(KeyInfo*);.Ke
2d870 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
2d880 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72  yInfoOfIndex(Par
2d890 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 4b 65  se*, Index*);.Ke
2d8a0 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
2d8b0 79 49 6e 66 6f 46 72 6f 6d 45 78 70 72 4c 69 73  yInfoFromExprLis
2d8c0 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  t(Parse*, ExprLi
2d8d0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
2d8e0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2d8f0 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33  EBUG.int sqlite3
2d900 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62  KeyInfoIsWriteab
2d910 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65  le(KeyInfo*);.#e
2d920 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2d930 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74  CreateFunc(sqlit
2d940 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
2d950 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f   *, int, int, vo
2d960 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29  id *,.  void (*)
2d970 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2d980 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
2d990 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20  lue **),.  void 
2d9a0 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2d9b0 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
2d9c0 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20 76  _value **), .  v
2d9d0 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
2d9e0 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f 69  context*),.  voi
2d9f0 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2da00 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20  ntext*),.  void 
2da10 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2da20 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
2da30 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20 46  _value **), .  F
2da40 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
2da50 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f  Destructor.);.vo
2da60 69 64 20 73 71 6c 69 74 65 33 4e 6f 6f 70 44 65  id sqlite3NoopDe
2da70 73 74 72 75 63 74 6f 72 28 76 6f 69 64 2a 29 3b  structor(void*);
2da80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d  .void sqlite3Oom
2da90 46 61 75 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b  Fault(sqlite3*);
2daa0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d  .void sqlite3Oom
2dab0 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 29 3b  Clear(sqlite3*);
2dac0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45  .int sqlite3ApiE
2dad0 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  xit(sqlite3 *db,
2dae0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2daf0 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
2db00 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f  se(Parse *);..vo
2db10 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
2db20 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a  umInit(StrAccum*
2db30 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72  , sqlite3*, char
2db40 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 63 68  *, int, int);.ch
2db50 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63  ar *sqlite3StrAc
2db60 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63  cumFinish(StrAcc
2db70 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
2db80 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74  e3SelectDestInit
2db90 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74  (SelectDest*,int
2dba0 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
2dbb0 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e  ite3CreateColumn
2dbc0 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
2dbd0 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20  SrcList *, int, 
2dbe0 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  int);..void sqli
2dbf0 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72 74  te3BackupRestart
2dc00 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
2dc10 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2dc20 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c  BackupUpdate(sql
2dc30 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50  ite3_backup *, P
2dc40 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29  gno, const u8 *)
2dc50 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
2dc60 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 0a  E_OMIT_SUBQUERY.
2dc70 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2dc80 68 65 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45  heckIN(Parse*, E
2dc90 78 70 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  xpr*);.#else.# d
2dca0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
2dcb0 72 43 68 65 63 6b 49 4e 28 78 2c 79 29 20 53 51  rCheckIN(x,y) SQ
2dcc0 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a  LITE_OK.#endif..
2dcd0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2dce0 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
2dcf0 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  AT4.void sqlite3
2dd00 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73  AnalyzeFunctions
2dd10 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
2dd20 74 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74  te3Stat4ProbeSet
2dd30 56 61 6c 75 65 28 0a 20 20 20 20 50 61 72 73 65  Value(.    Parse
2dd40 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65  *,Index*,Unpacke
2dd50 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c  dRecord**,Expr*,
2dd60 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69  int,int,int*);.i
2dd70 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 56  nt sqlite3Stat4V
2dd80 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72  alueFromExpr(Par
2dd90 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20  se*, Expr*, u8, 
2dda0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
2ddb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
2ddc0 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70  at4ProbeFree(Unp
2ddd0 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69  ackedRecord*);.i
2dde0 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 43  nt sqlite3Stat4C
2ddf0 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20  olumn(sqlite3*, 
2de00 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
2de10 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76  , int, sqlite3_v
2de20 61 6c 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71  alue**);.char sq
2de30 6c 69 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e  lite3IndexColumn
2de40 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33  Affinity(sqlite3
2de50 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b  *, Index*, int);
2de60 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2de70 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  he interface to 
2de80 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61  the LEMON-genera
2de90 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69  ted parser.*/.#i
2dea0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  fndef SQLITE_AMA
2deb0 4c 47 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64  LGAMATION.  void
2dec0 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72 41   *sqlite3ParserA
2ded0 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36  lloc(void*(*)(u6
2dee0 34 29 2c 20 50 61 72 73 65 2a 29 3b 0a 20 20 76  4), Parse*);.  v
2def0 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
2df00 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69  rFree(void*, voi
2df10 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65  d(*)(void*));.#e
2df20 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
2df30 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69  3Parser(void*, i
2df40 6e 74 2c 20 54 6f 6b 65 6e 29 3b 0a 69 6e 74 20  nt, Token);.int 
2df50 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 61 6c  sqlite3ParserFal
2df60 6c 62 61 63 6b 28 69 6e 74 29 3b 0a 23 69 66 64  lback(int);.#ifd
2df70 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41  ef YYTRACKMAXSTA
2df80 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71  CKDEPTH.  int sq
2df90 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b  lite3ParserStack
2dfa0 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e  Peak(void*);.#en
2dfb0 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
2dfc0 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69  3AutoLoadExtensi
2dfd0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
2dfe0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2dff0 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
2e000 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
2e010 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
2e020 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65  sqlite3*);.#else
2e030 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2e040 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
2e050 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  (X).#endif..#ifn
2e060 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2e070 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76  SHARED_CACHE.  v
2e080 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
2e090 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e  Lock(Parse *, in
2e0a0 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73  t, int, u8, cons
2e0b0 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65  t char *);.#else
2e0c0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2e0d0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c  e3TableLock(v,w,
2e0e0 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23  x,y,z).#endif..#
2e0f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
2e100 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55  T.  int sqlite3U
2e110 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20  tf8To8(unsigned 
2e120 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
2e130 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
2e140 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2e150 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2e160 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20  3VtabClear(Y).# 
2e170 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2e180 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c  tabSync(X,Y) SQL
2e190 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
2e1a0 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
2e1b0 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  back(X).#  defin
2e1c0 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  e sqlite3VtabCom
2e1d0 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  mit(X).#  define
2e1e0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
2e1f0 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69  nc(db) 0.#  defi
2e200 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  ne sqlite3VtabLo
2e210 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
2e220 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2e230 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
2e240 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2e250 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e  List(X).#  defin
2e260 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  e sqlite3VtabSav
2e270 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20  epoint(X, Y, Z) 
2e280 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66  SQLITE_OK.#  def
2e290 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54  ine sqlite3GetVT
2e2a0 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61  able(X,Y)  ((VTa
2e2b0 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20  ble*)0).#else.  
2e2c0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2e2d0 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a  bClear(sqlite3 *
2e2e0 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20  db, Table*);.   
2e2f0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2e300 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74  Disconnect(sqlit
2e310 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70  e3 *db, Table *p
2e320 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
2e330 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65  3VtabSync(sqlite
2e340 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20  3 *db, Vdbe*);. 
2e350 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2e360 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65  bRollback(sqlite
2e370 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73  3 *db);.   int s
2e380 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
2e390 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
2e3a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2e3b0 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  abLock(VTable *)
2e3c0 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2e3d0 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62  3VtabUnlock(VTab
2e3e0 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
2e3f0 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2e400 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  List(sqlite3*);.
2e410 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2e420 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69  abSavepoint(sqli
2e430 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  te3 *, int, int)
2e440 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2e450 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
2e460 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33  g(Vdbe*, sqlite3
2e470 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62  _vtab*);.   VTab
2e480 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54  le *sqlite3GetVT
2e490 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
2e4a0 61 62 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c  able*);.   Modul
2e4b0 65 20 2a 73 71 6c 69 74 65 33 56 74 61 62 43 72  e *sqlite3VtabCr
2e4c0 65 61 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20  eateModule(.    
2e4d0 20 73 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20   sqlite3*,.     
2e4e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
2e4f0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
2e500 6d 6f 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f  module*,.     vo
2e510 69 64 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a  id*,.     void(*
2e520 29 28 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23  )(void*).   );.#
2e530 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2e540 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28  VtabInSync(db) (
2e550 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20  (db)->nVTrans>0 
2e560 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73  && (db)->aVTrans
2e570 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20  ==0).#endif.int 
2e580 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79  sqlite3VtabEpony
2e590 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61  mousTableInit(Pa
2e5a0 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76  rse*,Module*);.v
2e5b0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 45  oid sqlite3VtabE
2e5c0 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65  ponymousTableCle
2e5d0 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75  ar(sqlite3*,Modu
2e5e0 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
2e5f0 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62  e3VtabMakeWritab
2e600 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  le(Parse*,Table*
2e610 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2e620 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61  tabBeginParse(Pa
2e630 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
2e640 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e  ken*, Token*, in
2e650 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2e660 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28  VtabFinishParse(
2e670 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
2e680 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2e690 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29  bArgInit(Parse*)
2e6a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2e6b0 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73  abArgExtend(Pars
2e6c0 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  e*, Token*);.int
2e6d0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
2e6e0 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  Create(sqlite3*,
2e6f0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2e700 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e   *, char **);.in
2e710 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
2e720 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c  lConnect(Parse*,
2e730 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71   Table*);.int sq
2e740 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
2e750 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69  troy(sqlite3*, i
2e760 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
2e770 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
2e780 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20  abBegin(sqlite3 
2e790 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75  *, VTable *);.Fu
2e7a0 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74  ncDef *sqlite3Vt
2e7b0 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69  abOverloadFuncti
2e7c0 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e  on(sqlite3 *,Fun
2e7d0 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c  cDef*, int nArg,
2e7e0 20 45 78 70 72 2a 29 3b 0a 73 71 6c 69 74 65 33   Expr*);.sqlite3
2e7f0 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
2e800 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71  mtCurrentTime(sq
2e810 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
2e820 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
2e830 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56  ParameterIndex(V
2e840 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
2e850 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2e860 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64  ite3TransferBind
2e870 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d  ings(sqlite3_stm
2e880 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d  t *, sqlite3_stm
2e890 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
2e8a0 65 33 50 61 72 73 65 72 52 65 73 65 74 28 50 61  e3ParserReset(Pa
2e8b0 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
2e8c0 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65  e3Reprepare(Vdbe
2e8d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e8e0 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e  ExprListCheckLen
2e8f0 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  gth(Parse*, Expr
2e900 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
2e910 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  r*);.CollSeq *sq
2e920 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61  lite3BinaryCompa
2e930 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  reCollSeq(Parse 
2e940 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20  *, Expr *, Expr 
2e950 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
2e960 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73  empInMemory(cons
2e970 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e  t sqlite3*);.con
2e980 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2e990 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
2e9a0 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
2e9b0 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
2e9c0 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
2e9d0 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20  point(sqlite3*, 
2e9e0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
2e9f0 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  int*);.  int sql
2ea00 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
2ea10 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  ok(void*,sqlite3
2ea20 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
2ea30 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  t);.#endif.#ifnd
2ea40 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
2ea50 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74  TE.  With *sqlit
2ea60 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a  e3WithAdd(Parse*
2ea70 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  ,With*,Token*,Ex
2ea80 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29  prList*,Select*)
2ea90 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2eaa0 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74  WithDelete(sqlit
2eab0 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f  e3*,With*);.  vo
2eac0 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  id sqlite3WithPu
2ead0 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a  sh(Parse*, With*
2eae0 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65  , u8);.#else.#de
2eaf0 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
2eb00 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66  Push(x,y,z).#def
2eb10 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44  ine sqlite3WithD
2eb20 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69  elete(x,y).#endi
2eb30 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
2eb40 5f 4f 4d 49 54 5f 55 50 53 45 52 54 0a 20 20 55  _OMIT_UPSERT.  U
2eb50 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33 55 70  psert *sqlite3Up
2eb60 73 65 72 74 4e 65 77 28 73 71 6c 69 74 65 33 2a  sertNew(sqlite3*
2eb70 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
2eb80 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
2eb90 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2eba0 33 55 70 73 65 72 74 44 65 6c 65 74 65 28 73 71  3UpsertDelete(sq
2ebb0 6c 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b  lite3*,Upsert*);
2ebc0 0a 20 20 55 70 73 65 72 74 20 2a 73 71 6c 69 74  .  Upsert *sqlit
2ebd0 65 33 55 70 73 65 72 74 44 75 70 28 73 71 6c 69  e3UpsertDup(sqli
2ebe0 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20  te3*,Upsert*);. 
2ebf0 20 69 6e 74 20 73 71 6c 69 74 65 33 55 70 73 65   int sqlite3Upse
2ec00 72 74 41 6e 61 6c 79 7a 65 54 61 72 67 65 74 28  rtAnalyzeTarget(
2ec10 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
2ec20 55 70 73 65 72 74 2a 29 3b 0a 20 20 76 6f 69 64  Upsert*);.  void
2ec30 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 6f   sqlite3UpsertDo
2ec40 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 55 70  Update(Parse*,Up
2ec50 73 65 72 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e 64  sert*,Table*,Ind
2ec60 65 78 2a 2c 69 6e 74 29 3b 0a 23 65 6c 73 65 0a  ex*,int);.#else.
2ec70 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55  #define sqlite3U
2ec80 70 73 65 72 74 4e 65 77 28 76 2c 77 2c 78 2c 79  psertNew(v,w,x,y
2ec90 2c 7a 29 20 28 28 55 70 73 65 72 74 2a 29 30 29  ,z) ((Upsert*)0)
2eca0 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
2ecb0 55 70 73 65 72 74 44 65 6c 65 74 65 28 78 2c 79  UpsertDelete(x,y
2ecc0 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ).#define sqlite
2ecd0 33 55 70 73 65 72 74 44 75 70 28 78 2c 79 29 20  3UpsertDup(x,y) 
2ece0 20 20 20 20 20 20 28 28 55 70 73 65 72 74 2a 29        ((Upsert*)
2ecf0 30 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44  0).#endif.../* D
2ed00 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20  eclarations for 
2ed10 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65  functions in fke
2ed20 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73  y.c. All of thes
2ed30 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62  e are replaced b
2ed40 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f  y.** no-op macro
2ed50 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47  s if OMIT_FOREIG
2ed60 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64  N_KEY is defined
2ed70 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e  . In this case n
2ed80 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  o foreign.** key
2ed90 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69   functionality i
2eda0 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20  s available. If 
2edb0 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20  OMIT_TRIGGER is 
2edc0 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f  defined but.** O
2edd0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
2ede0 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d  is not, only som
2edf0 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
2ee00 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20  ns are no-oped. 
2ee10 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20  In.** this case 
2ee20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65  foreign keys are
2ee30 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20   parsed, but no 
2ee40 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c  other functional
2ee50 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64  ity is.** provid
2ee60 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20  ed (enforcement 
2ee70 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  of FK constraint
2ee80 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74  s requires the t
2ee90 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74  riggers sub-syst
2eea0 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  em)..*/.#if !def
2eeb0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2eec0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
2eed0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2eee0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
2eef0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43   void sqlite3FkC
2ef00 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  heck(Parse*, Tab
2ef10 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
2ef20 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  nt*, int);.  voi
2ef30 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  d sqlite3FkDropT
2ef40 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
2ef50 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  List *, Table*);
2ef60 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
2ef70 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c  kActions(Parse*,
2ef80 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73   Table*, ExprLis
2ef90 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  t*, int, int*, i
2efa0 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
2efb0 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72  e3FkRequired(Par
2efc0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2efd0 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73  *, int);.  u32 s
2efe0 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
2eff0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
2f000 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33  .  FKey *sqlite3
2f010 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62  FkReferences(Tab
2f020 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  le *);.#else.  #
2f030 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2f040 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c  Actions(a,b,c,d,
2f050 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
2f060 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
2f070 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
2f080 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72  fine sqlite3FkDr
2f090 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20  opTable(a,b,c). 
2f0a0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2f0b0 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20  FkOldmask(a,b)  
2f0c0 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69         0.  #defi
2f0d0 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  ne sqlite3FkRequ
2f0e0 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20  ired(a,b,c,d)   
2f0f0 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
2f100 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
2f110 28 61 29 20 20 20 20 20 20 20 20 30 0a 23 65 6e  (a)        0.#en
2f120 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
2f130 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2f140 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  KEY.  void sqlit
2f150 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74  e3FkDelete(sqlit
2f160 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  e3 *, Table*);. 
2f170 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f   int sqlite3FkLo
2f180 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  cateIndex(Parse*
2f190 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e  ,Table*,FKey*,In
2f1a0 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65  dex**,int**);.#e
2f1b0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2f1c0 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c  lite3FkDelete(a,
2f1d0 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  b).  #define sql
2f1e0 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
2f1f0 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e  x(a,b,c,d,e).#en
2f200 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69  dif.../*.** Avai
2f210 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65  lable fault inje
2f220 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62  ctors.  Should b
2f230 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e  e numbered begin
2f240 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a  ning with 0..*/.
2f250 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
2f260 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c  AULTINJECTOR_MAL
2f270 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e  LOC     0.#defin
2f280 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
2f290 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20  JECTOR_COUNT    
2f2a0 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69    1../*.** The i
2f2b0 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
2f2c0 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20  code in fault.c 
2f2d0 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66  used for identif
2f2e0 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a  ying "benign".**
2f2f0 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73   malloc failures
2f300 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70  . This is only p
2f310 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45  resent if SQLITE
2f320 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20 69  _UNTESTABLE.** i
2f330 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a  s not defined..*
2f340 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
2f350 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 76 6f  _UNTESTABLE.  vo
2f360 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  id sqlite3BeginB
2f370 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
2f380 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2f390 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
2f3a0 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20  (void);.#else.  
2f3b0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42  #define sqlite3B
2f3c0 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
2f3d0 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  ().  #define sql
2f3e0 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
2f3f0 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  loc().#endif../*
2f400 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  .** Allowed retu
2f410 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
2f420 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
2f430 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  x().*/.#define I
2f440 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20  N_INDEX_ROWID   
2f450 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72       1   /* Sear
2f460 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  ch the rowid of 
2f470 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  the table */.#de
2f480 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50  fine IN_INDEX_EP
2f490 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20 2f  H          2   /
2f4a0 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65  * Search an ephe
2f4b0 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a  meral b-tree */.
2f4c0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2f4d0 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20  _INDEX_ASC    3 
2f4e0 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e    /* Existing in
2f4f0 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f  dex ASCENDING */
2f500 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2f510 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34  X_INDEX_DESC   4
2f520 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
2f530 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20  ndex DESCENDING 
2f540 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2f550 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20  DEX_NOOP        
2f560 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65   5   /* No table
2f570 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20   available. Use 
2f580 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f  comparisons */./
2f590 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61  *.** Allowed fla
2f5a0 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20 70  gs for the 3rd p
2f5b0 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
2f5c0 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29  te3FindInIndex()
2f5d0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ..*/.#define IN_
2f5e0 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20  INDEX_NOOP_OK   
2f5f0 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20    0x0001  /* OK 
2f600 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44  to return IN_IND
2f610 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69  EX_NOOP */.#defi
2f620 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42  ne IN_INDEX_MEMB
2f630 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20 20  ERSHIP  0x0002  
2f640 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
2f650 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68  sed for membersh
2f660 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69  ip test */.#defi
2f670 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50  ne IN_INDEX_LOOP
2f680 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
2f690 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
2f6a0 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f  sed as a loop */
2f6b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
2f6c0 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c  InIndex(Parse *,
2f6d0 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e   Expr *, u32, in
2f6e0 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20  t*, int*);..int 
2f6f0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70  sqlite3JournalOp
2f700 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  en(sqlite3_vfs *
2f710 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
2f720 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20  sqlite3_file *, 
2f730 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
2f740 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a  qlite3JournalSiz
2f750 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29  e(sqlite3_vfs *)
2f760 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
2f770 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d  LITE_ENABLE_ATOM
2f780 49 43 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c 20  IC_WRITE) \. || 
2f790 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
2f7a0 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d  NABLE_BATCH_ATOM
2f7b0 49 43 5f 57 52 49 54 45 29 0a 20 20 69 6e 74 20  IC_WRITE).  int 
2f7c0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72  sqlite3JournalCr
2f7d0 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c  eate(sqlite3_fil
2f7e0 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e  e *);.#endif..in
2f7f0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
2f800 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74  IsInMemory(sqlit
2f810 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69  e3_file *p);.voi
2f820 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  d sqlite3MemJour
2f830 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
2f840 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73  file *);..void s
2f850 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69  qlite3ExprSetHei
2f860 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73  ghtAndFlags(Pars
2f870 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
2f880 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  *p);.#if SQLITE_
2f890 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
2f8a0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65  .  int sqlite3Se
2f8b0 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53  lectExprHeight(S
2f8c0 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20  elect *);.  int 
2f8d0 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
2f8e0 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69  Height(Parse*, i
2f8f0 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  nt);.#else.  #de
2f900 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65  fine sqlite3Sele
2f910 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20  ctExprHeight(x) 
2f920 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
2f930 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67  te3ExprCheckHeig
2f940 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a  ht(x,y).#endif..
2f950 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62  u32 sqlite3Get4b
2f960 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a  yte(const u8*);.
2f970 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34  void sqlite3Put4
2f980 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a  byte(u8*, u32);.
2f990 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2f9a0 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
2f9b0 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  IFY.  void sqlit
2f9c0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
2f9d0 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73  ked(sqlite3 *, s
2f9e0 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69  qlite3 *);.  voi
2f9f0 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
2fa00 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69  ionUnlocked(sqli
2fa10 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64  te3 *db);.  void
2fa20 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
2fa30 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33  onClosed(sqlite3
2fa40 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23   *db);.#else.  #
2fa50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2fa60 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
2fa70 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73  x,y).  #define s
2fa80 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2fa90 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64  Unlocked(x).  #d
2faa0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
2fab0 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29  nectionClosed(x)
2fac0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2fad0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76  SQLITE_DEBUG.  v
2fae0 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
2faf0 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68  rTrace(FILE*, ch
2fb00 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69  ar *);.#endif.#i
2fb10 66 20 64 65 66 69 6e 65 64 28 59 59 43 4f 56 45  f defined(YYCOVE
2fb20 52 41 47 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  RAGE).  int sqli
2fb30 74 65 33 50 61 72 73 65 72 43 6f 76 65 72 61 67  te3ParserCoverag
2fb40 65 28 46 49 4c 45 2a 29 3b 0a 23 65 6e 64 69 66  e(FILE*);.#endif
2fb50 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ../*.** If the S
2fb60 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54  QLITE_ENABLE IOT
2fb70 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e  RACE exists then
2fb80 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
2fb90 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49  able.** sqlite3I
2fba0 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e  oTrace is a poin
2fbb0 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d  ter to a printf-
2fbc0 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65  like routine use
2fbd0 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f  d to.** print I/
2fbe0 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67  O tracing messag
2fbf0 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  es..*/.#ifdef SQ
2fc00 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52  LITE_ENABLE_IOTR
2fc10 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  ACE.# define IOT
2fc20 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c  RACE(A)  if( sql
2fc30 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73  ite3IoTrace ){ s
2fc40 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b  qlite3IoTrace A;
2fc50 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65   }.  void sqlite
2fc60 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
2fc70 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41  Vdbe*);.SQLITE_A
2fc80 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e  PI SQLITE_EXTERN
2fc90 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44   void (SQLITE_CD
2fca0 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72  ECL *sqlite3IoTr
2fcb0 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a  ace)(const char*
2fcc0 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ,...);.#else.# d
2fcd0 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29  efine IOTRACE(A)
2fce0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2fcf0 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
2fd00 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2fd10 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20   These routines 
2fd20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f  are available fo
2fd30 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62  r the mem2.c deb
2fd40 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c  ugging memory al
2fd50 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e  locator.** only.
2fd60 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20    They are used 
2fd70 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 64  to verify that d
2fd80 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73 22  ifferent "types"
2fd90 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c   of memory.** al
2fda0 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72  locations are pr
2fdb0 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62  operly tracked b
2fdc0 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a  y the system..**
2fdd0 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
2fde0 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65 74  bugSetType() set
2fdf0 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66 20  s the "type" of 
2fe00 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f  an allocation to
2fe10 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d   one of.** the M
2fe20 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20  EMTYPE_* macros 
2fe30 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20  defined below.  
2fe40 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62 65  The type must be
2fe50 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a   a bitmask with.
2fe60 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20  ** a single bit 
2fe70 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  set..**.** sqlit
2fe80 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
2fe90 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65  e() returns true
2fea0 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62   if any of the b
2feb0 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
2fec0 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
2fed0 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
2fee0 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
2fef0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2ff00 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71  SetType()..** sq
2ff10 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
2ff20 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64  Type() is intend
2ff30 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64  ed for use insid
2ff40 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
2ff50 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  ments..**.** sql
2ff60 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
2ff70 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
2ff80 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  e if none of the
2ff90 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
2ffa0 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
2ffb0 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
2ffc0 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
2ffd0 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
2ffe0 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a  ugSetType()..**.
2fff0 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20 6d  ** Perhaps the m
30000 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f  ost important po
30010 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66 65  int is the diffe
30020 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45  rence between ME
30030 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e  MTYPE_HEAP.** an
30040 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  d MEMTYPE_LOOKAS
30050 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f  IDE.  If an allo
30060 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50  cation is MEMTYP
30070 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61  E_LOOKASIDE, tha
30080 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69  t means.** it mi
30090 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c  ght have been al
300a0 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61  located by looka
300b0 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68 65  side, except the
300c0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a   allocation was.
300d0 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20  ** too large or 
300e0 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c  lookaside was al
300f0 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20  ready full.  It 
30100 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20  is important to 
30110 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61  verify.** that a
30120 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20  llocations that 
30130 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
30140 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f  satisfied by loo
30150 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a  kaside are not.*
30160 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f  * passed back to
30170 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66   non-lookaside f
30180 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20  ree() routines. 
30190 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61 73   Asserts such as
301a0 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20   the.** example 
301b0 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64  above are placed
301c0 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b   on the non-look
301d0 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
301e0 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a  tines to verify.
301f0 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69  ** this constrai
30200 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  nt..**.** All of
30210 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66   this is no-op f
30220 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20  or a production 
30230 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20  build.  It only 
30240 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c  comes into.** pl
30250 61 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49  ay when the SQLI
30260 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70  TE_MEMDEBUG comp
30270 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
30280 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64  is used..*/.#ifd
30290 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
302a0 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
302b0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
302c0 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
302d0 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
302e0 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75  gHasType(void*,u
302f0 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
30300 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
30310 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65  void*,u8);.#else
30320 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
30330 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
30340 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20  (X,Y)  /* no-op 
30350 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  */.# define sqli
30360 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
30370 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66  pe(X,Y)  1.# def
30380 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
30390 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20  bugNoType(X,Y)  
303a0 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e   1.#endif.#defin
303b0 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20  e MEMTYPE_HEAP  
303c0 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65       0x01  /* Ge
303d0 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63  neral heap alloc
303e0 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
303f0 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  e MEMTYPE_LOOKAS
30400 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65  IDE  0x02  /* He
30410 61 70 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ap that might ha
30420 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64  ve been lookasid
30430 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  e */.#define MEM
30440 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20 20  TYPE_PCACHE     
30450 30 78 30 34 20 20 2f 2a 20 50 61 67 65 20 63 61  0x04  /* Page ca
30460 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  che allocations 
30470 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64  */../*.** Thread
30480 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f  ing interface.*/
30490 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
304a0 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30  WORKER_THREADS>0
304b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65  .int sqlite3Thre
304c0 61 64 43 72 65 61 74 65 28 53 51 4c 69 74 65 54  adCreate(SQLiteT
304d0 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29  hread**,void*(*)
304e0 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a  (void*),void*);.
304f0 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61  int sqlite3Threa
30500 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65  dJoin(SQLiteThre
30510 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65  ad*, void**);.#e
30520 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
30530 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
30540 44 42 50 41 47 45 5f 56 54 41 42 29 20 7c 7c 20  DBPAGE_VTAB) || 
30550 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
30560 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33  EST).int sqlite3
30570 44 62 70 61 67 65 52 65 67 69 73 74 65 72 28 73  DbpageRegister(s
30580 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66  qlite3*);.#endif
30590 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
305a0 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41  ITE_ENABLE_DBSTA
305b0 54 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e  T_VTAB) || defin
305c0 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
305d0 69 6e 74 20 73 71 6c 69 74 65 33 44 62 73 74 61  int sqlite3Dbsta
305e0 74 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65  tRegister(sqlite
305f0 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  3*);.#endif..int
30600 20 73 71 6c 69 74 65 33 45 78 70 72 56 65 63 74   sqlite3ExprVect
30610 6f 72 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78  orSize(Expr *pEx
30620 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
30630 45 78 70 72 49 73 56 65 63 74 6f 72 28 45 78 70  ExprIsVector(Exp
30640 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20  r *pExpr);.Expr 
30650 2a 73 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69  *sqlite3VectorFi
30660 65 6c 64 53 75 62 65 78 70 72 28 45 78 70 72 2a  eldSubexpr(Expr*
30670 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  , int);.Expr *sq
30680 6c 69 74 65 33 45 78 70 72 46 6f 72 56 65 63 74  lite3ExprForVect
30690 6f 72 46 69 65 6c 64 28 50 61 72 73 65 2a 2c 45  orField(Parse*,E
306a0 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  xpr*,int);.void 
306b0 73 71 6c 69 74 65 33 56 65 63 74 6f 72 45 72 72  sqlite3VectorErr
306c0 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 45 78  orMsg(Parse*, Ex
306d0 70 72 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  pr*);..#ifndef S
306e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49  QLITE_OMIT_COMPI
306f0 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63  LEOPTION_DIAGS.c
30700 6f 6e 73 74 20 63 68 61 72 20 2a 2a 73 71 6c 69  onst char **sqli
30710 74 65 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e  te3CompileOption
30720 73 28 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23  s(int *pnOpt);.#
30730 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a  endif..#endif /*
30740 20 53 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a   SQLITEINT_H */.