/ Hex Artifact Content
Login

Artifact b70ac8e3e7e74838bc45dca1a3b2c3ef4b4e04a49036448bf462cfd657cc663f:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48  ed(HAVE_STDINT_H
1f20: 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  )   /* Use this 
1f30: 63 61 73 65 20 69 66 20 77 65 20 68 61 76 65 20  case if we have 
1f40: 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f 0a  ANSI headers */.
1f50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1f60: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
1f70: 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f 74  (void*)(intptr_t
1f80: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
1f90: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
1fa0: 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74 70  (X)  ((int)(intp
1fb0: 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 69 66 20  tr_t)(X)).#elif 
1fc0: 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49 46  defined(__PTRDIF
1fd0: 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68  F_TYPE__)  /* Th
1fe0: 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20 77  is case should w
1ff0: 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23  ork for GCC */.#
2000: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
2010: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
2020: 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46 46  void*)(__PTRDIFF
2030: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20 64  _TYPE__)(X)).# d
2040: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
2050: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
2060: 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  t)(__PTRDIFF_TYP
2070: 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20 21  E__)(X)).#elif !
2080: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
2090: 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73  )       /* Works
20a0: 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f   for compilers o
20b0: 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a  ther than LLVM *
20c0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
20d0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
20e0: 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72   ((void*)&((char
20f0: 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e  *)0)[X]).# defin
2100: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
2110: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 28  INT(X)  ((int)((
2120: 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72 2a  (char*)X)-(char*
2130: 29 30 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  )0)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
6950: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 28 64 65  |    \.      (de
6960: 66 69 6e 65 64 28 5f 5f 54 4f 53 5f 41 49 58 5f  fined(__TOS_AIX_
6970: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
6980: 5f 36 34 42 49 54 5f 5f 29 29 0a 23 20 20 20 64  _64BIT__)).#   d
6990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
69a0: 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20  SIZE 4.# else.# 
69b0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
69c0: 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69  PTRSIZE 8.# endi
69d0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  f.#endif../* The
69e0: 20 75 70 74 72 20 74 79 70 65 20 69 73 20 61 6e   uptr type is an
69f0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6a00: 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
6a10: 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72  o hold a pointer
6a20: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6a30: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20  HAVE_STDINT_H). 
6a40: 20 74 79 70 65 64 65 66 20 75 69 6e 74 70 74 72   typedef uintptr
6a50: 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53  _t uptr;.#elif S
6a60: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34  QLITE_PTRSIZE==4
6a70: 0a 20 20 74 79 70 65 64 65 66 20 75 33 32 20 75  .  typedef u32 u
6a80: 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ptr;.#else.  typ
6a90: 65 64 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23  edef u64 uptr;.#
6aa0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6ab0: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6ac0: 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63  ,S,E) macro chec
6ad0: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69  ks to see if poi
6ae0: 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f  nter P points to
6af0: 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65  .** something be
6b00: 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69  tween S (inclusi
6b10: 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75  ve) and E (exclu
6b20: 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  sive)..**.** In 
6b30: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69  other words, S i
6b40: 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 45  s a buffer and E
6b50: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6b60: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
6b70: 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64  after.** the end
6b80: 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20 54   of buffer S.  T
6b90: 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e  his macro return
6ba0: 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e  s true if P poin
6bb0: 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a  ts to something.
6bc0: 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  ** contained wit
6bd0: 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 53  hin the buffer S
6be0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
6bf0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
6c00: 29 20 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28  ) (((uptr)(P)>=(
6c10: 75 70 74 72 29 28 53 29 29 26 26 28 28 75 70 74  uptr)(S))&&((upt
6c20: 72 29 28 50 29 3c 28 75 70 74 72 29 28 45 29 29  r)(P)<(uptr)(E))
6c30: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  ).../*.** Macros
6c40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
6c50: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
6c60: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
6c70: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
6c80: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
6c90: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
6ca0: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
6cb0: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
6cc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
6cd0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
6ce0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
6cf0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
6d00: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
6d10: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
6d20: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
6d30: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
6d40: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
6d50: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6d60: 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  =0 is set, then 
6d70: 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65  byte-order is de
6d80: 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72  termined.** at r
6d90: 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e  un-time..*/.#ifn
6da0: 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  def SQLITE_BYTEO
6db0: 52 44 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65  RDER.# if define
6dc0: 64 28 69 33 38 36 29 20 20 20 20 20 20 7c 7c 20  d(i386)      || 
6dd0: 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f  defined(__i386__
6de0: 29 20 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  )      || define
6df0: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
6e00: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6e10: 5f 5f 78 38 36 5f 36 34 29 20 20 7c 7c 20 64 65  __x86_64)  || de
6e20: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
6e30: 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  )    || defined(
6e40: 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c  _M_X64)  ||    \
6e50: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d  .     defined(_M
6e60: 5f 41 4d 44 36 34 29 20 20 7c 7c 20 64 65 66 69  _AMD64)  || defi
6e70: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20  ned(_M_ARM)     
6e80: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
6e90: 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20  x86)   ||    \. 
6ea0: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6eb0: 4d 45 4c 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEL__) || define
6ec0: 64 28 5f 5f 41 41 52 43 48 36 34 45 4c 5f 5f 29  d(__AARCH64EL__)
6ed0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41   || defined(_M_A
6ee0: 52 4d 36 34 29 0a 23 20 20 20 64 65 66 69 6e 65  RM64).#   define
6ef0: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
6f00: 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69 66  R    1234.# elif
6f10: 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20   defined(sparc) 
6f20: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6f30: 5f 70 70 63 5f 5f 29 20 7c 7c 20 5c 0a 20 20 20  _ppc__) || \.   
6f40: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6f50: 4d 45 42 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEB__) || define
6f60: 64 28 5f 5f 41 41 52 43 48 36 34 45 42 5f 5f 29  d(__AARCH64EB__)
6f70: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
6f80: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
6f90: 34 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20  4321.# else.#   
6fa0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
6fb0: 54 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69  TEORDER 0.# endi
6fc0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  f.#endif.#if SQL
6fd0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34  ITE_BYTEORDER==4
6fe0: 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  321.# define SQL
6ff0: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
7000: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
7010: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
7020: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
7030: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
7040: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65  QLITE_UTF16BE.#e
7050: 6c 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  lif SQLITE_BYTEO
7060: 52 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66  RDER==1234.# def
7070: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
7080: 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69  DIAN    0.# defi
7090: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
70a0: 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e  ENDIAN 1.# defin
70b0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
70c0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
70d0: 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64  16LE.#else.# ifd
70e0: 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
70f0: 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69  MATION.  const i
7100: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
7110: 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65  1;.# else.  exte
7120: 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  rn const int sql
7130: 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66  ite3one;.# endif
7140: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7150: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a  _BIGENDIAN    (*
7160: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
7170: 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69  3one)==0).# defi
7180: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
7190: 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a  ENDIAN (*(char *
71a0: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
71b0: 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1).# define SQLI
71c0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
71d0: 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41  (SQLITE_BIGENDIA
71e0: 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  N?SQLITE_UTF16BE
71f0: 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29  :SQLITE_UTF16LE)
7200: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
7210: 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65  onstants for the
7220: 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61   largest and sma
7230: 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36  llest possible 6
7240: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
7250: 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20  egers..** These 
7260: 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67  macros are desig
7270: 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72  ned to work corr
7280: 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32  ectly on both 32
7290: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a  -bit and 64-bit.
72a0: 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f  ** compilers..*/
72b0: 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54  .#define LARGEST
72c0: 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66  _INT64  (0xfffff
72d0: 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66  fff|(((i64)0x7ff
72e0: 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65  fffff)<<32)).#de
72f0: 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e  fine SMALLEST_IN
7300: 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d  T64 (((i64)-1) -
7310: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a   LARGEST_INT64).
7320: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20  ./*.** Round up 
7330: 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20  a number to the 
7340: 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74  next larger mult
7350: 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73  iple of 8.  This
7360: 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66   is used.** to f
7370: 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67  orce 8-byte alig
7380: 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20  nment on 64-bit 
7390: 61 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a  architectures..*
73a0: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38  /.#define ROUND8
73b0: 28 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29  (x)     (((x)+7)
73c0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e  &~7)../*.** Roun
73d0: 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65  d down to the ne
73e0: 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f  arest multiple o
73f0: 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  f 8.*/.#define R
7400: 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78  OUNDDOWN8(x) ((x
7410: 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  )&~7)../*.** Ass
7420: 65 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69  ert that the poi
7430: 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65  nter X is aligne
7440: 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62  d to an 8-byte b
7450: 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a  oundary.  This.*
7460: 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  * macro is used 
7470: 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65  only within asse
7480: 72 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74  rt() to verify t
7490: 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74  hat the code get
74a0: 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65  s.** all alignme
74b0: 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  nt restrictions 
74c0: 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45  correct..**.** E
74d0: 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45  xcept, if SQLITE
74e0: 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f  _4_BYTE_ALIGNED_
74f0: 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65  MALLOC is define
7500: 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75  d, then the.** u
7510: 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63  nderlying malloc
7520: 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  () implementatio
7530: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
7540: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
7550: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
7560: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
7570: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
7580: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
7590: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
75a0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
75b0: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
75c0: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
75d0: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
75e0: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
75f0: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
7600: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
7610: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
7620: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
7630: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
7640: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69  #endif../*.** Di
7650: 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c  sable MMAP on pl
7660: 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74  atforms where it
7670: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74   is known to not
7680: 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66   work.*/.#if def
7690: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
76a0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51  ) || defined(__Q
76b0: 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66  NXNTO__).# undef
76c0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
76d0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
76e0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
76f0: 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IZE 0.#endif../*
7700: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69  .** Default maxi
7710: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f  mum size of memo
7720: 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72  ry used by memor
7730: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20  y-mapped I/O in 
7740: 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65  the VFS.*/.#ifde
7750: 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e  f __APPLE__.# in
7760: 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e  clude <TargetCon
7770: 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e  ditionals.h>.#en
7780: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
7790: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
77a0: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
77b0: 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20  linux__) \.  || 
77c0: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
77d0: 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28  \.  || (defined(
77e0: 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65  __APPLE__) && de
77f0: 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29  fined(__MACH__))
7800: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
7810: 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65  __sun) \.  || de
7820: 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f  fined(__FreeBSD_
7830: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
7840: 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29  d(__DragonFly__)
7850: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
7860: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7870: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
7880: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
7890: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
78a0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
78b0: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
78c0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
78d0: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
78e0: 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c  ZE is zero on al
78f0: 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72  l platforms.  Or
7900: 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67  , even if a larg
7910: 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d  er.** default MM
7920: 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69  AP_SIZE is speci
7930: 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  fied at compile-
7940: 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
7950: 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20  that it does.** 
7960: 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d  not exceed the m
7970: 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65  aximum mmap size
7980: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
7990: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
79a0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
79b0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
79c0: 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66  AP_SIZE 0.#endif
79d0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
79e0: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51  ULT_MMAP_SIZE>SQ
79f0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7a00: 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  ZE.# undef SQLIT
7a10: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
7a20: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
7a30: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
7a40: 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58  _SIZE SQLITE_MAX
7a50: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69  _MMAP_SIZE.#endi
7a60: 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54  f../*.** SELECTT
7a70: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c  RACE_ENABLED wil
7a80: 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72  l be either 1 or
7a90: 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20   0 depending on 
7aa0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a  whether or not.*
7ab0: 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65  * the Select que
7ac0: 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61  ry generator tra
7ad0: 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75  cing logic is tu
7ae0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
7af0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
7b00: 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
7b10: 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45  E).# define SELE
7b20: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
7b30: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
7b40: 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
7b50: 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  BLED 0.#endif../
7b60: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
7b70: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
7b80: 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  g structure is u
7b90: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
7ba0: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
7bb0: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20   callback for a 
7bc0: 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e  given sqlite han
7bd0: 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  dle..**.** The s
7be0: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
7bf0: 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  r member of the 
7c00: 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f  sqlite struct co
7c10: 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a  ntains the busy.
7c20: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  ** callback for 
7c30: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
7c40: 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20  dle. Each pager 
7c50: 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73  opened via the s
7c60: 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20  qlite.** handle 
7c70: 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e  is passed a poin
7c80: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75  ter to sqlite.bu
7c90: 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62  syHandler. The b
7ca0: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
7cb0: 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65  allback is curre
7cc0: 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c  ntly invoked onl
7cd0: 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61  y from within pa
7ce0: 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65  ger.c..*/.typede
7cf0: 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  f struct BusyHan
7d00: 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72  dler BusyHandler
7d10: 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  ;.struct BusyHan
7d20: 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78  dler {.  int (*x
7d30: 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f 69  BusyHandler)(voi
7d40: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
7d50: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
7d60: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73 79  */.  void *pBusy
7d70: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
7d80: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
7d90: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
7da0: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
7db0: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
7dc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
7dd0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
7de0: 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a  each busy call *
7df0: 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69 6c  /.  u8 bExtraFil
7e00: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
7e10: 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64 65        /* Include
7e20: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61 73   sqlite3_file as
7e30: 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a 2f   callback arg */
7e40: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20  .};../*.** Name 
7e50: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
7e60: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54  tabase table.  T
7e70: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
7e80: 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61  se table.** is a
7e90: 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74   special table t
7ea0: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
7eb0: 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74  mes and attribut
7ec0: 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65  es of all.** use
7ed0: 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  r tables and ind
7ee0: 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ices..*/.#define
7ef0: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20   MASTER_NAME    
7f00: 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65     "sqlite_maste
7f10: 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f  r".#define TEMP_
7f20: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71  MASTER_NAME  "sq
7f30: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
7f40: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  "../*.** The roo
7f50: 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61  t-page of the ma
7f60: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
7f70: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
7f80: 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20  MASTER_ROOT     
7f90: 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e    1../*.** The n
7fa0: 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ame of the schem
7fb0: 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  a table..*/.#def
7fc0: 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  ine SCHEMA_TABLE
7fd0: 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d  (x)  ((!OMIT_TEM
7fe0: 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d  PDB)&&(x==1)?TEM
7ff0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41  P_MASTER_NAME:MA
8000: 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a  STER_NAME)../*.*
8010: 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20  * A convenience 
8020: 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72  macro that retur
8030: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
8040: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20   elements in.** 
8050: 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65  an array..*/.#de
8060: 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58  fine ArraySize(X
8070: 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65  )    ((int)(size
8080: 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30  of(X)/sizeof(X[0
8090: 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ])))../*.** Dete
80a0: 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67  rmine if the arg
80b0: 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72  ument is a power
80c0: 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69   of two.*/.#defi
80d0: 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28  ne IsPowerOfTwo(
80e0: 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29  X) (((X)&((X)-1)
80f0: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )==0)../*.** The
8100: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65   following value
8110: 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72   as a destructor
8120: 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71   means to use sq
8130: 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a  lite3DbFree()..*
8140: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46  * The sqlite3DbF
8150: 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ree() routine re
8160: 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d  quires two param
8170: 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66  eters instead of
8180: 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61   the.** one para
8190: 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74 72  meter that destr
81a0: 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20  uctors normally 
81b0: 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76  want.  So we hav
81c0: 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a  e to introduce.*
81d0: 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c  * this magic val
81e0: 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  ue that the code
81f0: 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65   knows to handle
8200: 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41   differently.  A
8210: 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69  ny.** pointer wi
8220: 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20  ll work here as 
8230: 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69  long as it is di
8240: 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49  stinct from SQLI
8250: 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64  TE_STATIC.** and
8260: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
8270: 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  T..*/.#define SQ
8280: 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28  LITE_DYNAMIC   (
8290: 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63  (sqlite3_destruc
82a0: 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33  tor_type)sqlite3
82b0: 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a  MallocSize)../*.
82c0: 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f  ** When SQLITE_O
82d0: 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e  MIT_WSD is defin
82e0: 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  ed, it means tha
82f0: 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61  t the target pla
8300: 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f  tform does.** no
8310: 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62  t support Writab
8320: 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28  le Static Data (
8330: 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f  WSD) such as glo
8340: 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76  bal and static v
8350: 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c  ariables..** All
8360: 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20   variables must 
8370: 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65  either be on the
8380: 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69   stack or dynami
8390: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
83a0: 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70  from.** the heap
83b0: 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75  .  When WSD is u
83c0: 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20  nsupported, the 
83d0: 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61  variable declara
83e0: 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a  tions scattered.
83f0: 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68  ** throughout th
8400: 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75  e SQLite code mu
8410: 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61  st become consta
8420: 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68  nts instead.  Th
8430: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20  e SQLITE_WSD.** 
8440: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
8450: 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20  r this purpose. 
8460: 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20   And instead of 
8470: 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20  referencing the 
8480: 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65  variable.** dire
8490: 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73  ctly, we use its
84a0: 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b   constant as a k
84b0: 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65  ey to lookup the
84c0: 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61   run-time alloca
84d0: 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68  ted.** buffer th
84e0: 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61  at holds real va
84f0: 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e  riable.  The con
8500: 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68  stant is also th
8510: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a  e initializer.**
8520: 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d   for the run-tim
8530: 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  e allocated buff
8540: 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  er..**.** In the
8550: 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72   usual case wher
8560: 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74  e WSD is support
8570: 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57  ed, the SQLITE_W
8580: 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a  SD and GLOBAL.**
8590: 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e   macros become n
85a0: 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a  o-ops and have z
85b0: 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ero performance 
85c0: 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65  impact..*/.#ifde
85d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
85e0: 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  D.  #define SQLI
85f0: 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23  TE_WSD const.  #
8600: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
8610: 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33  v) (*(t*)sqlite3
8620: 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a  _wsd_find((void*
8630: 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29  )&(v), sizeof(v)
8640: 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  )).  #define sql
8650: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
8660: 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53   GLOBAL(struct S
8670: 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71  qlite3Config, sq
8680: 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69  lite3Config).  i
8690: 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69  nt sqlite3_wsd_i
86a0: 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a  nit(int N, int J
86b0: 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  );.  void *sqlit
86c0: 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64  e3_wsd_find(void
86d0: 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c   *K, int L);.#el
86e0: 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  se.  #define SQL
86f0: 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  ITE_WSD.  #defin
8700: 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a  e GLOBAL(t,v) v.
8710: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
8720: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71  3GlobalConfig sq
8730: 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64  lite3Config.#end
8740: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
8750: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
8760: 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  re used to suppr
8770: 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  ess compiler war
8780: 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20  nings and to.** 
8790: 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f  make it clear to
87a0: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77   human readers w
87b0: 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  hen a function p
87c0: 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69  arameter is deli
87d0: 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74  berately.** left
87e0: 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74   unused within t
87f0: 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e  he body of a fun
8800: 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61  ction. This usua
8810: 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e  lly happens when
8820: 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69  .** a function i
8830: 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66  s called via a f
8840: 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e  unction pointer.
8850: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65   For example the
8860: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
8870: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
8880: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
8890: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
88a0: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
88b0: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
88c0: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
88d0: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
88e0: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
88f0: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
8900: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
8910: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
8920: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
8930: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
8940: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
8950: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
8960: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
8970: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
8980: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
8990: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
89a0: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
89b0: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
89c0: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
89d0: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
89e0: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
89f0: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
8a00: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
8a10: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
8a20: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
8a30: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
8a40: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
8a50: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
8a60: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
8a70: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
8a80: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
8a90: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
8aa0: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
8ab0: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
8ac0: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
8ad0: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
8ae0: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
8af0: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
8b00: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
8b10: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8b20: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
8b30: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
8b40: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
8b50: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
8b60: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
8b70: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
8b80: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
8b90: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
8ba0: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
8bb0: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
8bc0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8bd0: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
8be0: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
8bf0: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
8c00: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
8c10: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
8c20: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
8c30: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
8c40: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
8c50: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
8c60: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
8c70: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
8c80: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
8c90: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
8ca0: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
8cb0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
8cc0: 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a  ruct FKey FKey;.
8cd0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
8ce0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46 75  uncDestructor Fu
8cf0: 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79  ncDestructor;.ty
8d00: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
8d10: 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79  cDef FuncDef;.ty
8d20: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
8d30: 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65 66  cDefHash FuncDef
8d40: 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74  Hash;.typedef st
8d50: 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69  ruct IdList IdLi
8d60: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
8d70: 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a  ct Index Index;.
8d80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
8d90: 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78  ndexSample Index
8da0: 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20  Sample;.typedef 
8db0: 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20  struct KeyClass 
8dc0: 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65  KeyClass;.typede
8dd0: 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  f struct KeyInfo
8de0: 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65   KeyInfo;.typede
8df0: 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  f struct Lookasi
8e00: 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79  de Lookaside;.ty
8e10: 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f  pedef struct Loo
8e20: 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61  kasideSlot Looka
8e30: 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65  sideSlot;.typede
8e40: 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20  f struct Module 
8e50: 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20  Module;.typedef 
8e60: 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65  struct NameConte
8e70: 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a  xt NameContext;.
8e80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
8e90: 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65  arse Parse;.type
8ea0: 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55 70  def struct PreUp
8eb0: 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b 0a  date PreUpdate;.
8ec0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
8ed0: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50  rintfArguments P
8ee0: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a  rintfArguments;.
8ef0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52  typedef struct R
8f00: 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e 61 6d  enameToken Renam
8f10: 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20  eToken;.typedef 
8f20: 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f  struct RowSet Ro
8f30: 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74  wSet;.typedef st
8f40: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53  ruct Savepoint S
8f50: 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65  avepoint;.typede
8f60: 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  f struct Select 
8f70: 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20  Select;.typedef 
8f80: 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72  struct SQLiteThr
8f90: 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64  ead SQLiteThread
8fa0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8fb0: 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65   SelectDest Sele
8fc0: 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20  ctDest;.typedef 
8fd0: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53  struct SrcList S
8fe0: 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  rcList;.typedef 
8ff0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 73  struct sqlite3_s
9000: 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f 2a 20  tr StrAccum; /* 
9010: 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73 20 66  Internal alias f
9020: 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72 20 2a  or sqlite3_str *
9030: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
9040: 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79   Table Table;.ty
9050: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62  pedef struct Tab
9060: 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b  leLock TableLock
9070: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
9080: 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79   Token Token;.ty
9090: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 65  pedef struct Tre
90a0: 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a  eView TreeView;.
90b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
90c0: 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a  rigger Trigger;.
90d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
90e0: 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65  riggerPrg Trigge
90f0: 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74  rPrg;.typedef st
9100: 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
9110: 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79   TriggerStep;.ty
9120: 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70  pedef struct Unp
9130: 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61  ackedRecord Unpa
9140: 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65  ckedRecord;.type
9150: 64 65 66 20 73 74 72 75 63 74 20 55 70 73 65 72  def struct Upser
9160: 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65 64 65  t Upsert;.typede
9170: 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  f struct VTable 
9180: 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20  VTable;.typedef 
9190: 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56  struct VtabCtx V
91a0: 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20  tabCtx;.typedef 
91b0: 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61  struct Walker Wa
91c0: 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  lker;.typedef st
91d0: 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57  ruct WhereInfo W
91e0: 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65  hereInfo;.typede
91f0: 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77 20  f struct Window 
9200: 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65 66 20  Window;.typedef 
9210: 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74 68  struct With With
9220: 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69  ;.../*.** The bi
9230: 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64  tmask datatype d
9240: 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20  efined below is 
9250: 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  used for various
9260: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
9270: 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74  **.** Changing t
9280: 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69  his from a 64-bi
9290: 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79  t to a 32-bit ty
92a0: 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75  pe limits the nu
92b0: 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65  mber of.** table
92c0: 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33  s in a join to 3
92d0: 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e  2 instead of 64.
92e0: 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65    But it also re
92f0: 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a  duces the size.*
9300: 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  * of the library
9310: 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e   by 738 bytes on
9320: 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65 66   ix86..*/.#ifdef
9330: 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f   SQLITE_BITMASK_
9340: 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20 53  TYPE.  typedef S
9350: 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59  QLITE_BITMASK_TY
9360: 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c 73  PE Bitmask;.#els
9370: 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34 20  e.  typedef u64 
9380: 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a  Bitmask;.#endif.
9390: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
93a0: 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42  r of bits in a B
93b0: 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d  itmask.  "BMS" m
93c0: 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69  eans "BitMask Si
93d0: 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ze"..*/.#define 
93e0: 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65  BMS  ((int)(size
93f0: 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a  of(Bitmask)*8)).
9400: 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20  ./*.** A bit in 
9410: 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65  a Bitmask.*/.#de
9420: 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20  fine MASKBIT(n) 
9430: 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c    (((Bitmask)1)<
9440: 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41  <(n)).#define MA
9450: 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e  SKBIT32(n) (((un
9460: 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28  signed int)1)<<(
9470: 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c 42  n)).#define ALLB
9480: 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d 61  ITS      ((Bitma
9490: 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56 4c 69  sk)-1)../* A VLi
94a0: 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f 72 64  st object record
94b0: 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65 74 77  s a mapping betw
94c0: 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73 2f 76  een parameters/v
94d0: 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63 61 72  ariables/wildcar
94e0: 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53 51 4c  ds.** in the SQL
94f0: 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75 63 68   statement (such
9500: 20 61 73 20 24 61 62 63 2c 20 40 70 71 72 2c 20   as $abc, @pqr, 
9510: 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74 68 65  or :xyz) and the
9520: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 72 69   integer.** vari
9530: 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73 73 6f  able number asso
9540: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74  ciated with that
9550: 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53 65 65   parameter.  See
9560: 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65 73 63   the format desc
9570: 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74 68  ription.** on th
9580: 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74 41 64  e sqlite3VListAd
9590: 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72 20  d() routine for 
95a0: 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  more information
95b0: 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20 72 65  .  A VList is re
95c0: 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61 6e 20  ally.** just an 
95d0: 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72  array of integer
95e0: 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 69 6e  s..*/.typedef in
95f0: 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20  t VList;../*.** 
9600: 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76  Defer sourcing v
9610: 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e  dbe.h and btree.
9620: 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68  h until after th
9630: 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22 42  e "u8" and.** "B
9640: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
9650: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
9660: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
9670: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
9680: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
9690: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
96a0: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
96b0: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
96c0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
96d0: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
96e0: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
96f0: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69 6e  e "pcache.h".#in
9700: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
9710: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
9720: 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 45  ./* The SQLITE_E
9730: 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f 6d  XTRA_DURABLE com
9740: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
9750: 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68 65   used to set the
9760: 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e 63   default.** sync
9770: 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 20  hronous setting 
9780: 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69 73  to EXTRA.  It is
9790: 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f   no longer suppo
97a0: 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rted..*/.#ifdef 
97b0: 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52  SQLITE_EXTRA_DUR
97c0: 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20 55  ABLE.# warning U
97d0: 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  se SQLITE_DEFAUL
97e0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33 20  T_SYNCHRONOUS=3 
97f0: 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49 54  instead of SQLIT
9800: 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a  E_EXTRA_DURABLE.
9810: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
9820: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9830: 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OUS 3.#endif../*
9840: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e 63  .** Default sync
9850: 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e 0a  hronous levels..
9860: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
9870: 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20 72  (for historcal r
9880: 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47 45  easons) the PAGE
9890: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a 20  R_SYNCHRONOUS_* 
98a0: 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a 2a  macros differ.**
98b0: 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
98c0: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
98d0: 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31 2e  NOUS value by 1.
98e0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  .**.**          
98f0: 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f   PAGER_SYNCHRONO
9900: 55 53 20 20 20 20 20 20 20 44 45 46 41 55 4c 54  US       DEFAULT
9910: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a 20  _SYNCHRONOUS.** 
9920: 20 20 4f 46 46 20 20 20 20 20 20 20 20 20 20 20    OFF           
9930: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1               
9940: 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20 20            0.**  
9950: 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 32   NORMAL        2
9960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9970: 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20 20           1.**   
9980: 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33 20  FULL          3 
9990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99a0: 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20 45          2.**   E
99b0: 58 54 52 41 20 20 20 20 20 20 20 20 20 34 20 20  XTRA         4  
99c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99d0: 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20 54         3.**.** T
99e0: 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  he "PRAGMA synch
99f0: 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65 6e  ronous" statemen
9a00: 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65 20  t also uses the 
9a10: 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65  zero-based numbe
9a20: 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  rs..** In other 
9a30: 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f 2d  words, the zero-
9a40: 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61 72  based numbers ar
9a50: 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 65  e used for all e
9a60: 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61 63  xternal interfac
9a70: 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f 6e  es.** and the on
9a80: 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20 61  e-based values a
9a90: 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c  re used internal
9aa0: 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ly..*/.#ifndef S
9ab0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9ac0: 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69  NCHRONOUS.# defi
9ad0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
9ae0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 32 0a  T_SYNCHRONOUS 2.
9af0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
9b00: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41  QLITE_DEFAULT_WA
9b10: 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20  L_SYNCHRONOUS.# 
9b20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
9b30: 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52  FAULT_WAL_SYNCHR
9b40: 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45 46  ONOUS SQLITE_DEF
9b50: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
9b60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
9b70: 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c  ach database fil
9b80: 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64  e to be accessed
9b90: 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69   by the system i
9ba0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
9bb0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
9bc0: 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  g structure.  Th
9bd0: 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79  ere are normally
9be0: 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74   two of these st
9bf0: 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74  ructures.** in t
9c00: 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20  he sqlite.aDb[] 
9c10: 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69  array.  aDb[0] i
9c20: 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
9c30: 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20  ase file and.** 
9c40: 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61  aDb[1] is the da
9c50: 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
9c60: 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61   to hold tempora
9c70: 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69  ry tables.  Addi
9c80: 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61  tional.** databa
9c90: 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63  ses may be attac
9ca0: 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44  hed..*/.struct D
9cb0: 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62 53  b {.  char *zDbS
9cc0: 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
9cd0: 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62  me of this datab
9ce0: 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e 61 6d  ase. (schema nam
9cf0: 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65 29  e, not filename)
9d00: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
9d10: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
9d20: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
9d30: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
9d40: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
9d50: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
9d60: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
9d70: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
9d80: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
9d90: 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b 20  .  u8 bSyncSet; 
9da0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
9db0: 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  if "PRAGMA synch
9dc0: 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62 65  ronous=N" has be
9dd0: 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68 65  en run */.  Sche
9de0: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
9df0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64   /* Pointer to d
9e00: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28  atabase schema (
9e10: 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29  possibly shared)
9e20: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
9e30: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
9e40: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
9e50: 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61  ture stores a da
9e60: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
9e70: 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61  *.** Most Schema
9e80: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73   objects are ass
9e90: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42  ociated with a B
9ea0: 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70  tree.  The excep
9eb0: 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53  tion is.** the S
9ec0: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45  chema for the TE
9ed0: 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c  MP databaes (sql
9ee0: 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69  ite3.aDb[1]) whi
9ef0: 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64  ch is free-stand
9f00: 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65  ing..** In share
9f10: 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20  d cache mode, a 
9f20: 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62  single Schema ob
9f30: 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72  ject can be shar
9f40: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a  ed by multiple.*
9f50: 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65  * Btrees that re
9f60: 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20  fer to the same 
9f70: 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61  underlying BtSha
9f80: 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a  red object..**.*
9f90: 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  * Schema objects
9fa0: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
9fb0: 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77  ly deallocated w
9fc0: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72  hen the last Btr
9fd0: 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72  ee that.** refer
9fe0: 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64 65  ences them is de
9ff0: 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54  stroyed.   The T
a000: 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61  EMP Schema is ma
a010: 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a  nually freed by.
a020: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  ** sqlite3_close
a030: 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61  ()..*.** A threa
a040: 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e  d must be holdin
a050: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
a060: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42   corresponding B
a070: 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  tree in order.**
a080: 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d   to access Schem
a090: 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73  a content.  This
a0a0: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
a0b0: 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c  e thread must al
a0c0: 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67  so be.** holding
a0d0: 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20   a mutex on the 
a0e0: 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69  sqlite3 connecti
a0f0: 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20  on pointer that 
a100: 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a  owns the Btree..
a110: 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63  ** For a TEMP Sc
a120: 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63  hema, only the c
a130: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
a140: 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a  is required..*/.
a150: 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a  struct Schema {.
a160: 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f    int schema_coo
a170: 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61  kie;   /* Databa
a180: 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  se schema versio
a190: 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69  n number for thi
a1a0: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  s file */.  int 
a1b0: 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20  iGeneration;    
a1c0: 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63   /* Generation c
a1d0: 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65  ounter.  Increme
a1e0: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63  nted with each c
a1f0: 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20  hange */.  Hash 
a200: 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20  tblHash;        
a210: 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e  /* All tables in
a220: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
a230: 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68 3b  .  Hash idxHash;
a240: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28          /* All (
a250: 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69  named) indices i
a260: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
a270: 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61 73  /.  Hash trigHas
a280: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
a290: 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65 64  triggers indexed
a2a0: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
a2b0: 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20  sh fkeyHash;    
a2c0: 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67     /* All foreig
a2d0: 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72 65  n keys by refere
a2e0: 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20  nced table name 
a2f0: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71  */.  Table *pSeq
a300: 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Tab;      /* The
a310: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
a320: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 41   table used by A
a330: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
a340: 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74    u8 file_format
a350: 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  ;      /* Schema
a360: 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20   format version 
a370: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
a380: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
a390: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
a3a0: 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79  encoding used by
a3b0: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
a3c0: 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c  /.  u16 schemaFl
a3d0: 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67  ags;     /* Flag
a3e0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
a3f0: 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  h this schema */
a400: 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a  .  int cache_siz
a410: 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  e;      /* Numbe
a420: 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73  r of pages to us
a430: 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a  e in the cache *
a440: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  /.};../*.** Thes
a450: 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
a460: 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
a470: 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
a480: 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70 53   in the.** Db.pS
a490: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
a4a0: 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ld..*/.#define D
a4b0: 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c 49  bHasProperty(D,I
a4c0: 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e 61  ,P)     (((D)->a
a4d0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a4e0: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 3d  chemaFlags&(P))=
a4f0: 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62  =(P)).#define Db
a500: 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44  HasAnyProperty(D
a510: 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44  ,I,P)  (((D)->aD
a520: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
a530: 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21 3d  hemaFlags&(P))!=
a540: 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74  0).#define DbSet
a550: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
a560: 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e      (D)->aDb[I].
a570: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a580: 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
a590: 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74  e DbClearPropert
a5a0: 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e  y(D,I,P)   (D)->
a5b0: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a5c0: 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50  schemaFlags&=~(P
a5d0: 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  )../*.** Allowed
a5e0: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
a5f0: 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  DB.pSchema->flag
a600: 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54  s field..**.** T
a610: 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  he DB_SchemaLoad
a620: 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 61  ed flag is set a
a630: 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73  fter the databas
a640: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
a650: 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69  n.** read into i
a660: 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62  nternal hash tab
a670: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e  les..**.** DB_Un
a680: 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73  resetViews means
a690: 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72   that one or mor
a6a0: 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c  e views have col
a6b0: 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a  umn names that.*
a6c0: 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c  * have been fill
a6d0: 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20  ed out.  If the 
a6e0: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20  schema changes, 
a6f0: 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  these column nam
a700: 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e  es might.** chan
a710: 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76  ges and so the v
a720: 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f  iew will need to
a730: 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64   be reset..*/.#d
a740: 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c  efine DB_SchemaL
a750: 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31 20  oaded    0x0001 
a760: 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68   /* The schema h
a770: 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a  as been loaded *
a780: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72  /.#define DB_Unr
a790: 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78 30  esetViews    0x0
a7a0: 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65  002  /* Some vie
a7b0: 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64 20  ws have defined 
a7c0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a  column names */.
a7d0: 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79  #define DB_Empty
a7e0: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
a7f0: 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69  4  /* The file i
a800: 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20  s empty (length 
a810: 30 20 62 79 74 65 73 29 20 2a 2f 0a 23 64 65 66  0 bytes) */.#def
a820: 69 6e 65 20 44 42 5f 52 65 73 65 74 57 61 6e 74  ine DB_ResetWant
a830: 65 64 20 20 20 20 20 30 78 30 30 30 38 20 20 2f  ed     0x0008  /
a840: 2a 20 52 65 73 65 74 20 74 68 65 20 73 63 68 65  * Reset the sche
a850: 6d 61 20 77 68 65 6e 20 6e 53 63 68 65 6d 61 4c  ma when nSchemaL
a860: 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ock==0 */../*.**
a870: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   The number of d
a880: 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f  ifferent kinds o
a890: 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61  f things that ca
a8a0: 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20  n be limited.** 
a8b0: 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  using the sqlite
a8c0: 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66  3_limit() interf
a8d0: 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ace..*/.#define 
a8e0: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28  SQLITE_N_LIMIT (
a8f0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52  SQLITE_LIMIT_WOR
a900: 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a  KER_THREADS+1)..
a910: 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  /*.** Lookaside 
a920: 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20  malloc is a set 
a930: 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75  of fixed-size bu
a940: 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62  ffers that can b
a950: 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74  e used.** to sat
a960: 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73  isfy small trans
a970: 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ient memory allo
a980: 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20  cation requests 
a990: 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61  for objects.** a
a9a0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
a9b0: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
a9c0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
a9d0: 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20    The use of.** 
a9e0: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
a9f0: 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e   provides a sign
aa00: 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61  ificant performa
aa10: 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a  nce enhancement.
aa20: 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20  ** (approx 10%) 
aa30: 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65  by avoiding nume
aa40: 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65  rous malloc/free
aa50: 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20   requests while 
aa60: 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73  parsing.** SQL s
aa70: 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
aa80: 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73   The Lookaside s
aa90: 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63  tructure holds c
aaa0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66  onfiguration inf
aab0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
aac0: 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  he.** lookaside 
aad0: 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d  malloc subsystem
aae0: 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c  .  Each availabl
aaf0: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
ab00: 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f  ion in.** the lo
ab10: 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65  okaside subsyste
ab20: 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61  m is stored on a
ab30: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
ab40: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a  LookasideSlot.**
ab50: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20   objects..**.** 
ab60: 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  Lookaside alloca
ab70: 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61  tions are only a
ab80: 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63  llowed for objec
ab90: 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f  ts that are asso
aba0: 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61  ciated.** with a
abb0: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
abc0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
abd0: 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20    Hence, schema 
abe0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e  information cann
abf0: 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20  ot.** be stored 
ac00: 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63  in lookaside bec
ac10: 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63  ause in shared c
ac20: 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63  ache mode the sc
ac30: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
ac40: 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79  .** is shared by
ac50: 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
ac60: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20  se connections. 
ac70: 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c   Therefore, whil
ac80: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68  e parsing.** sch
ac90: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  ema information,
aca0: 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62   the Lookaside.b
acb0: 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20  Enabled flag is 
acc0: 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a  cleared so that.
acd0: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** lookaside all
ace0: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74  ocations are not
acf0: 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75   used to constru
ad00: 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62  ct the schema ob
ad10: 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 65 77  jects..**.** New
ad20: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
ad30: 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20  ations are only 
ad40: 61 6c 6c 6f 77 65 64 20 69 66 20 62 44 69 73 61  allowed if bDisa
ad50: 62 6c 65 3d 3d 30 2e 20 20 57 68 65 6e 0a 2a 2a  ble==0.  When.**
ad60: 20 62 44 69 73 61 62 6c 65 20 69 73 20 67 72 65   bDisable is gre
ad70: 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20  ater than zero, 
ad80: 73 7a 20 69 73 20 73 65 74 20 74 6f 20 7a 65 72  sz is set to zer
ad90: 6f 20 77 68 69 63 68 20 65 66 66 65 63 74 69 76  o which effectiv
ada0: 65 6c 79 0a 2a 2a 20 64 69 73 61 62 6c 65 73 20  ely.** disables 
adb0: 6c 6f 6f 6b 61 73 69 64 65 20 77 69 74 68 6f 75  lookaside withou
adc0: 74 20 61 64 64 69 6e 67 20 61 20 6e 65 77 20 74  t adding a new t
add0: 65 73 74 20 66 6f 72 20 74 68 65 20 62 44 69 73  est for the bDis
ade0: 61 62 6c 65 20 66 6c 61 67 0a 2a 2a 20 69 6e 20  able flag.** in 
adf0: 61 20 70 65 72 66 6f 72 6d 61 6e 63 65 2d 63 72  a performance-cr
ae00: 69 74 69 63 61 6c 20 70 61 74 68 2e 20 20 73 7a  itical path.  sz
ae10: 20 73 68 6f 75 6c 64 20 62 65 20 73 65 74 20 62   should be set b
ae20: 79 20 74 6f 20 73 7a 54 72 75 65 20 77 68 65 6e  y to szTrue when
ae30: 65 76 65 72 0a 2a 2a 20 62 44 69 73 61 62 6c 65  ever.** bDisable
ae40: 20 63 68 61 6e 67 65 73 20 62 61 63 6b 20 74 6f   changes back to
ae50: 20 7a 65 72 6f 2e 0a 2a 2f 0a 73 74 72 75 63 74   zero..*/.struct
ae60: 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75   Lookaside {.  u
ae70: 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20 20  32 bDisable;    
ae80: 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f         /* Only o
ae90: 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b 61  perate the looka
aea0: 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20 2a  side when zero *
aeb0: 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20  /.  u16 sz;     
aec0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
aed0: 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66  ize of each buff
aee0: 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  er in bytes */. 
aef0: 20 75 31 36 20 73 7a 54 72 75 65 3b 20 20 20 20   u16 szTrue;    
af00: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
af10: 20 76 61 6c 75 65 20 6f 66 20 73 7a 2c 20 65 76   value of sz, ev
af20: 65 6e 20 69 66 20 64 69 73 61 62 6c 65 64 20 2a  en if disabled *
af30: 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64  /.  u8 bMalloced
af40: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
af50: 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62  rue if pStart ob
af60: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
af70: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  te3_malloc() */.
af80: 20 20 75 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20    u32 nSlot;    
af90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
afa0: 62 65 72 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65  ber of lookaside
afb0: 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64   slots allocated
afc0: 20 2a 2f 0a 20 20 75 33 32 20 61 6e 53 74 61 74   */.  u32 anStat
afd0: 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  [3];          /*
afe0: 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69   0: hits.  1: si
aff0: 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66  ze misses.  2: f
b000: 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20  ull misses */.  
b010: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70  LookasideSlot *p
b020: 49 6e 69 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20  Init;   /* List 
b030: 6f 66 20 62 75 66 66 65 72 73 20 6e 6f 74 20 70  of buffers not p
b040: 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 2a  reviously used *
b050: 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  /.  LookasideSlo
b060: 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c  t *pFree;   /* L
b070: 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ist of available
b080: 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f   buffers */.  vo
b090: 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20  id *pStart;     
b0a0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62        /* First b
b0b0: 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  yte of available
b0c0: 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f   memory space */
b0d0: 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20  .  void *pEnd;  
b0e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
b0f0: 72 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e  rst byte past en
b100: 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73  d of available s
b110: 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63  pace */.};.struc
b120: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20  t LookasideSlot 
b130: 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  {.  LookasideSlo
b140: 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20  t *pNext;    /* 
b150: 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74  Next buffer in t
b160: 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20  he list of free 
b170: 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 23  buffers */.};..#
b180: 64 65 66 69 6e 65 20 44 69 73 61 62 6c 65 4c 6f  define DisableLo
b190: 6f 6b 61 73 69 64 65 20 20 64 62 2d 3e 6c 6f 6f  okaside  db->loo
b1a0: 6b 61 73 69 64 65 2e 62 44 69 73 61 62 6c 65 2b  kaside.bDisable+
b1b0: 2b 3b 64 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e  +;db->lookaside.
b1c0: 73 7a 3d 30 0a 23 64 65 66 69 6e 65 20 45 6e 61  sz=0.#define Ena
b1d0: 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 20 20 20 64  bleLookaside   d
b1e0: 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e 62 44 69  b->lookaside.bDi
b1f0: 73 61 62 6c 65 2d 2d 3b 5c 0a 20 20 20 64 62 2d  sable--;\.   db-
b200: 3e 6c 6f 6f 6b 61 73 69 64 65 2e 73 7a 3d 64 62  >lookaside.sz=db
b210: 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e 62 44 69 73  ->lookaside.bDis
b220: 61 62 6c 65 3f 30 3a 64 62 2d 3e 6c 6f 6f 6b 61  able?0:db->looka
b230: 73 69 64 65 2e 73 7a 54 72 75 65 0a 0a 2f 2a 0a  side.szTrue../*.
b240: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
b250: 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  for built-in fun
b260: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
b270: 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e  s.  (Application
b280: 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63  -defined.** func
b290: 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75  tions use a regu
b2a0: 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20  lar table table 
b2b0: 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a  from hash.h.).**
b2c0: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
b2d0: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
b2e0: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
b2f0: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
b300: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
b310: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
b320: 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20  FuncDef.u.pHash 
b330: 63 68 61 69 6e 2e 20 20 55 73 65 20 74 68 65 20  chain.  Use the 
b340: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
b350: 28 29 0a 2a 2a 20 6d 61 63 72 6f 20 74 6f 20 63  ().** macro to c
b360: 6f 6d 70 75 74 65 20 61 20 68 61 73 68 20 6f 6e  ompute a hash on
b370: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 6e 61   the function na
b380: 6d 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  me..*/.#define S
b390: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
b3a0: 53 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e  SZ 23.struct Fun
b3b0: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
b3c0: 63 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46  cDef *a[SQLITE_F
b3d0: 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20  UNC_HASH_SZ];   
b3e0: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
b3f0: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  e for functions 
b400: 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51  */.};.#define SQ
b410: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28 43  LITE_FUNC_HASH(C
b420: 2c 4c 29 20 28 28 28 43 29 2b 28 4c 29 29 25 53  ,L) (((C)+(L))%S
b430: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
b440: 53 5a 29 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  SZ)..#ifdef SQLI
b450: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
b460: 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66  CATION./*.** Inf
b470: 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e  ormation held in
b480: 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64   the "sqlite3" d
b490: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
b4a0: 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73  on object and us
b4b0: 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20  ed.** to manage 
b4c0: 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  user authenticat
b4d0: 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ion..*/.typedef 
b4e0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
b4f0: 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f  serauth sqlite3_
b500: 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74  userauth;.struct
b510: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
b520: 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76  h {.  u8 authLev
b530: 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  el;             
b540: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61      /* Current a
b550: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65  uthentication le
b560: 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75  vel */.  int nAu
b570: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
b580: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
b590: 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e  f the zAuthPW in
b5a0: 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72   bytes */.  char
b5b0: 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20   *zAuthPW;      
b5c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73            /* Pas
b5d0: 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75  sword used to au
b5e0: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20  thenticate */.  
b5f0: 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b  char *zAuthUser;
b600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b610: 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20   User name used 
b620: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
b630: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
b640: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c  d values for sql
b650: 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75  ite3_userauth.au
b660: 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69  thLevel */.#defi
b670: 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e  ne UAUTH_Unknown
b680: 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75       0     /* Au
b690: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74  thentication not
b6a0: 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a   yet checked */.
b6b0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61  #define UAUTH_Fa
b6c0: 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20  il        1     
b6d0: 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69  /* User authenti
b6e0: 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f  cation failed */
b6f0: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
b700: 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20  ser        2    
b710: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
b720: 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73  d as a normal us
b730: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  er */.#define UA
b740: 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20  UTH_Admin       
b750: 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  3     /* Authent
b760: 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d  icated as an adm
b770: 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f  inistrator */../
b780: 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64  * Functions used
b790: 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75   only by user au
b7a0: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69  thorization logi
b7b0: 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  c */.int sqlite3
b7c0: 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f  UserAuthTable(co
b7d0: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
b7e0: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43  sqlite3UserAuthC
b7f0: 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65  heckLogin(sqlite
b800: 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  3*,const char*,u
b810: 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
b820: 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71  3UserAuthInit(sq
b830: 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
b840: 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73  lite3CryptFunc(s
b850: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
b860: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
b870: 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a  e**);..#endif /*
b880: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b890: 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a  HENTICATION */..
b8a0: 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f  /*.** typedef fo
b8b0: 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74  r the authorizat
b8c0: 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ion callback fun
b8d0: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66  ction..*/.#ifdef
b8e0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b8f0: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79  HENTICATION.  ty
b900: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
b910: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
b920: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
b930: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
b940: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
b950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b960: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
b970: 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
b980: 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  *);.#else.  type
b990: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
b9a0: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
b9b0: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
b9c0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b9d0: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
b9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9f0: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
ba00: 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
ba10: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
ba20: 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 20 54  _DEPRECATED./* T
ba30: 68 69 73 20 69 73 20 61 6e 20 65 78 74 72 61 20  his is an extra 
ba40: 53 51 4c 49 54 45 5f 54 52 41 43 45 20 6d 61 63  SQLITE_TRACE mac
ba50: 72 6f 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ro that indicate
ba60: 73 20 22 6c 65 67 61 63 79 22 20 74 72 61 63 69  s "legacy" traci
ba70: 6e 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74 79  ng.** in the sty
ba80: 6c 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 74 72  le of sqlite3_tr
ba90: 61 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  ace().*/.#define
baa0: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45   SQLITE_TRACE_LE
bab0: 47 41 43 59 20 20 20 20 20 20 20 20 20 20 30 78  GACY          0x
bac0: 34 30 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68  40     /* Use th
bad0: 65 20 6c 65 67 61 63 79 20 78 54 72 61 63 65 20  e legacy xTrace 
bae0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
baf0: 45 5f 54 52 41 43 45 5f 58 50 52 4f 46 49 4c 45  E_TRACE_XPROFILE
bb00: 20 20 20 20 20 20 20 20 30 78 38 30 20 20 20 20          0x80    
bb10: 20 2f 2a 20 55 73 65 20 74 68 65 20 6c 65 67 61   /* Use the lega
bb20: 63 79 20 78 50 72 6f 66 69 6c 65 20 2a 2f 0a 23  cy xProfile */.#
bb30: 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51 4c  else.#define SQL
bb40: 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59  ITE_TRACE_LEGACY
bb50: 20 20 20 20 20 20 20 20 20 20 30 0a 23 64 65 66            0.#def
bb60: 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ine SQLITE_TRACE
bb70: 5f 58 50 52 4f 46 49 4c 45 20 20 20 20 20 20 20  _XPROFILE       
bb80: 20 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   0.#endif /* SQL
bb90: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
bba0: 54 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  TED */.#define S
bbb0: 51 4c 49 54 45 5f 54 52 41 43 45 5f 4e 4f 4e 4c  QLITE_TRACE_NONL
bbc0: 45 47 41 43 59 5f 4d 41 53 4b 20 20 30 78 30 66  EGACY_MASK  0x0f
bbd0: 20 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 20 66       /* Normal f
bbe0: 6c 61 67 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  lags */.../*.** 
bbf0: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  Each database co
bc00: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69  nnection is an i
bc10: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
bc20: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
bc30: 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71  re..*/.struct sq
bc40: 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65  lite3 {.  sqlite
bc50: 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20  3_vfs *pVfs;    
bc60: 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e          /* OS In
bc70: 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72  terface */.  str
bc80: 75 63 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b  uct Vdbe *pVdbe;
bc90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69             /* Li
bca0: 73 74 20 6f 66 20 61 63 74 69 76 65 20 76 69 72  st of active vir
bcb0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f  tual machines */
bcc0: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c  .  CollSeq *pDfl
bcd0: 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  tColl;          
bce0: 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20   /* The default 
bcf0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
bd00: 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20  ce (BINARY) */. 
bd10: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
bd20: 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f  mutex;         /
bd30: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74  * Connection mut
bd40: 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b  ex */.  Db *aDb;
bd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd60: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63        /* All bac
bd70: 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  kends */.  int n
bd80: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
bd90: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
bda0: 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63  er of backends c
bdb0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20  urrently in use 
bdc0: 2a 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c 61 67  */.  u32 mDbFlag
bdd0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
bde0: 20 20 20 2f 2a 20 66 6c 61 67 73 20 72 65 63 6f     /* flags reco
bdf0: 72 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c 20 73  rding internal s
be00: 74 61 74 65 20 2a 2f 0a 20 20 75 36 34 20 66 6c  tate */.  u64 fl
be10: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
be20: 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67 73          /* flags
be30: 20 73 65 74 74 61 62 6c 65 20 62 79 20 70 72 61   settable by pra
be40: 67 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f 77 20  gmas. See below 
be50: 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77  */.  i64 lastRow
be60: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  id;             
be70: 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d     /* ROWID of m
be80: 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72  ost recent inser
be90: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
bea0: 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20  .  i64 szMmap;  
beb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bec0: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70   /* Default mmap
bed0: 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f  _size setting */
bee0: 0a 20 20 75 33 32 20 6e 53 63 68 65 6d 61 4c 6f  .  u32 nSchemaLo
bef0: 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ck;             
bf00: 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73 65 74   /* Do not reset
bf10: 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e   the schema when
bf20: 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 75   non-zero */.  u
bf30: 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e  nsigned int open
bf40: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
bf50: 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
bf60: 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65  sqlite3_vfs.xOpe
bf70: 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  n() */.  int err
bf80: 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
bf90: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
bfa0: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
bfb0: 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20   (SQLITE_*) */. 
bfc0: 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20   int errMask;   
bfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bfe0: 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73  * & result codes
bff0: 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72   with this befor
c000: 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20  e returning */. 
c010: 20 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b 20   int iSysErrno; 
c020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c030: 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66 72  * Errno value fr
c040: 6f 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20 65  om last system e
c050: 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64 62  rror */.  u16 db
c060: 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20  OptFlags;       
c070: 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73          /* Flags
c080: 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62   to enable/disab
c090: 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  le optimizations
c0a0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
c0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0c0: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
c0d0: 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74  ding */.  u8 aut
c0e0: 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20  oCommit;        
c0f0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
c100: 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e  uto-commit flag.
c110: 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74   */.  u8 temp_st
c120: 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ore;            
c130: 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32      /* 1: file 2
c140: 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61  : memory 0: defa
c150: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c  ult */.  u8 mall
c160: 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20  ocFailed;       
c170: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
c180: 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61  f we have seen a
c190: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20   malloc failure 
c1a0: 2a 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d  */.  u8 bBenignM
c1b0: 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20  alloc;          
c1c0: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71     /* Do not req
c1d0: 75 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75  uire OOMs if tru
c1e0: 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f  e */.  u8 dfltLo
c1f0: 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ckMode;         
c200: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
c210: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72  locking-mode for
c220: 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f   attached dbs */
c230: 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e  .  signed char n
c240: 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20  extAutovac;     
c250: 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74   /* Autovac sett
c260: 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d  ing after VACUUM
c270: 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20   if >=0 */.  u8 
c280: 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20  suppressErr;    
c290: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
c2a0: 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72   not issue error
c2b0: 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75   messages if tru
c2c0: 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e  e */.  u8 vtabOn
c2d0: 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20  Conflict;       
c2e0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
c2f0: 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76   return for s3_v
c300: 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28  tab_on_conflict(
c310: 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e  ) */.  u8 isTran
c320: 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
c330: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
c340: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
c350: 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20  vepoint is a TS 
c360: 2a 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b 20  */.  u8 mTrace; 
c370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c380: 20 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f     /* zero or mo
c390: 72 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20  re SQLITE_TRACE 
c3a0: 66 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 6e 6f  flags */.  u8 no
c3b0: 53 68 61 72 65 64 43 61 63 68 65 3b 20 20 20 20  SharedCache;    
c3c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
c3d0: 20 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63 61   if no shared-ca
c3e0: 63 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  che backends */.
c3f0: 20 20 75 38 20 6e 53 71 6c 45 78 65 63 3b 20 20    u8 nSqlExec;  
c400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c410: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 65 6e  /* Number of pen
c420: 64 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63 20  ding OP_SqlExec 
c430: 6f 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e 74  opcodes */.  int
c440: 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20   nextPagesize;  
c450: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
c460: 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43  gesize after VAC
c470: 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75  UUM if >0 */.  u
c480: 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20  32 magic;       
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c4a0: 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72  Magic number for
c4b0: 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20   detect library 
c4c0: 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  misuse */.  int 
c4d0: 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  nChange;        
c4e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
c4f0: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
c500: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
c510: 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c   */.  int nTotal
c520: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
c530: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
c540: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
c550: 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29  _total_changes()
c560: 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74   */.  int aLimit
c570: 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d  [SQLITE_N_LIMIT]
c580: 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f  ;   /* Limits */
c590: 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65  .  int nMaxSorte
c5a0: 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  rMmap;          
c5b0: 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65   /* Maximum size
c5c0: 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70   of regions mapp
c5d0: 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a  ed by sorter */.
c5e0: 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33    struct sqlite3
c5f0: 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20  InitInfo {      
c600: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
c610: 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69  sed during initi
c620: 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  alization */.   
c630: 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20   int newTnum;   
c640: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c650: 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c  Rootpage of tabl
c660: 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
c670: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44  zed */.    u8 iD
c680: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
c690: 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
c6a0: 64 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67  db file is being
c6b0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
c6c0: 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20      u8 busy;    
c6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6e0: 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65  /* TRUE if curre
c6f0: 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e  ntly initializin
c700: 67 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  g */.    unsigne
c710: 64 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 20  d orphanTrigger 
c720: 3a 20 31 3b 20 2f 2a 20 4c 61 73 74 20 73 74 61  : 1; /* Last sta
c730: 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e  tement is orphan
c740: 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20  ed TEMP trigger 
c750: 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
c760: 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 20 3a 20  imposterTable : 
c770: 31 3b 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61  1; /* Building a
c780: 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65  n imposter table
c790: 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
c7a0: 20 72 65 6f 70 65 6e 4d 65 6d 64 62 20 3a 20 31   reopenMemdb : 1
c7b0: 3b 20 20 20 2f 2a 20 41 54 54 41 43 48 20 69 73  ;   /* ATTACH is
c7c0: 20 72 65 61 6c 6c 79 20 61 20 72 65 6f 70 65 6e   really a reopen
c7d0: 20 75 73 69 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a   using MemDB */.
c7e0: 20 20 20 20 63 68 61 72 20 2a 2a 61 7a 49 6e 69      char **azIni
c7f0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
c800: 2f 2a 20 22 74 79 70 65 22 2c 20 22 6e 61 6d 65  /* "type", "name
c810: 22 2c 20 61 6e 64 20 22 74 62 6c 5f 6e 61 6d 65  ", and "tbl_name
c820: 22 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 7d  " columns */.  }
c830: 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64   init;.  int nVd
c840: 62 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20  beActive;       
c850: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c860: 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e   of VDBEs curren
c870: 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20  tly running */. 
c880: 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20   int nVdbeRead; 
c890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c8a0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
c8b0: 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65  ve VDBEs that re
c8c0: 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20  ad or write */. 
c8d0: 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b   int nVdbeWrite;
c8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c8f0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
c900: 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65  ve VDBEs that re
c910: 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a  ad and write */.
c920: 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b    int nVdbeExec;
c930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c940: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
c950: 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62  ted calls to Vdb
c960: 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74  eExec() */.  int
c970: 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20 20   nVDestroy;     
c980: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c990: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 4f  mber of active O
c9a0: 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72 61  P_VDestroy opera
c9b0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  tions */.  int n
c9c0: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
c9d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c9e0: 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74  er of loaded ext
c9f0: 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69  ensions */.  voi
ca00: 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20  d **aExtension; 
ca10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
ca20: 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69  ray of shared li
ca30: 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f  brary handles */
ca40: 0a 20 20 69 6e 74 20 28 2a 78 54 72 61 63 65 29  .  int (*xTrace)
ca50: 28 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a  (u32,void*,void*
ca60: 2c 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20  ,void*);     /* 
ca70: 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  Trace function *
ca80: 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65  /.  void *pTrace
ca90: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cab0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
cac0: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   trace function 
cad0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
cae0: 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
caf0: 44 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66  D.  void (*xProf
cb00: 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ile)(void*,const
cb10: 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a   char*,u64);  /*
cb20: 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74   Profiling funct
cb30: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
cb40: 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20  ProfileArg;     
cb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb60: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
cb70: 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69  o profile functi
cb80: 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 76  on */.#endif.  v
cb90: 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b  oid *pCommitArg;
cba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbb0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
cbc0: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28  xCommitCallback(
cbd0: 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f  ) */.  int (*xCo
cbe0: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f  mmitCallback)(vo
cbf0: 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f  id*);    /* Invo
cc00: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
cc10: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
cc20: 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20  pRollbackArg;   
cc30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
cc40: 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c  rgument to xRoll
cc50: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a  backCallback() *
cc60: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c  /.  void (*xRoll
cc70: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f  backCallback)(vo
cc80: 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64  id*); /* Invoked
cc90: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
cca0: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70  . */.  void *pUp
ccb0: 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20  dateArg;.  void 
ccc0: 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  (*xUpdateCallbac
ccd0: 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  k)(void*,int, co
cce0: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
ccf0: 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  char*,sqlite_int
cd00: 36 34 29 3b 0a 20 20 50 61 72 73 65 20 2a 70 50  64);.  Parse *pP
cd10: 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
cd20: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
cd30: 70 61 72 73 65 20 2a 2f 0a 23 69 66 64 65 66 20  parse */.#ifdef 
cd40: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
cd50: 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76  EUPDATE_HOOK.  v
cd60: 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41  oid *pPreUpdateA
cd70: 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rg;          /* 
cd80: 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
cd90: 6f 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  o xPreUpdateCall
cda0: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28  back */.  void (
cdb0: 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  *xPreUpdateCallb
cdc0: 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73  ack)(   /* Regis
cdd0: 74 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69  tered using sqli
cde0: 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f  te3_preupdate_ho
cdf0: 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64  ok() */.    void
ce00: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  *,sqlite3*,int,c
ce10: 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20  har const*,char 
ce20: 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69  const*,sqlite3_i
ce30: 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74  nt64,sqlite3_int
ce40: 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64  64.  );.  PreUpd
ce50: 61 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b  ate *pPreUpdate;
ce60: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
ce70: 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72  xt for active pr
ce80: 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63  e-update callbac
ce90: 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k */.#endif /* S
cea0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
ceb0: 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23  UPDATE_HOOK */.#
cec0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
ced0: 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78  IT_WAL.  int (*x
cee0: 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  WalCallback)(voi
cef0: 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20  d *, sqlite3 *, 
cf00: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
cf10: 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c  t);.  void *pWal
cf20: 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f  Arg;.#endif.  vo
cf30: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29  id(*xCollNeeded)
cf40: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
cf50: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
cf60: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
cf70: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36  d(*xCollNeeded16
cf80: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
cf90: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
cfa0: 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
cfb0: 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41  id *pCollNeededA
cfc0: 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg;.  sqlite3_va
cfd0: 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20  lue *pErr;      
cfe0: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
cff0: 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  nt error message
d000: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
d010: 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69    volatile int i
d020: 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a  sInterrupted; /*
d030: 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33   True if sqlite3
d040: 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62  _interrupt has b
d050: 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
d060: 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64    double notUsed
d070: 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  1;            /*
d080: 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75   Spacer */.  } u
d090: 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c  1;.  Lookaside l
d0a0: 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
d0b0: 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20     /* Lookaside 
d0c0: 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61  malloc configura
d0d0: 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  tion */.#ifndef 
d0e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
d0f0: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69  ORIZATION.  sqli
d100: 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b  te3_xauth xAuth;
d110: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63            /* Acc
d120: 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ess authorizatio
d130: 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  n function */.  
d140: 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20  void *pAuthArg; 
d150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d160: 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f   1st argument to
d170: 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68   the access auth
d180: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e   function */.#en
d190: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
d1a0: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
d1b0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20  _CALLBACK.  int 
d1c0: 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69  (*xProgress)(voi
d1d0: 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  d *);     /* The
d1e0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
d1f0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ck */.  void *pP
d200: 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20  rogressArg;     
d210: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
d220: 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73  t to the progres
d230: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
d240: 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65  unsigned nProgre
d250: 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a  ssOps;        /*
d260: 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64   Number of opcod
d270: 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20  es for progress 
d280: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
d290: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
d2a0: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
d2b0: 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e  BLE.  int nVTran
d2c0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
d2d0: 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
d2e0: 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73   size of aVTrans
d2f0: 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75   */.  Hash aModu
d300: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
d310: 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64      /* populated
d320: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61   by sqlite3_crea
d330: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
d340: 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43   VtabCtx *pVtabC
d350: 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  tx;            /
d360: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
d370: 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63  tive vtab connec
d380: 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54  t/create */.  VT
d390: 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20  able **aVTrans; 
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
d3b0: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69  irtual tables wi
d3c0: 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  th open transact
d3d0: 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  ions */.  VTable
d3e0: 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20   *pDisconnect;  
d3f0: 20 20 20 20 20 20 20 20 2f 2a 20 44 69 73 63 6f          /* Disco
d400: 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e  nnect these in n
d410: 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ext sqlite3_prep
d420: 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  are() */.#endif.
d430: 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20    Hash aFunc;   
d440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d450: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66  /* Hash table of
d460: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63   connection func
d470: 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  tions */.  Hash 
d480: 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20  aCollSeq;       
d490: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
d4a0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
d4b0: 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e  ces */.  BusyHan
d4c0: 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72  dler busyHandler
d4d0: 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63  ;      /* Busy c
d4e0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20  allback */.  Db 
d4f0: 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20  aDbStatic[2];   
d500: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
d510: 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74  atic space for t
d520: 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63  he 2 default bac
d530: 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70  kends */.  Savep
d540: 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
d550: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
d560: 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70   of active savep
d570: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62  oints */.  int b
d580: 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20  usyTimeout;     
d590: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79           /* Busy
d5a0: 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74   handler timeout
d5b0: 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69  , in msec */.  i
d5c0: 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt nSavepoint;  
d5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d5e0: 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72  Number of non-tr
d5f0: 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
d600: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ints */.  int nS
d610: 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20  tatement;       
d620: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
d630: 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74  r of nested stat
d640: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
d650: 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ns  */.  i64 nDe
d660: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
d670: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
d680: 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
d690: 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  ts this transact
d6a0: 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ion. */.  i64 nD
d6b0: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
d6c0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
d6d0: 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74  eferred immediat
d6e0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
d6f0: 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46  .  int *pnBytesF
d700: 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  reed;           
d710: 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c   /* If not NULL,
d720: 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20   increment this 
d730: 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23  in DbFree() */.#
d740: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
d750: 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
d760: 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  Y.  /* The follo
d770: 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61  wing variables a
d780: 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64  re all protected
d790: 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d   by the STATIC_M
d7a0: 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78  ASTER.  ** mutex
d7b0: 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33  , not by sqlite3
d7c0: 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65  .mutex. They are
d7d0: 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e   used by code in
d7e0: 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a   notify.c..  **.
d7f0: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c    ** When X.pUnl
d800: 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ockConnection==Y
d810: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
d820: 74 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66  t X is waiting f
d830: 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c  or Y to.  ** unl
d840: 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63  ock so that it c
d850: 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a  an proceed..  **
d860: 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c  .  ** When X.pBl
d870: 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e  ockingConnection
d880: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
d890: 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74  that something t
d8a0: 68 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a  hat X tried.  **
d8b0: 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63   tried to do rec
d8c0: 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74  ently failed wit
d8d0: 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  h an SQLITE_LOCK
d8e0: 45 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20  ED error due to 
d8f0: 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20  locks.  ** held 
d900: 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c  by Y..  */.  sql
d910: 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43  ite3 *pBlockingC
d920: 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f  onnection; /* Co
d930: 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61  nnection that ca
d940: 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  used SQLITE_LOCK
d950: 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ED */.  sqlite3 
d960: 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  *pUnlockConnecti
d970: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  on;           /*
d980: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77   Connection to w
d990: 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20  atch for unlock 
d9a0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f  */.  void *pUnlo
d9b0: 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ckArg;          
d9c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
d9d0: 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63  gument to xUnloc
d9e0: 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69  kNotify */.  voi
d9f0: 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66  d (*xUnlockNotif
da00: 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29  y)(void **, int)
da10: 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74  ;  /* Unlock not
da20: 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ify callback */.
da30: 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74    sqlite3 *pNext
da40: 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20  Blocked;        
da50: 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20  /* Next in list 
da60: 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63  of all blocked c
da70: 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65  onnections */.#e
da80: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
da90: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
daa0: 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33  CATION.  sqlite3
dab0: 5f 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20  _userauth auth; 
dac0: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61         /* User a
dad0: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e  uthentication in
dae0: 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e  formation */.#en
daf0: 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20  dif.};../*.** A 
db00: 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65  macro to discove
db10: 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  r the encoding o
db20: 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f  f a database..*/
db30: 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f  .#define SCHEMA_
db40: 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61  ENC(db) ((db)->a
db50: 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65  Db[0].pSchema->e
db60: 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28  nc).#define ENC(
db70: 64 62 29 20 20 20 20 20 20 20 20 28 28 64 62 29  db)        ((db)
db80: 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f  ->enc)../*.** Po
db90: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
dba0: 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c  r the sqlite3.fl
dbb0: 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  ags..**.** Value
dbc0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
dbd0: 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
dbe0: 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51  t()):.**      SQ
dbf0: 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20  LITE_FullFSync  
dc00: 20 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c     == PAGER_FULL
dc10: 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51  FSYNC.**      SQ
dc20: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
dc30: 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54  nc == PAGER_CKPT
dc40: 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20  _FULLFSYNC.**   
dc50: 20 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53     SQLITE_CacheS
dc60: 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45 52  pill    == PAGER
dc70: 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a  _CACHE_SPILL.*/.
dc80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
dc90: 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78  riteSchema    0x
dca0: 30 30 30 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20  00000001  /* OK 
dcb0: 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45  to update SQLITE
dcc0: 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69  _MASTER */.#defi
dcd0: 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79  ne SQLITE_Legacy
dce0: 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 30  FileFmt  0x00000
dcf0: 30 30 32 20 20 2f 2a 20 43 72 65 61 74 65 20 6e  002  /* Create n
dd00: 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20  ew databases in 
dd10: 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66  format 1 */.#def
dd20: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43  ine SQLITE_FullC
dd30: 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30  olNames   0x0000
dd40: 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66 75  0004  /* Show fu
dd50: 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ll column names 
dd60: 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65  on SELECT */.#de
dd70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
dd80: 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30  FSync      0x000
dd90: 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75  00008  /* Use fu
dda0: 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20  ll fsync on the 
ddb0: 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69  backend */.#defi
ddc0: 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75  ne SQLITE_CkptFu
ddd0: 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30  llFSync  0x00000
dde0: 30 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  010  /* Use full
ddf0: 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b   fsync for check
de00: 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  point */.#define
de10: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
de20: 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 32  ll     0x0000002
de30: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c  0  /* OK to spil
de40: 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f  l pager cache */
de50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
de60: 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30  ShortColNames  0
de70: 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68  x00000040  /* Sh
de80: 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73  ow short columns
de90: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
dea0: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  e SQLITE_CountRo
deb0: 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ws      0x000000
dec0: 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77  80  /* Count row
ded0: 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53  s changed by INS
dee0: 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20  ERT, */.        
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df10: 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f    /*   DELETE, o
df20: 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74  r UPDATE and ret
df30: 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  urn */.         
df40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df60: 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20   /*   the count 
df70: 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b  using a callback
df80: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  . */.#define SQL
df90: 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b  ITE_NullCallback
dfa0: 20 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f     0x00000100  /
dfb0: 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c  * Invoke the cal
dfc0: 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68  lback once if th
dfd0: 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
dfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e000: 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69  *   result set i
e010: 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  s empty */.#defi
e020: 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65  ne SQLITE_Ignore
e030: 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 30  Checks   0x00000
e040: 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65  200  /* Do not e
e050: 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e  nforce check con
e060: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
e070: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55  ine SQLITE_ReadU
e080: 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30 30 30 30  ncommit   0x0000
e090: 30 34 30 30 20 20 2f 2a 20 52 45 41 44 20 55 4e  0400  /* READ UN
e0a0: 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73 68 61  COMMITTED in sha
e0b0: 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65  red-cache */.#de
e0c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b  fine SQLITE_NoCk
e0d0: 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30 30 30  ptOnClose  0x000
e0e0: 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65  00800  /* No che
e0f0: 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65  ckpoint on close
e100: 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23 64 65  ()/DETACH */.#de
e110: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65  fine SQLITE_Reve
e120: 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30  rseOrder   0x000
e130: 30 31 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73  01000  /* Revers
e140: 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45  e unordered SELE
e150: 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTs */.#define S
e160: 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72  QLITE_RecTrigger
e170: 73 20 20 20 20 30 78 30 30 30 30 32 30 30 30 20  s    0x00002000 
e180: 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72   /* Enable recur
e190: 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f  sive triggers */
e1a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e1b0: 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30  ForeignKeys    0
e1c0: 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20 45 6e  x00004000  /* En
e1d0: 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65  force foreign ke
e1e0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a  y constraints  *
e1f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e200: 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20  _AutoIndex      
e210: 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 45  0x00008000  /* E
e220: 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20  nable automatic 
e230: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
e240: 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78  ne SQLITE_LoadEx
e250: 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 30 31 30  tension  0x00010
e260: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c  000  /* Enable l
e270: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f  oad_extension */
e280: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e290: 4c 6f 61 64 45 78 74 46 75 6e 63 20 20 20 20 30  LoadExtFunc    0
e2a0: 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45 6e  x00020000  /* En
e2b0: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
e2c0: 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63 20 2a  ion() SQL func *
e2d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e2e0: 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20  _EnableTrigger  
e2f0: 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 54  0x00040000  /* T
e300: 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72  rue to enable tr
e310: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
e320: 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  e SQLITE_DeferFK
e330: 73 20 20 20 20 20 20 20 30 78 30 30 30 38 30 30  s       0x000800
e340: 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c  00  /* Defer all
e350: 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   FK constraints 
e360: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e370: 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20  E_QueryOnly     
e380: 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20   0x00100000  /* 
e390: 44 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65  Disable database
e3a0: 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66   changes */.#def
e3b0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53  ine SQLITE_CellS
e3c0: 69 7a 65 43 6b 20 20 20 20 20 30 78 30 30 32 30  izeCk     0x0020
e3d0: 30 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20 62  0000  /* Check b
e3e0: 74 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73 20  tree cell sizes 
e3f0: 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69  on load */.#defi
e400: 6e 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54 6f  ne SQLITE_Fts3To
e410: 6b 65 6e 69 7a 65 72 20 20 30 78 30 30 34 30 30  kenizer  0x00400
e420: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66  000  /* Enable f
e430: 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29  ts3_tokenizer(2)
e440: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e450: 54 45 5f 45 6e 61 62 6c 65 51 50 53 47 20 20 20  TE_EnableQPSG   
e460: 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a    0x00800000  /*
e470: 20 51 75 65 72 79 20 50 6c 61 6e 6e 65 72 20 53   Query Planner S
e480: 74 61 62 69 6c 69 74 79 20 47 75 61 72 61 6e 74  tability Guarant
e490: 65 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ee*/.#define SQL
e4a0: 49 54 45 5f 54 72 69 67 67 65 72 45 51 50 20 20  ITE_TriggerEQP  
e4b0: 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f     0x01000000  /
e4c0: 2a 20 53 68 6f 77 20 74 72 69 67 67 65 72 20 45  * Show trigger E
e4d0: 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
e4e0: 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  N */.#define SQL
e4f0: 49 54 45 5f 52 65 73 65 74 44 61 74 61 62 61 73  ITE_ResetDatabas
e500: 65 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f  e  0x02000000  /
e510: 2a 20 52 65 73 65 74 20 74 68 65 20 64 61 74 61  * Reset the data
e520: 62 61 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  base */.#define 
e530: 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 41 6c 74  SQLITE_LegacyAlt
e540: 65 72 20 20 20 20 30 78 30 34 30 30 30 30 30 30  er    0x04000000
e550: 20 20 2f 2a 20 4c 65 67 61 63 79 20 41 4c 54 45    /* Legacy ALTE
e560: 52 20 54 41 42 4c 45 20 62 65 68 61 76 69 6f 75  R TABLE behaviou
e570: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
e580: 49 54 45 5f 4e 6f 53 63 68 65 6d 61 45 72 72 6f  ITE_NoSchemaErro
e590: 72 20 20 30 78 30 38 30 30 30 30 30 30 20 20 2f  r  0x08000000  /
e5a0: 2a 20 44 6f 20 6e 6f 74 20 72 65 70 6f 72 74 20  * Do not report 
e5b0: 73 63 68 65 6d 61 20 70 61 72 73 65 20 65 72 72  schema parse err
e5c0: 6f 72 73 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ors*/.#define SQ
e5d0: 4c 49 54 45 5f 44 65 66 65 6e 73 69 76 65 20 20  LITE_Defensive  
e5e0: 20 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20      0x10000000  
e5f0: 2f 2a 20 49 6e 70 75 74 20 53 51 4c 20 69 73 20  /* Input SQL is 
e600: 6c 69 6b 65 6c 79 20 68 6f 73 74 69 6c 65 20 2a  likely hostile *
e610: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e620: 5f 44 71 73 44 44 4c 20 20 20 20 20 20 20 20 20  _DqsDDL         
e630: 30 78 32 30 30 30 30 30 30 30 20 20 2f 2a 20 64  0x20000000  /* d
e640: 62 6c 2d 71 75 6f 74 65 64 20 73 74 72 69 6e 67  bl-quoted string
e650: 73 20 61 6c 6c 6f 77 65 64 20 69 6e 20 44 44 4c  s allowed in DDL
e660: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e670: 45 5f 44 71 73 44 4d 4c 20 20 20 20 20 20 20 20  E_DqsDML        
e680: 20 30 78 34 30 30 30 30 30 30 30 20 20 2f 2a 20   0x40000000  /* 
e690: 64 62 6c 2d 71 75 6f 74 65 64 20 73 74 72 69 6e  dbl-quoted strin
e6a0: 67 73 20 61 6c 6c 6f 77 65 64 20 69 6e 20 44 4d  gs allowed in DM
e6b0: 4c 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  L*/.#define SQLI
e6c0: 54 45 5f 45 6e 61 62 6c 65 56 69 65 77 20 20 20  TE_EnableView   
e6d0: 20 20 30 78 38 30 30 30 30 30 30 30 20 20 2f 2a    0x80000000  /*
e6e0: 20 45 6e 61 62 6c 65 20 74 68 65 20 75 73 65 20   Enable the use 
e6f0: 6f 66 20 76 69 65 77 73 20 2a 2f 0a 0a 2f 2a 20  of views */../* 
e700: 46 6c 61 67 73 20 75 73 65 64 20 6f 6e 6c 79 20  Flags used only 
e710: 69 66 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a  if debugging */.
e720: 23 64 65 66 69 6e 65 20 48 49 28 58 29 20 20 28  #define HI(X)  (
e730: 28 75 36 34 29 28 58 29 3c 3c 33 32 29 0a 23 69  (u64)(X)<<32).#i
e740: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
e750: 47 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  G.#define SQLITE
e760: 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20  _SqlTrace       
e770: 48 49 28 30 78 30 31 30 30 30 30 30 29 20 2f 2a  HI(0x0100000) /*
e780: 20 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c   Debug print SQL
e790: 20 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20   as it executes 
e7a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e7b0: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20  E_VdbeListing   
e7c0: 20 48 49 28 30 78 30 32 30 30 30 30 30 29 20 2f   HI(0x0200000) /
e7d0: 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73  * Debug listings
e7e0: 20 6f 66 20 56 44 42 45 20 70 72 6f 67 73 20 2a   of VDBE progs *
e7f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e800: 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20  _VdbeTrace      
e810: 48 49 28 30 78 30 34 30 30 30 30 30 29 20 2f 2a  HI(0x0400000) /*
e820: 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56   True to trace V
e830: 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  DBE execution */
e840: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e850: 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 48  VdbeAddopTrace H
e860: 49 28 30 78 30 38 30 30 30 30 30 29 20 2f 2a 20  I(0x0800000) /* 
e870: 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62  Trace sqlite3Vdb
e880: 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a  eAddOp() calls *
e890: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e8a0: 5f 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20  _VdbeEQP        
e8b0: 48 49 28 30 78 31 30 30 30 30 30 30 29 20 2f 2a  HI(0x1000000) /*
e8c0: 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51   Debug EXPLAIN Q
e8d0: 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65  UERY PLAN */.#de
e8e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 61 72 73  fine SQLITE_Pars
e8f0: 65 72 54 72 61 63 65 20 20 20 20 48 49 28 30 78  erTrace    HI(0x
e900: 32 30 30 30 30 30 30 29 20 2f 2a 20 50 52 41 47  2000000) /* PRAG
e910: 4d 41 20 70 61 72 73 65 72 5f 74 72 61 63 65 3d  MA parser_trace=
e920: 4f 4e 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ON */.#endif../*
e930: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
e940: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d  es for sqlite3.m
e950: 44 62 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  DbFlags.*/.#defi
e960: 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  ne DBFLAG_Schema
e970: 43 68 61 6e 67 65 20 20 20 30 78 30 30 30 31 20  Change   0x0001 
e980: 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20   /* Uncommitted 
e990: 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67  Hash table chang
e9a0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  es */.#define DB
e9b0: 46 4c 41 47 5f 50 72 65 66 65 72 42 75 69 6c 74  FLAG_PreferBuilt
e9c0: 69 6e 20 20 30 78 30 30 30 32 20 20 2f 2a 20 50  in  0x0002  /* P
e9d0: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69  reference to bui
e9e0: 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23  lt-in funcs */.#
e9f0: 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61  define DBFLAG_Va
ea00: 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78 30  cuum         0x0
ea10: 30 30 34 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c  004  /* Currentl
ea20: 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f  y in a VACUUM */
ea30: 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f  .#define DBFLAG_
ea40: 56 61 63 75 75 6d 49 6e 74 6f 20 20 20 20 20 30  VacuumInto     0
ea50: 78 30 30 30 38 20 20 2f 2a 20 43 75 72 72 65 6e  x0008  /* Curren
ea60: 74 6c 79 20 72 75 6e 6e 69 6e 67 20 56 41 43 55  tly running VACU
ea70: 55 4d 20 49 4e 54 4f 20 2a 2f 0a 23 64 65 66 69  UM INTO */.#defi
ea80: 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  ne DBFLAG_Schema
ea90: 4b 6e 6f 77 6e 4f 6b 20 20 30 78 30 30 31 30 20  KnownOk  0x0010 
eaa0: 20 2f 2a 20 53 63 68 65 6d 61 20 69 73 20 6b 6e   /* Schema is kn
eab0: 6f 77 6e 20 74 6f 20 62 65 20 76 61 6c 69 64 20  own to be valid 
eac0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f  */../*.** Bits o
ead0: 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62  f the sqlite3.db
eae0: 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74  OptFlags field t
eaf0: 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20  hat are used by 
eb00: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  the.** sqlite3_t
eb10: 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
eb20: 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49  TE_TESTCTRL_OPTI
eb30: 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69  MIZATIONS,...) i
eb40: 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73  nterface to.** s
eb50: 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62  electively disab
eb60: 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  le various optim
eb70: 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65  izations..*/.#de
eb80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
eb90: 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30  yFlattener 0x000
eba0: 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61  1   /* Query fla
ebb0: 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ttening */.#defi
ebc0: 6e 65 20 53 51 4c 49 54 45 5f 57 69 6e 64 6f 77  ne SQLITE_Window
ebd0: 46 75 6e 63 20 20 20 20 20 30 78 30 30 30 32 20  Func     0x0002 
ebe0: 20 20 2f 2a 20 55 73 65 20 78 49 6e 76 65 72 73    /* Use xInvers
ebf0: 65 20 66 6f 72 20 77 69 6e 64 6f 77 20 66 75 6e  e for window fun
ec00: 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
ec10: 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79  e SQLITE_GroupBy
ec20: 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20  Order   0x0004  
ec30: 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65   /* GROUPBY cove
ec40: 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a  r of ORDERBY */.
ec50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
ec60: 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78  actorOutConst 0x
ec70: 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61  0008   /* Consta
ec80: 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a  nt factoring */.
ec90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
eca0: 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78  istinctOpt    0x
ecb0: 30 30 31 30 20 20 20 2f 2a 20 44 49 53 54 49 4e  0010   /* DISTIN
ecc0: 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73  CT using indexes
ecd0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ece0: 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20  TE_CoverIdxScan 
ecf0: 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 43 6f    0x0020   /* Co
ed00: 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61  vering index sca
ed10: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
ed20: 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a  LITE_OrderByIdxJ
ed30: 6f 69 6e 20 30 78 30 30 34 30 20 20 20 2f 2a 20  oin 0x0040   /* 
ed40: 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e  ORDER BY of join
ed50: 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23  s via index */.#
ed60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72  define SQLITE_Tr
ed70: 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30  ansitive     0x0
ed80: 30 38 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74  080   /* Transit
ed90: 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ive constraints 
eda0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
edb0: 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20  E_OmitNoopJoin  
edc0: 20 30 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d 69   0x0100   /* Omi
edd0: 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20  t unused tables 
ede0: 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66  in joins */.#def
edf0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ine SQLITE_Count
ee00: 4f 66 56 69 65 77 20 20 20 20 30 78 30 32 30 30  OfView    0x0200
ee10: 20 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d     /* The count-
ee20: 6f 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a 61  of-view optimiza
ee30: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
ee40: 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e  SQLITE_CursorHin
ee50: 74 73 20 20 20 20 30 78 30 34 30 30 20 20 20 2f  ts    0x0400   /
ee60: 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48  * Add OP_CursorH
ee70: 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23  int opcodes */.#
ee80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74  define SQLITE_St
ee90: 61 74 34 20 20 20 20 20 20 20 20 20 20 30 78 30  at4          0x0
eea0: 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41  800   /* Use STA
eeb0: 54 34 20 64 61 74 61 20 2a 2f 0a 20 20 20 2f 2a  T4 data */.   /*
eec0: 20 54 48 33 20 65 78 70 65 63 74 73 20 74 68 65   TH3 expects the
eed0: 20 53 74 61 74 34 20 20 20 5e 5e 5e 5e 5e 5e 20   Stat4   ^^^^^^ 
eee0: 76 61 6c 75 65 20 74 6f 20 62 65 20 30 78 30 38  value to be 0x08
eef0: 30 30 2e 20 20 44 6f 6e 27 74 20 63 68 61 6e 67  00.  Don't chang
ef00: 65 20 69 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  e it */.#define 
ef10: 53 51 4c 49 54 45 5f 50 75 73 68 44 6f 77 6e 20  SQLITE_PushDown 
ef20: 20 20 20 20 20 20 30 78 31 30 30 30 20 20 20 2f        0x1000   /
ef30: 2a 20 54 68 65 20 70 75 73 68 2d 64 6f 77 6e 20  * The push-down 
ef40: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a  optimization */.
ef50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ef60: 69 6d 70 6c 69 66 79 4a 6f 69 6e 20 20 20 30 78  implifyJoin   0x
ef70: 32 30 30 30 20 20 20 2f 2a 20 43 6f 6e 76 65 72  2000   /* Conver
ef80: 74 20 4c 45 46 54 20 4a 4f 49 4e 20 74 6f 20 4a  t LEFT JOIN to J
ef90: 4f 49 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  OIN */.#define S
efa0: 51 4c 49 54 45 5f 53 6b 69 70 53 63 61 6e 20 20  QLITE_SkipScan  
efb0: 20 20 20 20 20 30 78 34 30 30 30 20 20 20 2f 2a       0x4000   /*
efc0: 20 53 6b 69 70 2d 73 63 61 6e 73 20 2a 2f 0a 23   Skip-scans */.#
efd0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72  define SQLITE_Pr
efe0: 6f 70 61 67 61 74 65 43 6f 6e 73 74 20 30 78 38  opagateConst 0x8
eff0: 30 30 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 6e  000   /* The con
f000: 73 74 61 6e 74 20 70 72 6f 70 61 67 61 74 69 6f  stant propagatio
f010: 6e 20 6f 70 74 20 2a 2f 0a 23 64 65 66 69 6e 65  n opt */.#define
f020: 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20   SQLITE_AllOpts 
f030: 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20 20         0xffff   
f040: 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74  /* All optimizat
f050: 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ions */../*.** M
f060: 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e  acros for testin
f070: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
f080: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61   optimizations a
f090: 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69  re enabled or di
f0a0: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66 69  sabled..*/.#defi
f0b0: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44  ne OptimizationD
f0c0: 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  isabled(db, mask
f0d0: 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74  )  (((db)->dbOpt
f0e0: 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30  Flags&(mask))!=0
f0f0: 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  ).#define Optimi
f100: 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62  zationEnabled(db
f110: 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29  , mask)   (((db)
f120: 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61  ->dbOptFlags&(ma
f130: 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  sk))==0)../*.** 
f140: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
f150: 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63  t OK to factor c
f160: 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
f170: 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69  ons into the ini
f180: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63  tialization.** c
f190: 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e  ode. The argumen
f1a0: 74 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a  t is a Parse obj
f1b0: 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65  ect for the code
f1c0: 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23   generator..*/.#
f1d0: 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74  define ConstFact
f1e0: 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b  orOk(P) ((P)->ok
f1f0: 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a  ConstFactor)../*
f200: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
f210: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
f220: 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a  te.magic field..
f230: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61  ** The numbers a
f240: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72  re obtained at r
f250: 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e  andom and have n
f260: 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  o special meanin
f270: 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  g, other.** than
f280: 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20   being distinct 
f290: 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72  from one another
f2a0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
f2b0: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20  ITE_MAGIC_OPEN  
f2c0: 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f     0xa029a697  /
f2d0: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70  * Database is op
f2e0: 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  en */.#define SQ
f2f0: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
f300: 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20  D   0x9f3c2d33  
f310: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63  /* Database is c
f320: 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  losed */.#define
f330: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49   SQLITE_MAGIC_SI
f340: 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39  CK     0x4b77129
f350: 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20  0  /* Error and 
f360: 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a  awaiting close *
f370: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f380: 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20  _MAGIC_BUSY     
f390: 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44  0xf03b7906  /* D
f3a0: 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c  atabase currentl
f3b0: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66  y in use */.#def
f3c0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
f3d0: 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35  _ERROR    0xb535
f3e0: 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49  7930  /* An SQLI
f3f0: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
f400: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66  occurred */.#def
f410: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
f420: 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66  _ZOMBIE   0x64cf
f430: 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77  fc7f  /* Close w
f440: 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65  ith last stateme
f450: 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a  nt close */../*.
f460: 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63  ** Each SQL func
f470: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
f480: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
f490: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
f4a0: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 46  ** structure.  F
f4b0: 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d  or global built-
f4c0: 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78  in functions (ex
f4d0: 3a 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28  : substr(), max(
f4e0: 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61  ), count()).** a
f4f0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
f500: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65   structure is he
f510: 6c 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ld in the sqlite
f520: 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  3BuiltinFunction
f530: 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72  s object..** For
f540: 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20   per-connection 
f550: 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69  application-defi
f560: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61  ned functions, a
f570: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
f580: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69 73  .** structure is
f590: 20 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d   held in the db-
f5a0: 3e 61 48 61 73 68 20 68 61 73 68 20 74 61 62 6c  >aHash hash tabl
f5b0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70  e..**.** The u.p
f5c0: 48 61 73 68 20 66 69 65 6c 64 20 69 73 20 75 73  Hash field is us
f5d0: 65 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c  ed by the global
f5e0: 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65   built-ins.  The
f5f0: 20 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a   u.pDestructor.*
f600: 2a 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  * field is used 
f610: 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  by per-connectio
f620: 6e 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69  n app-def functi
f630: 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  ons..*/.struct F
f640: 75 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41  uncDef {.  i8 nA
f650: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
f660: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
f670: 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e  uments.  -1 mean
f680: 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20  s unlimited */. 
f690: 20 75 33 32 20 66 75 6e 63 46 6c 61 67 73 3b 20   u32 funcFlags; 
f6a0: 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f        /* Some co
f6b0: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c  mbination of SQL
f6c0: 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20  ITE_FUNC_* */.  
f6d0: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
f6e0: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74       /* User dat
f6f0: 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20  a parameter */. 
f700: 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b   FuncDef *pNext;
f710: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75        /* Next fu
f720: 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65  nction with same
f730: 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20   name */.  void 
f740: 28 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65  (*xSFunc)(sqlite
f750: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
f760: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
f770: 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d   /* func or agg-
f780: 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28  step */.  void (
f790: 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69  *xFinalize)(sqli
f7a0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20  te3_context*);  
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7c0: 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72  /* Agg finalizer
f7d0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 61   */.  void (*xVa
f7e0: 6c 75 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  lue)(sqlite3_con
f7f0: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
f800: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
f810: 75 72 72 65 6e 74 20 61 67 67 20 76 61 6c 75 65  urrent agg value
f820: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 49 6e   */.  void (*xIn
f830: 76 65 72 73 65 29 28 73 71 6c 69 74 65 33 5f 63  verse)(sqlite3_c
f840: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
f850: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
f860: 20 69 6e 76 65 72 73 65 20 61 67 67 2d 73 74 65   inverse agg-ste
f870: 70 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  p */.  const cha
f880: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53  r *zName;   /* S
f890: 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  QL name of the f
f8a0: 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e  unction. */.  un
f8b0: 69 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65  ion {.    FuncDe
f8c0: 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f  f *pHash;      /
f8d0: 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69  * Next with a di
f8e0: 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74  fferent name but
f8f0: 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a   the same hash *
f900: 2f 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72 75  /.    FuncDestru
f910: 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f  ctor *pDestructo
f920: 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63  r;   /* Referenc
f930: 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75  e counted destru
f940: 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ctor function */
f950: 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a  .  } u;.};../*.*
f960: 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
f970: 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20   encapsulates a 
f980: 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65  user-function de
f990: 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63  structor callbac
f9a0: 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  k (as.** configu
f9b0: 72 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65  red using create
f9c0: 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20  _function_v2()) 
f9d0: 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20  and a reference 
f9e0: 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a  counter. When.**
f9f0: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
fa00: 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20  _v2() is called 
fa10: 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63  to create a func
fa20: 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74  tion with a dest
fa30: 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e  ructor,.** a sin
fa40: 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68  gle object of th
fa50: 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63  is type is alloc
fa60: 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75  ated. FuncDestru
fa70: 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74  ctor.nRef is set
fa80: 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65   to.** the numbe
fa90: 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a  r of FuncDef obj
faa0: 65 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69  ects created (ei
fab0: 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70  ther 1 or 3, dep
fac0: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
fad0: 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20  r.** or not the 
fae0: 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69  specified encodi
faf0: 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59  ng is SQLITE_ANY
fb00: 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70  ). The FuncDef.p
fb10: 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65  Destructor.** me
fb20: 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20  mber of each of 
fb30: 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20  the new FuncDef 
fb40: 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74  objects is set t
fb50: 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61  o point to the a
fb60: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63  llocated.** Func
fb70: 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a  Destructor..**.*
fb80: 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68  * Thereafter, wh
fb90: 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75  en one of the Fu
fba0: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
fbb0: 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65   deleted, the re
fbc0: 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74  ference.** count
fbd0: 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20   on this object 
fbe0: 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20  is decremented. 
fbf0: 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20  When it reaches 
fc00: 30 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f  0, the destructo
fc10: 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20  r.** is invoked 
fc20: 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74  and the FuncDest
fc30: 72 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65  ructor structure
fc40: 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63   freed..*/.struc
fc50: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
fc60: 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20   {.  int nRef;. 
fc70: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
fc80: 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69  )(void *);.  voi
fc90: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b  d *pUserData;.};
fca0: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
fcb0: 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63   values for Func
fcc0: 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65  Def.flags.  Note
fcd0: 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54   that the _LENGT
fce0: 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a  H and _TYPEOF.**
fcf0: 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72   values must cor
fd00: 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41  respond to OPFLA
fd10: 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
fd20: 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
fd30: 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45  .  And.** SQLITE
fd40: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d  _FUNC_CONSTANT m
fd50: 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20  ust be the same 
fd60: 61 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d  as SQLITE_DETERM
fd70: 49 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a  INISTIC.  There.
fd80: 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20  ** are assert() 
fd90: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
fda0: 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79  e code to verify
fdb0: 20 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c   this..**.** Val
fdc0: 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
fdd0: 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73  enforced via ass
fde0: 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53  ert()):.**     S
fdf0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
fe00: 58 20 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d  X    ==  NC_MinM
fe10: 61 78 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46  axAgg      == SF
fe20: 5f 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20  _MinMaxAgg.**   
fe30: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45    SQLITE_FUNC_LE
fe40: 4e 47 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c  NGTH    ==  OPFL
fe50: 41 47 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20  AG_LENGTHARG.** 
fe60: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
fe70: 54 59 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50  TYPEOF    ==  OP
fe80: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a  FLAG_TYPEOFARG.*
fe90: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e  *     SQLITE_FUN
fea0: 43 5f 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20  C_CONSTANT  ==  
feb0: 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49  SQLITE_DETERMINI
fec0: 53 54 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50  STIC from the AP
fed0: 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  I.**     SQLITE_
fee0: 46 55 4e 43 5f 44 49 52 45 43 54 20 20 20 20 3d  FUNC_DIRECT    =
fef0: 3d 20 20 53 51 4c 49 54 45 5f 44 49 52 45 43 54  =  SQLITE_DIRECT
ff00: 4f 4e 4c 59 20 66 72 6f 6d 20 74 68 65 20 41 50  ONLY from the AP
ff10: 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  I.**     SQLITE_
ff20: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64  FUNC_ENCMASK   d
ff30: 65 70 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45  epends on SQLITE
ff40: 5f 55 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20  _UTF* macros in 
ff50: 74 68 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69  the API.*/.#defi
ff60: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  ne SQLITE_FUNC_E
ff70: 4e 43 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f  NCMASK  0x0003 /
ff80: 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  * SQLITE_UTF8, S
ff90: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72  QLITE_UTF16BE or
ffa0: 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66   UTF16LE */.#def
ffb0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
ffc0: 4c 49 4b 45 20 20 20 20 20 30 78 30 30 30 34 20  LIKE     0x0004 
ffd0: 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72  /* Candidate for
ffe0: 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69   the LIKE optimi
fff0: 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  zation */.#defin
10000 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41  e SQLITE_FUNC_CA
10010 53 45 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a  SE     0x0008 /*
10020 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20   Case-sensitive 
10030 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69  LIKE-type functi
10040 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
10050 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20  LITE_FUNC_EPHEM 
10060 20 20 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68     0x0010 /* Eph
10070 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20  emeral.  Delete 
10080 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65  with VDBE */.#de
10090 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
100a0 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30  _NEEDCOLL 0x0020
100b0 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75   /* sqlite3GetFu
100c0 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68  ncCollSeq() migh
100d0 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64  t be called*/.#d
100e0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
100f0 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34  C_LENGTH   0x004
10100 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65  0 /* Built-in le
10110 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  ngth() function 
10120 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
10130 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20  E_FUNC_TYPEOF   
10140 30 78 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0080 /* Built-
10150 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  in typeof() func
10160 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
10170 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e  SQLITE_FUNC_COUN
10180 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42  T    0x0100 /* B
10190 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29  uilt-in count(*)
101a0 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64   aggregate */.#d
101b0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
101c0 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30  C_COALESCE 0x020
101d0 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
101e0 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75  alesce() or ifnu
101f0 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ll() */.#define 
10200 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49  SQLITE_FUNC_UNLI
10210 4b 45 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42  KELY 0x0400 /* B
10220 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79  uilt-in unlikely
10230 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
10240 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
10250 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38  NC_CONSTANT 0x08
10260 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69  00 /* Constant i
10270 6e 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e  nputs give a con
10280 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a  stant output */.
10290 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
102a0 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31  UNC_MINMAX   0x1
102b0 30 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  000 /* True for 
102c0 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20  min() and max() 
102d0 61 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64  aggregates */.#d
102e0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
102f0 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30  C_SLOCHNG  0x200
10300 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67  0 /* "Slow Chang
10310 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61  e". Value consta
10320 6e 74 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20  nt during a.    
10330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10350 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20  ** single query 
10360 2d 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f  - might change o
10370 76 65 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65 66  ver time */.#def
10380 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
10390 41 46 46 49 4e 49 54 59 20 30 78 34 30 30 30 20  AFFINITY 0x4000 
103a0 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66 66 69  /* Built-in affi
103b0 6e 69 74 79 28 29 20 66 75 6e 63 74 69 6f 6e 20  nity() function 
103c0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
103d0 45 5f 46 55 4e 43 5f 4f 46 46 53 45 54 20 20 20  E_FUNC_OFFSET   
103e0 30 78 38 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x8000 /* Built-
103f0 69 6e 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74  in sqlite_offset
10400 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
10410 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
10420 4e 43 5f 57 49 4e 44 4f 57 20 20 20 30 78 30 30  NC_WINDOW   0x00
10430 30 31 30 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d  010000 /* Built-
10440 69 6e 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79 20 66  in window-only f
10450 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
10460 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 49  ne SQLITE_FUNC_I
10470 4e 54 45 52 4e 41 4c 20 30 78 30 30 30 34 30 30  NTERNAL 0x000400
10480 30 30 20 2f 2a 20 46 6f 72 20 75 73 65 20 62 79  00 /* For use by
10490 20 4e 65 73 74 65 64 50 61 72 73 65 28 29 20 6f   NestedParse() o
104a0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nly */.#define S
104b0 51 4c 49 54 45 5f 46 55 4e 43 5f 44 49 52 45 43  QLITE_FUNC_DIREC
104c0 54 20 20 20 30 78 30 30 30 38 30 30 30 30 20 2f  T   0x00080000 /
104d0 2a 20 4e 6f 74 20 66 6f 72 20 75 73 65 20 69 6e  * Not for use in
104e0 20 54 52 49 47 47 45 52 73 20 6f 72 20 56 49 45   TRIGGERs or VIE
104f0 57 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  Ws */.#define SQ
10500 4c 49 54 45 5f 46 55 4e 43 5f 53 55 42 54 59 50  LITE_FUNC_SUBTYP
10510 45 20 20 30 78 30 30 31 30 30 30 30 30 20 2f 2a  E  0x00100000 /*
10520 20 52 65 73 75 6c 74 20 6c 69 6b 65 6c 79 20 74   Result likely t
10530 6f 20 68 61 76 65 20 73 75 62 2d 74 79 70 65 20  o have sub-type 
10540 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  */../*.** The fo
10550 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61  llowing three ma
10560 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29  cros, FUNCTION()
10570 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64  , LIKEFUNC() and
10580 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65   AGGREGATE() are
10590 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61  .** used to crea
105a0 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  te the initializ
105b0 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63  ers for the Func
105c0 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a  Def structures..
105d0 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e  **.**   FUNCTION
105e0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
105f0 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
10600 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
10610 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
10620 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
10630 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
10640 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 69 6d   zName.**     im
10650 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66  plemented by C f
10660 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68  unction xFunc th
10670 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
10680 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a  arguments. The.*
10690 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73  *     value pass
106a0 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61  ed as iArg is ca
106b0 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20  st to a (void*) 
106c0 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62  and made availab
106d0 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65  le.**     as the
106e0 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
106f0 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
10700 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
10710 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61 72 67  n. If.**     arg
10720 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75  ument bNC is tru
10730 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49  e, then the SQLI
10740 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
10750 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a   flag is set..**
10760 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e 28  .**   VFUNCTION(
10770 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10780 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
10790 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54  *     Like FUNCT
107a0 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d  ION except it om
107b0 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46  its the SQLITE_F
107c0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61  UNC_CONSTANT fla
107d0 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e 43  g..**.**   DFUNC
107e0 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
107f0 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10800 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20  nc).**     Like 
10810 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20  FUNCTION except 
10820 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c  it omits the SQL
10830 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
10840 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20 20 20  T flag and.**   
10850 20 20 61 64 64 73 20 74 68 65 20 53 51 4c 49 54    adds the SQLIT
10860 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 66  E_FUNC_SLOCHNG f
10870 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72 20 64  lag.  Used for d
10880 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e 63 74  ate & time funct
10890 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e 64 20  ions.**     and 
108a0 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20 73  functions like s
108b0 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20  qlite_version() 
108c0 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67 65 2c  that can change,
108d0 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e 67 0a   but not during.
108e0 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c 65 20  **     a single 
108f0 71 75 65 72 79 2e 20 20 54 68 65 20 69 41 72 67  query.  The iArg
10900 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 20 54 68   is ignored.  Th
10910 65 20 75 73 65 72 2d 64 61 74 61 20 69 73 20 61  e user-data is a
10920 6c 77 61 79 73 20 73 65 74 0a 2a 2a 20 20 20 20  lways set.**    
10930 20 74 6f 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74   to a NULL point
10940 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70 61 72  er.  The bNC par
10950 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
10960 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 55 52 45  ed..**.**   PURE
10970 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  _DATE(zName, nAr
10980 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10990 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  unc).**     Used
109a0 20 66 6f 72 20 22 70 75 72 65 22 20 64 61 74 65   for "pure" date
109b0 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 2c  /time functions,
109c0 20 74 68 69 73 20 6d 61 63 72 6f 20 69 73 20 6c   this macro is l
109d0 69 6b 65 20 44 46 55 4e 43 54 49 4f 4e 0a 2a 2a  ike DFUNCTION.**
109e0 20 20 20 20 20 65 78 63 65 70 74 20 74 68 61 74       except that
109f0 20 69 74 20 64 6f 65 73 20 73 65 74 20 74 68 65   it does set the
10a00 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
10a10 53 54 41 4e 54 20 66 6c 61 67 73 2e 20 20 69 41  STANT flags.  iA
10a20 72 67 20 69 73 0a 2a 2a 20 20 20 20 20 69 67 6e  rg is.**     ign
10a30 6f 72 65 64 20 61 6e 64 20 74 68 65 20 75 73 65  ored and the use
10a40 72 2d 64 61 74 61 20 66 6f 72 20 74 68 65 73 65  r-data for these
10a50 20 66 75 6e 63 74 69 6f 6e 73 20 69 73 20 73 65   functions is se
10a60 74 20 74 6f 20 61 6e 20 0a 2a 2a 20 20 20 20 20  t to an .**     
10a70 61 72 62 69 74 72 61 72 79 20 6e 6f 6e 2d 4e 55  arbitrary non-NU
10a80 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 65  LL pointer.  The
10a90 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72 20 69   bNC parameter i
10aa0 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a  s not used..**.*
10ab0 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e  *   AGGREGATE(zN
10ac0 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
10ad0 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69   bNC, xStep, xFi
10ae0 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  nal).**     Used
10af0 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
10b00 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10b10 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
10b20 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
10b30 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
10b40 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
10b50 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
10b60 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
10b70 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
10b80 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
10b90 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
10ba0 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
10bb0 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
10bc0 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 57 46 55  N()..**.**   WFU
10bd0 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
10be0 72 67 2c 20 69 41 72 67 2c 20 78 53 74 65 70 2c  rg, iArg, xStep,
10bf0 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c   xFinal, xValue,
10c00 20 78 49 6e 76 65 72 73 65 29 0a 2a 2a 20 20 20   xInverse).**   
10c10 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
10c20 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75   an aggregate fu
10c30 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
10c40 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  n implemented by
10c50 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75  .**     the C fu
10c60 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e  nctions xStep an
10c70 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69  d xFinal. The fi
10c80 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74  rst four paramet
10c90 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69  ers.**     are i
10ca0 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68  nterpreted in th
10cb0 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68  e same way as th
10cc0 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65  e first 4 parame
10cd0 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46  ters to.**     F
10ce0 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a  UNCTION()..**.**
10cf0 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d     LIKEFUNC(zNam
10d00 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66  e, nArg, pArg, f
10d10 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65  lags).**     Use
10d20 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
10d30 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
10d40 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
10d50 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20  nction zName.** 
10d60 20 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73      that accepts
10d70 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20   nArg arguments 
10d80 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  and is implement
10d90 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20  ed by a call to 
10da0 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f  C.**     functio
10db0 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75  n likeFunc. Argu
10dc0 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73  ment pArg is cas
10dd0 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20  t to a (void *) 
10de0 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20  and made.**     
10df0 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65  available as the
10e00 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64   function user-d
10e10 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
10e20 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a  r_data()). The.*
10e30 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c  *     FuncDef.fl
10e40 61 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20  ags variable is 
10e50 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
10e60 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
10e70 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61  lags.**     para
10e80 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  meter..*/.#defin
10e90 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  e FUNCTION(zName
10ea0 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
10eb0 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
10ec0 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
10ed0 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
10ee0 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
10ef0 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
10f00 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
10f10 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
10f20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
10f30 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
10f40 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49  .#define VFUNCTI
10f50 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
10f60 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
10f70 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
10f80 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
10f90 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
10fa0 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
10fb0 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
10fc0 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
10fd0 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  0, 0, #zName, {0
10fe0 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e  } }.#define DFUN
10ff0 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
11000 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
11010 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
11020 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
11030 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 2c  HNG|SQLITE_UTF8,
11040 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75 6e   \.   0, 0, xFun
11050 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  c, 0, 0, 0, #zNa
11060 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
11070 65 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d  e PURE_DATE(zNam
11080 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
11090 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
110a0 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
110b0 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45  C_SLOCHNG|SQLITE
110c0 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e  _UTF8|SQLITE_FUN
110d0 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20  C_CONSTANT, \.  
110e0 20 28 76 6f 69 64 2a 29 26 73 71 6c 69 74 65 33   (void*)&sqlite3
110f0 43 6f 6e 66 69 67 2c 20 30 2c 20 78 46 75 6e 63  Config, 0, xFunc
11100 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  , 0, 0, 0, #zNam
11110 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
11120 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65   FUNCTION2(zName
11130 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
11140 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46  C, xFunc, extraF
11150 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
11160 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
11170 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
11180 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
11190 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
111a0 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49  aFlags,\.   SQLI
111b0 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
111c0 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
111d0 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
111e0 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53 54  {0} }.#define ST
111f0 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  R_FUNCTION(zName
11200 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e  , nArg, pArg, bN
11210 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
11220 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
11230 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f  _SLOCHNG|SQLITE_
11240 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
11250 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
11260 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78   \.   pArg, 0, x
11270 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23  Func, 0, 0, 0, #
11280 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65  zName, }.#define
11290 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
112a0 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67   nArg, arg, flag
112b0 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
112c0 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
112d0 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66  NT|SQLITE_UTF8|f
112e0 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64  lags, \.   (void
112f0 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46   *)arg, 0, likeF
11300 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
11310 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
11320 69 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e  ine AGGREGATE(zN
11330 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
11340 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
11350 6c 2c 20 78 56 61 6c 75 65 29 20 5c 0a 20 20 7b  l, xValue) \.  {
11360 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
11370 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
11380 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
11390 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
113a0 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74  PTR(arg), 0, xSt
113b0 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c 75 65  ep,xFinal,xValue
113c0 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a  ,0,#zName, {0}}.
113d0 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54  #define AGGREGAT
113e0 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  E2(zName, nArg, 
113f0 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20  arg, nc, xStep, 
11400 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61  xFinal, extraFla
11410 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  gs) \.  {nArg, S
11420 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53  QLITE_UTF8|(nc*S
11430 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
11440 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c  OLL)|extraFlags,
11450 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
11460 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c  _TO_PTR(arg), 0,
11470 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 46   xStep,xFinal,xF
11480 69 6e 61 6c 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b  inal,0,#zName, {
11490 30 7d 7d 0a 23 64 65 66 69 6e 65 20 57 41 47 47  0}}.#define WAGG
114a0 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  REGATE(zName, nA
114b0 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
114c0 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c  ep, xFinal, xVal
114d0 75 65 2c 20 78 49 6e 76 65 72 73 65 2c 20 66 29  ue, xInverse, f)
114e0 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
114f0 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
11500 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
11510 29 7c 66 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  )|f, \.   SQLITE
11520 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29  _INT_TO_PTR(arg)
11530 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61  , 0, xStep,xFina
11540 6c 2c 78 56 61 6c 75 65 2c 78 49 6e 76 65 72 73  l,xValue,xInvers
11550 65 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23  e,#zName, {0}}.#
11560 64 65 66 69 6e 65 20 49 4e 54 45 52 4e 41 4c 5f  define INTERNAL_
11570 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
11580 6e 41 72 67 2c 20 78 46 75 6e 63 29 20 5c 0a 20  nArg, xFunc) \. 
11590 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
115a0 55 4e 43 5f 49 4e 54 45 52 4e 41 4c 7c 53 51 4c  UNC_INTERNAL|SQL
115b0 49 54 45 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f  ITE_UTF8|SQLITE_
115c0 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c  FUNC_CONSTANT, \
115d0 0a 20 20 20 30 2c 20 30 2c 20 78 46 75 6e 63 2c  .   0, 0, xFunc,
115e0 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65   0, 0, 0, #zName
115f0 2c 20 7b 30 7d 20 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  , {0} }.../*.** 
11600 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65  All current save
11610 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65  points are store
11620 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
11630 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a  st starting at.*
11640 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70  * sqlite3.pSavep
11650 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20  oint. The first 
11660 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c  element in the l
11670 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ist is the most 
11680 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e  recently.** open
11690 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61  ed savepoint. Sa
116a0 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64  vepoints are add
116b0 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62  ed to the list b
116c0 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50  y the vdbe.** OP
116d0 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
116e0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  uction..*/.struc
116f0 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20  t Savepoint {.  
11700 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
11710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11720 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74      /* Savepoint
11730 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69   name (nul-termi
11740 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20  nated) */.  i64 
11750 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
11760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11770 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
11780 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69  erred fk violati
11790 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ons */.  i64 nDe
117a0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
117b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
117c0 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
117d0 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20  ed imm fk. */.  
117e0 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74  Savepoint *pNext
117f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11800 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61      /* Parent sa
11810 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29  vepoint (if any)
11820 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
11830 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
11840 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f  used as the seco
11850 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  nd parameter to 
11860 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
11870 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68  (),.** and as th
11880 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
11890 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e   the OP_Savepoin
118a0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
118b0 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  /.#define SAVEPO
118c0 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30  INT_BEGIN      0
118d0 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
118e0 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a  NT_RELEASE    1.
118f0 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
11900 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a  T_ROLLBACK   2..
11910 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69  ./*.** Each SQLi
11920 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75  te module (virtu
11930 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  al table definit
11940 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20  ion) is defined 
11950 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
11960 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
11970 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73 74  ng structure, st
11980 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
11990 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68  te3.aModule.** h
119a0 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74  ash table..*/.st
119b0 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20  ruct Module {.  
119c0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
119d0 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20  dule *pModule;  
119e0 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
119f0 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63   pointers */.  c
11a00 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
11a10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11a20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73      /* Name pass
11a30 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
11a40 75 6c 65 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  ule() */.  int n
11a50 52 65 66 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  RefModule;      
11a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a70 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
11a80 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 6f 62  nters to this ob
11a90 6a 65 63 74 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ject */.  void *
11aa0 70 41 75 78 3b 20 20 20 20 20 20 20 20 20 20 20  pAux;           
11ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11ac0 2a 20 70 41 75 78 20 70 61 73 73 65 64 20 74 6f  * pAux passed to
11ad0 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
11ae0 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65   */.  void (*xDe
11af0 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20  stroy)(void *); 
11b00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
11b10 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20  dule destructor 
11b20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61  function */.  Ta
11b30 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20 20 20  ble *pEpoTab;   
11b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b50 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20     /* Eponymous 
11b60 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20 6d  table for this m
11b70 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  odule */.};../*.
11b80 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
11b90 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
11ba0 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   of an SQL table
11bb0 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69   is held in an i
11bc0 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
11bd0 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  is structure..*/
11be0 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b  .struct Column {
11bf0 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
11c00 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
11c10 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30  his column, \000
11c20 2c 20 74 68 65 6e 20 74 68 65 20 74 79 70 65 20  , then the type 
11c30 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74  */.  Expr *pDflt
11c40 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74  ;     /* Default
11c50 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
11c60 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20  olumn */.  char 
11c70 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43  *zColl;     /* C
11c80 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
11c90 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65  e.  If NULL, use
11ca0 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a   the default */.
11cb0 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20    u8 notNull;   
11cc0 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64     /* An OE_ cod
11cd0 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61  e for handling a
11ce0 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
11cf0 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61  aint */.  char a
11d00 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e  ffinity;   /* On
11d10 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f  e of the SQLITE_
11d20 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a  AFF_... values *
11d30 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20  /.  u8 szEst;   
11d40 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
11d50 64 20 73 69 7a 65 20 6f 66 20 76 61 6c 75 65 20  d size of value 
11d60 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20  in this column. 
11d70 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a  sizeof(INT)==1 *
11d80 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b  /.  u8 colFlags;
11d90 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20       /* Boolean 
11da0 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65  properties.  See
11db0 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65   COLFLAG_ define
11dc0 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f  s below */.};../
11dd0 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
11de0 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46   for Column.colF
11df0 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  lags:.*/.#define
11e00 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59   COLFLAG_PRIMKEY
11e10 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43    0x0001    /* C
11e20 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66  olumn is part of
11e30 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
11e40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46   */.#define COLF
11e50 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30  LAG_HIDDEN   0x0
11e60 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64  002    /* A hidd
11e70 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76  en column in a v
11e80 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
11e90 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
11ea0 48 41 53 54 59 50 45 20 20 30 78 30 30 30 34 20  HASTYPE  0x0004 
11eb0 20 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20     /* Type name 
11ec0 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e  follows column n
11ed0 61 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  ame */.#define C
11ee0 4f 4c 46 4c 41 47 5f 55 4e 49 51 55 45 20 20 20  OLFLAG_UNIQUE   
11ef0 30 78 30 30 30 38 20 20 20 20 2f 2a 20 43 6f 6c  0x0008    /* Col
11f00 75 6d 6e 20 64 65 66 20 63 6f 6e 74 61 69 6e 73  umn def contains
11f10 20 22 55 4e 49 51 55 45 22 20 6f 72 20 22 50 4b   "UNIQUE" or "PK
11f20 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  " */.#define COL
11f30 46 4c 41 47 5f 53 4f 52 54 45 52 52 45 46 20 30  FLAG_SORTERREF 0
11f40 78 30 30 31 30 20 20 20 2f 2a 20 55 73 65 20 73  x0010   /* Use s
11f50 6f 72 74 65 72 2d 72 65 66 73 20 77 69 74 68 20  orter-refs with 
11f60 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a  this column */..
11f70 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69  /*.** A "Collati
11f80 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20  ng Sequence" is 
11f90 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e  defined by an in
11fa0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
11fb0 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63  llowing.** struc
11fc0 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c  ture. Conceptual
11fd0 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  ly, a collating 
11fe0 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74  sequence consist
11ff0 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a  s of a name and.
12000 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20  ** a comparison 
12010 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66  routine that def
12020 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f  ines the order o
12030 66 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e  f that sequence.
12040 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65  .**.** If CollSe
12050 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20  q.xCmp is NULL, 
12060 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
12070 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  e.** collating s
12080 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66  equence is undef
12090 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62  ined.  Indices b
120a0 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66  uilt on an undef
120b0 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e  ined.** collatin
120c0 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e  g sequence may n
120d0 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72  ot be read or wr
120e0 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  itten..*/.struct
120f0 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61   CollSeq {.  cha
12100 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
12110 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
12120 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
12130 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f  ence, UTF-8 enco
12140 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ded */.  u8 enc;
12150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12160 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
12170 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28  handled by xCmp(
12180 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73  ) */.  void *pUs
12190 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
121a0 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
121b0 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e  o xCmp() */.  in
121c0 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c  t (*xCmp)(void*,
121d0 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
121e0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
121f0 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  d*);.  void (*xD
12200 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20  el)(void*);  /* 
12210 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70  Destructor for p
12220 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  User */.};../*.*
12230 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63  * A sort order c
12240 61 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43  an be either ASC
12250 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65   or DESC..*/.#de
12260 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41  fine SQLITE_SO_A
12270 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53  SC       0  /* S
12280 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
12290 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e   order */.#defin
122a0 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43  e SQLITE_SO_DESC
122b0 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74        1  /* Sort
122c0 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72   in ascending or
122d0 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  der */.#define S
122e0 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e  QLITE_SO_UNDEFIN
122f0 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74  ED -1 /* No sort
12300 20 6f 72 64 65 72 20 73 70 65 63 69 66 69 65 64   order specified
12310 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d   */../*.** Colum
12320 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73  n affinity types
12330 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73  ..**.** These us
12340 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f  ed to have mnemo
12350 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69  nic name like 'i
12360 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
12370 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20  _INTEGER and.** 
12380 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  't' for SQLITE_A
12390 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65  FF_TEXT.  But we
123a0 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74   can save a litt
123b0 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70  le space and imp
123c0 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65  rove.** the spee
123d0 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75  d a little by nu
123e0 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75  mbering the valu
123f0 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79  es consecutively
12400 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68  ..**.** But rath
12410 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69  er than start wi
12420 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65  th 0 or 1, we be
12430 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54  gin with 'A'.  T
12440 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e  hat way,.** when
12450 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69   multiple affini
12460 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e  ty types are con
12470 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61  catenated into a
12480 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75   string and.** u
12490 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70  sed as the P4 op
124a0 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c  erand, they will
124b0 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c   be more readabl
124c0 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c  e..**.** Note al
124d0 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65  so that the nume
124e0 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72  ric types are gr
124f0 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73  ouped together s
12500 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a  o that testing.*
12510 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20  * for a numeric 
12520 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65  type is a single
12530 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e   comparison.  An
12540 64 20 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20  d the BLOB type 
12550 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65  is first..*/.#de
12560 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
12570 4e 4f 4e 45 20 20 20 20 20 30 78 34 30 20 20 2f  NONE     0x40  /
12580 2a 20 27 40 27 20 2a 2f 0a 23 64 65 66 69 6e 65  * '@' */.#define
12590 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42   SQLITE_AFF_BLOB
125a0 20 20 20 20 20 30 78 34 31 20 20 2f 2a 20 27 41       0x41  /* 'A
125b0 27 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ' */.#define SQL
125c0 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20  ITE_AFF_TEXT    
125d0 20 30 78 34 32 20 20 2f 2a 20 27 42 27 20 2a 2f   0x42  /* 'B' */
125e0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
125f0 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 30 78 34  AFF_NUMERIC  0x4
12600 33 20 20 2f 2a 20 27 43 27 20 2a 2f 0a 23 64 65  3  /* 'C' */.#de
12610 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
12620 49 4e 54 45 47 45 52 20 20 30 78 34 34 20 20 2f  INTEGER  0x44  /
12630 2a 20 27 44 27 20 2a 2f 0a 23 64 65 66 69 6e 65  * 'D' */.#define
12640 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c   SQLITE_AFF_REAL
12650 20 20 20 20 20 30 78 34 35 20 20 2f 2a 20 27 45       0x45  /* 'E
12660 27 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 73 71  ' */..#define sq
12670 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66  lite3IsNumericAf
12680 66 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e  finity(X)  ((X)>
12690 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
126a0 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  RIC)../*.** The 
126b0 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
126c0 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66  values masks off
126d0 20 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74   the significant
126e0 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61   bits of an.** a
126f0 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 0a 2a  ffinity value..*
12700 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
12710 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78  _AFF_MASK     0x
12720 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69  47../*.** Additi
12730 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20  onal bit values 
12740 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64  that can be ORed
12750 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74   with an affinit
12760 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61  y without.** cha
12770 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  nging the affini
12780 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  ty..**.** The SQ
12790 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61  LITE_NOTNULL fla
127a0 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69  g is a combinati
127b0 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64  on of NULLEQ and
127c0 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20   JUMPIFNULL..** 
127d0 49 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73  It causes an ass
127e0 65 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66  ert() to fire if
127f0 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
12800 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a  to a comparison.
12810 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e  ** operator is N
12820 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65  ULL.  It is adde
12830 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d  d to certain com
12840 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72  parison operator
12850 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68  s to.** prove th
12860 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20  at the operands 
12870 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e  are always NOT N
12880 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ULL..*/.#define 
12890 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20  SQLITE_KEEPNULL 
128a0 20 20 20 20 30 78 30 38 20 20 2f 2a 20 55 73 65      0x08  /* Use
128b0 64 20 62 79 20 76 65 63 74 6f 72 20 3d 3d 20 6f  d by vector == o
128c0 72 20 3c 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  r <> */.#define 
128d0 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
128e0 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d  L   0x10  /* jum
128f0 70 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  ps if either ope
12900 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a  rand is NULL */.
12910 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
12920 54 4f 52 45 50 32 20 20 20 20 20 20 30 78 32 30  TOREP2      0x20
12930 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
12940 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74  t in reg[P2] rat
12950 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f  her than jump */
12960 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
12970 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38  NULLEQ       0x8
12980 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20  0  /* NULL=NULL 
12990 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
129a0 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30  E_NOTNULL      0
129b0 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74  x90  /* Assert t
129c0 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65  hat operands are
129d0 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a   never NULL */..
129e0 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20  /*.** An object 
129f0 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
12a00 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
12a10 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70   virtual table p
12a20 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65  resent in.** the
12a30 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
12a40 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64  ..**.** If the d
12a50 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
12a60 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74  s shared, then t
12a70 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74  here is one inst
12a80 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20  ance of this.** 
12a90 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61  structure for ea
12aa0 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
12ab0 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a  ection (sqlite3*
12ac0 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20  ) that uses the 
12ad0 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61  shared.** schema
12ae0 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73  . This is becaus
12af0 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  e each database 
12b00 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69  connection requi
12b10 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71  res its own uniq
12b20 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  ue.** instance o
12b30 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  f the sqlite3_vt
12b40 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20  ab* handle used 
12b50 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
12b60 72 74 75 61 6c 20 74 61 62 6c 65 0a 2a 2a 20 69  rtual table.** i
12b70 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73  mplementation. s
12b80 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
12b90 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20  dles can not be 
12ba0 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 0a 2a  shared between.*
12bb0 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * database conne
12bc0 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65  ctions, even whe
12bd0 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68  n the rest of th
12be0 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61  e in-memory data
12bf0 62 61 73 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69  base.** schema i
12c00 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68 65  s shared, as the
12c10 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
12c20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65  often stores the
12c30 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
12c40 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70  nection handle p
12c50 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61 20  assed to it via 
12c60 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f  the xConnect() o
12c70 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74 68  r xCreate() meth
12c80 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69  od.** during ini
12c90 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65  tialization inte
12ca0 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74  rnally. This dat
12cb0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12cc0 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74   handle may.** t
12cd0 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20 74  hen be used by t
12ce0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
12cf0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
12d00 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20 74  to access real t
12d10 61 62 6c 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20  ables.** within 
12d20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f  the database. So
12d30 20 74 68 61 74 20 74 68 65 79 20 61 70 70 65 61   that they appea
12d40 72 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  r as part of the
12d50 20 63 61 6c 6c 65 72 73 0a 2a 2a 20 74 72 61 6e   callers.** tran
12d60 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61  saction, these a
12d70 63 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20  ccesses need to 
12d80 62 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20  be made via the 
12d90 73 61 6d 65 20 64 61 74 61 62 61 73 65 0a 2a 2a  same database.**
12da0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74   connection as t
12db0 68 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63  hat used to exec
12dc0 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f  ute SQL operatio
12dd0 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  ns on the virtua
12de0 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  l table..**.** A
12df0 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  ll VTable object
12e00 73 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  s that correspon
12e10 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61  d to a single ta
12e20 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a  ble in a shared.
12e30 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ** database sche
12e40 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79  ma are initially
12e50 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
12e60 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64  ked-list pointed
12e70 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61   to by.** the Ta
12e80 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62  ble.pVTable memb
12e90 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74  er variable of t
12ea0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
12eb0 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a   Table object..*
12ec0 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65  * When an sqlite
12ed0 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72  3_prepare() oper
12ee0 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65  ation is require
12ef0 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
12f00 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
12f10 2c 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68  , it searches th
12f20 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56  e list for the V
12f30 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65  Table that corre
12f40 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a  sponds to the.**
12f50 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
12f60 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70  tion doing the p
12f70 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74  reparing so as t
12f80 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63  o use the correc
12f90 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61  t.** sqlite3_vta
12fa0 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65  b* handle in the
12fb0 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e   compiled query.
12fc0 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69  .**.** When an i
12fd0 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f  n-memory Table o
12fe0 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64  bject is deleted
12ff0 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68   (for example wh
13000 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  en the.** schema
13010 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64   is being reload
13020 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73  ed for some reas
13030 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20  on), the VTable 
13040 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 0a  objects are not.
13050 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74  ** deleted and t
13060 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  he sqlite3_vtab*
13070 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74   handles are not
13080 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64   xDisconnect()ed
13090 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  .** immediately.
130a0 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61   Instead, they a
130b0 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68  re moved from th
130c0 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
130d0 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68  list to.** anoth
130e0 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68  er linked list h
130f0 65 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c  eaded by the sql
13100 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
13110 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a   member of the.*
13120 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
13130 73 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72  sqlite3 structur
13140 65 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e  e. They are then
13150 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e   deleted/xDiscon
13160 6e 65 63 74 65 64 0a 2a 2a 20 6e 65 78 74 20 74  nected.** next t
13170 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ime a statement 
13180 69 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e  is prepared usin
13190 67 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e  g said sqlite3*.
131a0 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a   This is done.**
131b0 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f   to avoid deadlo
131c0 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76  ck issues involv
131d0 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c  ing multiple sql
131e0 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78  ite3.mutex mutex
131f0 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20  es..** Refer to 
13200 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66  comments above f
13210 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56  unction sqlite3V
13220 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20  tabUnlockList() 
13230 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e  for an.** explan
13240 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20  ation as to why 
13250 69 74 20 69 73 20 73 61 66 65 20 74 6f 20 61 64  it is safe to ad
13260 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e  d an entry to an
13270 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e   sqlite3.pDiscon
13280 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74  nect.** list wit
13290 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65  hout holding the
132a0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73   corresponding s
132b0 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74  qlite3.mutex mut
132c0 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65  ex..**.** The me
132d0 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73  mory for objects
132e0 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
132f0 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65   always allocate
13300 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 44  d by.** sqlite3D
13310 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67  bMalloc(), using
13320 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
13330 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e  handle stored in
13340 20 56 54 61 62 6c 65 2e 64 62 20 61 73 0a 2a 2a   VTable.db as.**
13350 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d   the first argum
13360 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56  ent..*/.struct V
13370 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65  Table {.  sqlite
13380 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20  3 *db;          
13390 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
133a0 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63  connection assoc
133b0 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
133c0 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c  table */.  Modul
133d0 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20  e *pMod;        
133e0 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
133f0 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  to module implem
13400 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71  entation */.  sq
13410 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
13420 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  b;      /* Point
13430 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61  er to vtab insta
13440 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  nce */.  int nRe
13450 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f;              
13460 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13470 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73  pointers to this
13480 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
13490 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20  u8 bConstraint; 
134a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
134b0 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73  e if constraints
134c0 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a   are supported *
134d0 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69  /.  int iSavepoi
134e0 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
134f0 20 44 65 70 74 68 20 6f 66 20 74 68 65 20 53 41   Depth of the SA
13500 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f  VEPOINT stack */
13510 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74  .  VTable *pNext
13520 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
13530 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c  Next in linked l
13540 69 73 74 20 28 73 65 65 20 61 62 6f 76 65 29 20  ist (see above) 
13550 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
13560 20 73 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68   schema for each
13570 20 53 51 4c 20 74 61 62 6c 65 20 61 6e 64 20 76   SQL table and v
13580 69 65 77 20 69 73 20 72 65 70 72 65 73 65 6e 74  iew is represent
13590 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20  ed in memory.** 
135a0 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
135b0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
135c0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
135d0 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63  ruct Table {.  c
135e0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
135f0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
13600 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77  he table or view
13610 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43   */.  Column *aC
13620 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ol;        /* In
13630 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
13640 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
13650 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20   Index *pIndex; 
13660 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
13670 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20   SQL indexes on 
13680 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20  this table. */. 
13690 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
136a0 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f  ;     /* NULL fo
136b0 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74  r tables.  Point
136c0 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20  s to definition 
136d0 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20  if a view. */.  
136e0 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20  FKey *pFKey;    
136f0 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c       /* Linked l
13700 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69  ist of all forei
13710 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20  gn keys in this 
13720 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  table */.  char 
13730 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20  *zColAff;       
13740 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69  /* String defini
13750 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ng the affinity 
13760 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  of each column *
13770 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43  /.  ExprList *pC
13780 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20  heck;    /* All 
13790 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
137a0 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  s */.           
137b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
137c0 20 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64 20 61   ... also used a
137d0 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69  s column name li
137e0 73 74 20 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a  st in a VIEW */.
137f0 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20    int tnum;     
13800 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42         /* Root B
13810 54 72 65 65 20 70 61 67 65 20 66 6f 72 20 74 68  Tree page for th
13820 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 33  is table */.  u3
13830 32 20 6e 54 61 62 52 65 66 3b 20 20 20 20 20 20  2 nTabRef;      
13840 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13850 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73  pointers to this
13860 20 54 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20   Table */.  u32 
13870 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20  tabFlags;       
13880 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a   /* Mask of TF_*
13890 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 31 36   values */.  i16
138a0 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20   iPKey;         
138b0 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61    /* If not nega
138c0 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69  tive, use aCol[i
138d0 50 4b 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77  PKey] as the row
138e0 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c  id */.  i16 nCol
138f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
13900 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
13910 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
13920 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77  */.  LogEst nRow
13930 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74  LogEst;   /* Est
13940 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74  imated rows in t
13950 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69  able - from sqli
13960 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a  te_stat1 table *
13970 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62  /.  LogEst szTab
13980 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69  Row;     /* Esti
13990 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61  mated size of ea
139a0 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20  ch table row in 
139b0 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20  bytes */.#ifdef 
139c0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
139d0 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20  STMULT.  LogEst 
139e0 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a  costMult;     /*
139f0 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72   Cost multiplier
13a00 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20   for using this 
13a10 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  table */.#endif.
13a20 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20    u8 keyConf;   
13a30 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74         /* What t
13a40 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20  o do in case of 
13a50 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c  uniqueness confl
13a60 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a  ict on iPKey */.
13a70 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
13a80 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20  MIT_ALTERTABLE. 
13a90 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65   int addColOffse
13aa0 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20  t;    /* Offset 
13ab0 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  in CREATE TABLE 
13ac0 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65  stmt to add a ne
13ad0 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64  w column */.#end
13ae0 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
13af0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
13b00 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c  BLE.  int nModul
13b10 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75  eArg;      /* Nu
13b20 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
13b30 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20  s to the module 
13b40 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f  */.  char **azMo
13b50 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20  duleArg;  /* 0: 
13b60 6d 6f 64 75 6c 65 20 31 3a 20 73 63 68 65 6d 61  module 1: schema
13b70 20 32 3a 20 76 74 61 62 20 6e 61 6d 65 20 33 2e   2: vtab name 3.
13b80 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56 54  ..: args */.  VT
13b90 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20  able *pVTable;  
13ba0 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54     /* List of VT
13bb0 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f  able objects. */
13bc0 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65  .#endif.  Trigge
13bd0 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f  r *pTrigger;   /
13be0 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65  * List of trigge
13bf0 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63  rs stored in pSc
13c00 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61  hema */.  Schema
13c10 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f   *pSchema;     /
13c20 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f  * Schema that co
13c30 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c  ntains this tabl
13c40 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  e */.  Table *pN
13c50 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e  extZombie;  /* N
13c60 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65  ext on the Parse
13c70 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74  .pZombieTab list
13c80 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
13c90 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
13ca0 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e   Table.tabFlags.
13cb0 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64  .**.** TF_OOOHid
13cc0 64 65 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 74  den applies to t
13cd0 61 62 6c 65 73 20 6f 72 20 76 69 65 77 20 74 68  ables or view th
13ce0 61 74 20 68 61 76 65 20 68 69 64 64 65 6e 20 63  at have hidden c
13cf0 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 0a  olumns that are.
13d00 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e  ** followed by n
13d10 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  on-hidden column
13d20 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 43  s.  Example:  "C
13d30 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
13d40 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76  BLE x USING.** v
13d50 74 61 62 31 28 61 20 48 49 44 44 45 4e 2c 20 62  tab1(a HIDDEN, b
13d60 29 3b 22 2e 20 20 53 69 6e 63 65 20 22 62 22 20  );".  Since "b" 
13d70 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20  is a non-hidden 
13d80 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22 20 69  column but "a" i
13d90 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65  s hidden,.** the
13da0 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74   TF_OOOHidden at
13db0 74 72 69 62 75 74 65 20 77 6f 75 6c 64 20 61 70  tribute would ap
13dc0 70 6c 79 20 69 6e 20 74 68 69 73 20 63 61 73 65  ply in this case
13dd0 2e 20 20 53 75 63 68 20 74 61 62 6c 65 73 20 72  .  Such tables r
13de0 65 71 75 69 72 65 0a 2a 2a 20 73 70 65 63 69 61  equire.** specia
13df0 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e  l handling durin
13e00 67 20 49 4e 53 45 52 54 20 70 72 6f 63 65 73 73  g INSERT process
13e10 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ing..*/.#define 
13e20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20  TF_Readonly     
13e30 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20     0x0001    /* 
13e40 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d  Read-only system
13e50 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
13e60 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20  e TF_Ephemeral  
13e70 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f       0x0002    /
13e80 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74  * An ephemeral t
13e90 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
13ea0 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79  TF_HasPrimaryKey
13eb0 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20     0x0004    /* 
13ec0 54 61 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d  Table has a prim
13ed0 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  ary key */.#defi
13ee0 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d  ne TF_Autoincrem
13ef0 65 6e 74 20 20 20 30 78 30 30 30 38 20 20 20 20  ent   0x0008    
13f00 2f 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61  /* Integer prima
13f10 72 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e  ry key is autoin
13f20 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69  crement */.#defi
13f30 6e 65 20 54 46 5f 48 61 73 53 74 61 74 31 20 20  ne TF_HasStat1  
13f40 20 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20        0x0010    
13f50 2f 2a 20 6e 52 6f 77 4c 6f 67 45 73 74 20 73 65  /* nRowLogEst se
13f60 74 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  t from sqlite_st
13f70 61 74 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  at1 */.#define T
13f80 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20  F_WithoutRowid  
13f90 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 4e    0x0020    /* N
13fa0 6f 20 72 6f 77 69 64 2e 20 20 50 52 49 4d 41 52  o rowid.  PRIMAR
13fb0 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65 79  Y KEY is the key
13fc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4e   */.#define TF_N
13fd0 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 20 20 30  oVisibleRowid  0
13fe0 78 30 30 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75  x0040    /* No u
13ff0 73 65 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77  ser-visible "row
14000 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64  id" column */.#d
14010 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64  efine TF_OOOHidd
14020 65 6e 20 20 20 20 20 20 20 30 78 30 30 38 30 20  en       0x0080 
14030 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64     /* Out-of-Ord
14040 65 72 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  er hidden column
14050 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  s */.#define TF_
14060 53 74 61 74 73 55 73 65 64 20 20 20 20 20 20 20  StatsUsed       
14070 30 78 30 31 30 30 20 20 20 20 2f 2a 20 51 75 65  0x0100    /* Que
14080 72 79 20 70 6c 61 6e 6e 65 72 20 64 65 63 69 73  ry planner decis
14090 69 6f 6e 73 20 61 66 66 65 63 74 65 64 20 62 79  ions affected by
140a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
140b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140c0 20 20 20 20 20 20 2a 2a 20 49 6e 64 65 78 2e 61        ** Index.a
140d0 69 52 6f 77 4c 6f 67 45 73 74 5b 5d 20 76 61 6c  iRowLogEst[] val
140e0 75 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ues */.#define T
140f0 46 5f 48 61 73 4e 6f 74 4e 75 6c 6c 20 20 20 20  F_HasNotNull    
14100 20 20 30 78 30 32 30 30 20 20 20 20 2f 2a 20 43    0x0200    /* C
14110 6f 6e 74 61 69 6e 73 20 4e 4f 54 20 4e 55 4c 4c  ontains NOT NULL
14120 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
14130 23 64 65 66 69 6e 65 20 54 46 5f 53 68 61 64 6f  #define TF_Shado
14140 77 20 20 20 20 20 20 20 20 20 20 30 78 30 34 30  w          0x040
14150 30 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  0    /* True for
14160 20 61 20 73 68 61 64 6f 77 20 74 61 62 6c 65 20   a shadow table 
14170 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74  */../*.** Test t
14180 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72  o see whether or
14190 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20   not a table is 
141a0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
141b0 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e    This is.** don
141c0 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20  e as a macro so 
141d0 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20  that it will be 
141e0 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68  optimized out wh
141f0 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  en virtual.** ta
14200 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f  ble support is o
14210 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
14220 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  build..*/.#ifnde
14230 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
14240 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65  RTUALTABLE.#  de
14250 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58  fine IsVirtual(X
14260 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6e 4d 6f  )      ((X)->nMo
14270 64 75 6c 65 41 72 67 29 0a 23 65 6c 73 65 0a 23  duleArg).#else.#
14280 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
14290 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 65 6e  al(X)      0.#en
142a0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f  dif../*.** Macro
142b0 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69  s to determine i
142c0 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68 69  f a column is hi
142d0 64 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61 72  dden.  IsOrdinar
142e0 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 0a  yHiddenColumn().
142f0 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  ** only works fo
14300 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74 61  r non-virtual ta
14310 62 6c 65 73 20 28 6f 72 64 69 6e 61 72 79 20 74  bles (ordinary t
14320 61 62 6c 65 73 20 61 6e 64 20 76 69 65 77 73 29  ables and views)
14330 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61 79   and is.** alway
14340 73 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20 53  s false unless S
14350 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44  QLITE_ENABLE_HID
14360 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20 64  DEN_COLUMNS is d
14370 65 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a 20  efined.  The.** 
14380 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29  IsHiddenColumn()
14390 20 6d 61 63 72 6f 20 69 73 20 67 65 6e 65 72 61   macro is genera
143a0 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23 69  l purpose..*/.#i
143b0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
143c0 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43  _ENABLE_HIDDEN_C
143d0 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66 69 6e  OLUMNS).#  defin
143e0 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
143f0 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58  (X)         (((X
14400 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
14410 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
14420 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  ).#  define IsOr
14430 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
14440 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c  mn(X) (((X)->col
14450 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
14460 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 69  HIDDEN)!=0).#eli
14470 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
14480 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
14490 42 4c 45 29 0a 23 20 20 64 65 66 69 6e 65 20 49  BLE).#  define I
144a0 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
144b0 20 20 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e           (((X)->
144c0 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
144d0 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
144e0 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e    define IsOrdin
144f0 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28  aryHiddenColumn(
14500 58 29 20 30 0a 23 65 6c 73 65 0a 23 20 20 64 65  X) 0.#else.#  de
14510 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
14520 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 30  umn(X)         0
14530 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64  .#  define IsOrd
14540 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
14550 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a  n(X) 0.#endif...
14560 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c  /* Does the tabl
14570 65 20 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a  e have a rowid *
14580 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77  /.#define HasRow
14590 69 64 28 58 29 20 20 20 20 20 28 28 28 58 29 2d  id(X)     (((X)-
145a0 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57  >tabFlags & TF_W
145b0 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29  ithoutRowid)==0)
145c0 0a 23 64 65 66 69 6e 65 20 56 69 73 69 62 6c 65  .#define Visible
145d0 52 6f 77 69 64 28 58 29 20 28 28 28 58 29 2d 3e  Rowid(X) (((X)->
145e0 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 4e 6f  tabFlags & TF_No
145f0 56 69 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d 30  VisibleRowid)==0
14600 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f  )../*.** Each fo
14610 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
14620 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61  aint is an insta
14630 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
14640 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
14650 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20  **.** A foreign 
14660 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61 74 65  key is associate
14670 64 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65  d with two table
14680 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74  s.  The "from" t
14690 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74  able is.** the t
146a0 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  able that contai
146b0 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  ns the REFERENCE
146c0 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 72  S clause that cr
146d0 65 61 74 65 73 20 74 68 65 20 66 6f 72 65 69 67  eates the foreig
146e0 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22  n.** key.  The "
146f0 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68 65  to" table is the
14700 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e   table that is n
14710 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46 45  amed in the REFE
14720 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a  RENCES clause..*
14730 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20  * Consider this 
14740 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20  example:.**.**  
14750 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
14760 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20  ex1(.**       a 
14770 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
14780 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20  KEY,.**       b 
14790 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49  INTEGER CONSTRAI
147a0 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45  NT fk1 REFERENCE
147b0 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20  S ex2(x).**     
147c0 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72  );.**.** For for
147d0 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20  eign key "fk1", 
147e0 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
147f0 73 20 22 65 78 31 22 20 61 6e 64 20 74 68 65 20  s "ex1" and the 
14800 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32  to-table is "ex2
14810 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74  "..** Equivalent
14820 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20   names:.**.**   
14830 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20    from-table == 
14840 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20  child-table.**  
14850 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d       to-table ==
14860 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a   parent-table.**
14870 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e  .** Each REFEREN
14880 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72  CES clause gener
14890 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  ates an instance
148a0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
148b0 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77  g structure.** w
148c0 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64  hich is attached
148d0 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62   to the from-tab
148e0 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c  le.  The to-tabl
148f0 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74  e need not exist
14900 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f   when.** the fro
14910 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  m-table is creat
14920 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e  ed.  The existen
14930 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62  ce of the to-tab
14940 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65  le is not checke
14950 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73  d..**.** The lis
14960 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73  t of all parents
14970 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65   for child Table
14980 20 58 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e   X is held at X.
14990 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c  pFKey..**.** A l
149a0 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64  ist of all child
149b0 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20  ren for a table 
149c0 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d  named Z (which m
149d0 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78  ight not even ex
149e0 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20  ist).** is held 
149f0 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61  in Schema.fkeyHa
14a00 73 68 20 77 69 74 68 20 61 20 68 61 73 68 20 6b  sh with a hash k
14a10 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75  ey of Z..*/.stru
14a20 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c  ct FKey {.  Tabl
14a30 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a  e *pFrom;     /*
14a40 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e   Table containin
14a50 67 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  g the REFERENCES
14a60 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68   clause (aka: Ch
14a70 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  ild) */.  FKey *
14a80 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e  pNextFrom;  /* N
14a90 65 78 74 20 46 4b 65 79 20 77 69 74 68 20 74 68  ext FKey with th
14aa0 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e  e same in pFrom.
14ab0 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20   Next parent of 
14ac0 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20  pFrom */.  char 
14ad0 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20  *zTo;        /* 
14ae0 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68  Name of table th
14af0 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74  at the key point
14b00 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e  s to (aka: Paren
14b10 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e  t) */.  FKey *pN
14b20 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78  extTo;    /* Nex
14b30 74 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  t with the same 
14b40 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20  zTo. Next child 
14b50 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65  of zTo. */.  FKe
14b60 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f  y *pPrevTo;    /
14b70 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74 68 20  * Previous with 
14b80 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a  the same zTo */.
14b90 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20    int nCol;     
14ba0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14bb0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
14bc0 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a   key */.  /* EV:
14bd0 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a   R-30323-21917 *
14be0 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65  /.  u8 isDeferre
14bf0 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65  d;       /* True
14c00 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63   if constraint c
14c10 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72  hecking is defer
14c20 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20  red till COMMIT 
14c30 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b  */.  u8 aAction[
14c40 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e  2];        /* ON
14c50 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55   DELETE and ON U
14c60 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72  PDATE actions, r
14c70 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20  espectively */. 
14c80 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69 67   Trigger *apTrig
14c90 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65  ger[2];/* Trigge
14ca0 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d  rs for aAction[]
14cb0 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74   actions */.  st
14cc0 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20  ruct sColMap {  
14cd0 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f      /* Mapping o
14ce0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72  f columns in pFr
14cf0 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e  om to columns in
14d00 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20   zTo */.    int 
14d10 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20  iFrom;          
14d20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f    /* Index of co
14d30 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f  lumn in pFrom */
14d40 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b  .    char *zCol;
14d50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
14d60 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20  me of column in 
14d70 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73  zTo.  If NULL us
14d80 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  e PRIMARY KEY */
14d90 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20  .  } aCol[1];   
14da0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
14db0 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f  entry for each o
14dc0 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a  f nCol columns *
14dd0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69  /.};../*.** SQLi
14de0 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79  te supports many
14df0 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20   different ways 
14e00 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e  to resolve a con
14e10 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72  straint.** error
14e20 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63  .  ROLLBACK proc
14e30 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61  essing means tha
14e40 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  t a constraint v
14e50 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73  iolation.** caus
14e60 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  es the operation
14e70 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66   in process to f
14e80 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20  ail and for the 
14e90 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
14ea0 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c  ion.** to be rol
14eb0 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54  led back.  ABORT
14ec0 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
14ed0 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  s the operation 
14ee0 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61  in process.** fa
14ef0 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f  ils and any prio
14f00 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74  r changes from t
14f10 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f  hat one operatio
14f20 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74  n are backed out
14f30 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61  ,.** but the tra
14f40 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
14f50 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41  rolled back.  FA
14f60 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  IL processing me
14f70 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ans that.** the 
14f80 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
14f90 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20  gress stops and 
14fa0 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72  returns an error
14fb0 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f   code.  But prio
14fc0 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65  r.** changes due
14fd0 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65   to the same ope
14fe0 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62  ration are not b
14ff0 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f  acked out and no
15000 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63   rollback.** occ
15010 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61  urs.  IGNORE mea
15020 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72 74  ns that the part
15030 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20  icular row that 
15040 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74  caused the const
15050 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69  raint.** error i
15060 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f  s not inserted o
15070 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63  r updated.  Proc
15080 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
15090 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a   and no error.**
150a0 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52   is returned.  R
150b0 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61  EPLACE means tha
150c0 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61  t preexisting da
150d0 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74  tabase rows that
150e0 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49   caused.** a UNI
150f0 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  QUE constraint v
15100 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d  iolation are rem
15110 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68 65  oved so that the
15120 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a   new insert or.*
15130 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f  * update can pro
15140 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ceed.  Processin
15150 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
15160 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f  no error is repo
15170 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54  rted..**.** REST
15180 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61  RICT, SETNULL, a
15190 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69 6f  nd CASCADE actio
151a0 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f  ns apply only to
151b0 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a   foreign keys..*
151c0 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74 68  * RESTRICT is th
151d0 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20  e same as ABORT 
151e0 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f  for IMMEDIATE fo
151f0 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74  reign keys and t
15200 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f  he.** same as RO
15210 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52  LLBACK for DEFER
15220 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55  RED keys.  SETNU
15230 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  LL means that th
15240 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
15250 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e   is set to NULL.
15260 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20    CASCADE means 
15270 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72  that a DELETE or
15280 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a   UPDATE of the.*
15290 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  * referenced tab
152a0 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67  le row is propag
152b0 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f  ated into the ro
152c0 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  w that holds the
152d0 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e  .** foreign key.
152e0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  .**.** The follo
152f0 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61  wing symbolic va
15300 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f  lues are used to
15310 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79   record which ty
15320 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20  pe.** of action 
15330 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66  to take..*/.#def
15340 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20  ine OE_None     
15350 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20  0   /* There is 
15360 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f  no constraint to
15370 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e   check */.#defin
15380 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20  e OE_Rollback 1 
15390 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70    /* Fail the op
153a0 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c  eration and roll
153b0 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63  back the transac
153c0 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
153d0 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20  OE_Abort    2   
153e0 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e  /* Back out chan
153f0 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f  ges but do no ro
15400 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69  llback transacti
15410 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  on */.#define OE
15420 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a  _Fail     3   /*
15430 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74   Stop the operat
15440 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c  ion but leave al
15450 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  l prior changes 
15460 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67  */.#define OE_Ig
15470 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67  nore   4   /* Ig
15480 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20  nore the error. 
15490 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e  Do not do the IN
154a0 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
154b0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70  /.#define OE_Rep
154c0 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c  lace  5   /* Del
154d0 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63  ete existing rec
154e0 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53  ord, then do INS
154f0 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
15500 0a 23 64 65 66 69 6e 65 20 4f 45 5f 55 70 64 61  .#define OE_Upda
15510 74 65 20 20 20 36 20 20 20 2f 2a 20 50 72 6f 63  te   6   /* Proc
15520 65 73 73 20 61 73 20 61 20 44 4f 20 55 50 44 41  ess as a DO UPDA
15530 54 45 20 69 6e 20 61 6e 20 75 70 73 65 72 74 20  TE in an upsert 
15540 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  */.#define OE_Re
15550 73 74 72 69 63 74 20 37 20 20 20 2f 2a 20 4f 45  strict 7   /* OE
15560 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44  _Abort for IMMED
15570 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63  IATE, OE_Rollbac
15580 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a  k for DEFERRED *
15590 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
155a0 4e 75 6c 6c 20 20 38 20 20 20 2f 2a 20 53 65 74  Null  8   /* Set
155b0 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
155c0 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a   value to NULL *
155d0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
155e0 44 66 6c 74 20 20 39 20 20 20 2f 2a 20 53 65 74  Dflt  9   /* Set
155f0 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
15600 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65   value to its de
15610 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  fault */.#define
15620 20 4f 45 5f 43 61 73 63 61 64 65 20 20 31 30 20   OE_Cascade  10 
15630 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20   /* Cascade the 
15640 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
15650 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31  ne OE_Default  1
15660 31 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65  1  /* Do whateve
15670 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  r the default ac
15680 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a  tion is */.../*.
15690 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
156a0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
156b0 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
156c0 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74  sed as the first
156d0 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  .** argument to 
156e0 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f  sqlite3VdbeKeyCo
156f0 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65  mpare and is use
15700 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65  d to control the
15710 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  .** comparison o
15720 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20  f the two index 
15730 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  keys..**.** Note
15740 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72   that aSortOrder
15750 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68  [] and aColl[] h
15760 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f  ave nField+1 slo
15770 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72  ts.  There.** ar
15780 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66  e nField slots f
15790 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  or the columns o
157a0 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20  f an index then 
157b0 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a  one extra slot.*
157c0 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20  * for the rowid 
157d0 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  at the end..*/.s
157e0 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a  truct KeyInfo {.
157f0 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20    u32 nRef;     
15800 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
15810 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  of references to
15820 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62   this KeyInfo ob
15830 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63  ject */.  u8 enc
15840 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
15850 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d   Text encoding -
15860 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   one of the SQLI
15870 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a  TE_UTF* values *
15880 2f 0a 20 20 75 31 36 20 6e 4b 65 79 46 69 65 6c  /.  u16 nKeyFiel
15890 64 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  d;      /* Numbe
158a0 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73  r of key columns
158b0 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
158c0 0a 20 20 75 31 36 20 6e 41 6c 6c 46 69 65 6c 64  .  u16 nAllField
158d0 3b 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20  ;      /* Total 
158e0 63 6f 6c 75 6d 6e 73 2c 20 69 6e 63 6c 75 64 69  columns, includi
158f0 6e 67 20 6b 65 79 20 70 6c 75 73 20 6f 74 68 65  ng key plus othe
15900 72 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  rs */.  sqlite3 
15910 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  *db;        /* T
15920 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
15930 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a  ection */.  u8 *
15940 61 53 6f 72 74 46 6c 61 67 73 3b 20 20 20 20 20  aSortFlags;     
15950 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f  /* Sort order fo
15960 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a  r each column. *
15970 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f  /.  CollSeq *aCo
15980 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61  ll[1];  /* Colla
15990 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f  ting sequence fo
159a0 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74  r each term of t
159b0 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  he key */.};../*
159c0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 62 69 74 20  .** Allowed bit 
159d0 76 61 6c 75 65 73 20 66 6f 72 20 65 6e 74 72 69  values for entri
159e0 65 73 20 69 6e 20 74 68 65 20 4b 65 79 49 6e 66  es in the KeyInf
159f0 6f 2e 61 53 6f 72 74 46 6c 61 67 73 5b 5d 20 61  o.aSortFlags[] a
15a00 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  rray..*/.#define
15a10 20 4b 45 59 49 4e 46 4f 5f 4f 52 44 45 52 5f 44   KEYINFO_ORDER_D
15a20 45 53 43 20 20 20 20 30 78 30 31 20 20 20 20 2f  ESC    0x01    /
15a30 2a 20 44 45 53 43 20 73 6f 72 74 20 6f 72 64 65  * DESC sort orde
15a40 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4b 45 59  r */.#define KEY
15a50 49 4e 46 4f 5f 4f 52 44 45 52 5f 42 49 47 4e 55  INFO_ORDER_BIGNU
15a60 4c 4c 20 30 78 30 32 20 20 20 20 2f 2a 20 4e 55  LL 0x02    /* NU
15a70 4c 4c 20 69 73 20 6c 61 72 67 65 72 20 74 68 61  LL is larger tha
15a80 6e 20 61 6e 79 20 6f 74 68 65 72 20 76 61 6c 75  n any other valu
15a90 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  e */../*.** This
15aa0 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20   object holds a 
15ab0 72 65 63 6f 72 64 20 77 68 69 63 68 20 68 61 73  record which has
15ac0 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74   been parsed out
15ad0 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c   into individual
15ae0 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20  .** fields, for 
15af0 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
15b00 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73  doing a comparis
15b10 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f  on..**.** A reco
15b20 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20  rd is an object 
15b30 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  that contains on
15b40 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73  e or more fields
15b50 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63   of data..** Rec
15b60 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f  ords are used to
15b70 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65   store the conte
15b80 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f  nt of a table ro
15b90 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a  w and to store.*
15ba0 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20  * the key of an 
15bb0 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65  index.  A blob e
15bc0 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63  ncoding of a rec
15bd0 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62  ord is created b
15be0 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65  y.** the OP_Make
15bf0 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66  Record opcode of
15c00 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73   the VDBE and is
15c10 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79   disassembled by
15c20 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d   the.** OP_Colum
15c30 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  n opcode..**.** 
15c40 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
15c50 68 69 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65  his object serve
15c60 73 20 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72  s as a "key" for
15c70 20 64 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20   doing a search 
15c80 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62  on.** an index b
15c90 2b 74 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20  +tree. The goal 
15ca0 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 69 73  of the search is
15cb0 20 74 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74   to find the ent
15cc0 72 79 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c  ry that.** is cl
15cd0 6f 73 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20  osed to the key 
15ce0 64 65 73 63 72 69 62 65 64 20 62 79 20 74 68 69  described by thi
15cf0 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20  s object.  This 
15d00 6f 62 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c  object might hol
15d10 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66  d.** just a pref
15d20 69 78 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20  ix of the key.  
15d30 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69  The number of fi
15d40 65 6c 64 73 20 69 73 20 67 69 76 65 6e 20 62 79  elds is given by
15d50 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  .** pKeyInfo->nF
15d60 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ield..**.** The 
15d70 72 31 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73  r1 and r2 fields
15d80 20 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20   are the values 
15d90 74 6f 20 72 65 74 75 72 6e 20 69 66 20 74 68 69  to return if thi
15da0 73 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68  s key is less th
15db0 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72  an.** or greater
15dc0 20 74 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74   than a key in t
15dd0 68 65 20 62 74 72 65 65 2c 20 72 65 73 70 65 63  he btree, respec
15de0 74 69 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61  tively.  These a
15df0 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d  re normally.** -
15e00 31 20 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74  1 and +1 respect
15e10 69 76 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74  ively, but might
15e20 20 62 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20   be inverted to 
15e30 2b 31 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65  +1 and -1 if the
15e40 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e   b-tree.** is in
15e50 20 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a   DESC order..**.
15e60 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61  ** The key compa
15e70 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  rison functions 
15e80 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20  actually return 
15e90 64 65 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20  default_rc when 
15ea0 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20  they find.** an 
15eb0 65 71 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f  equals compariso
15ec0 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63  n.  default_rc c
15ed0 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20  an be -1, 0, or 
15ee0 2b 31 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  +1.  If there ar
15ef0 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e  e.** multiple en
15f00 74 72 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74  tries in the b-t
15f10 72 65 65 20 77 69 74 68 20 74 68 65 20 73 61 6d  ree with the sam
15f20 65 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79  e key (when only
15f30 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74   looking.** at t
15f40 68 65 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66  he first pKeyInf
15f50 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65  o->nFields,) the
15f60 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e  n default_rc can
15f70 20 62 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f   be set to -1 to
15f80 0a 2a 2a 20 63 61 75 73 65 20 74 68 65 20 73 65  .** cause the se
15f90 61 72 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65  arch to find the
15fa0 20 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20   last match, or 
15fb0 2b 31 20 74 6f 20 63 61 75 73 65 20 74 68 65 20  +1 to cause the 
15fc0 73 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e  search to.** fin
15fd0 64 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63  d the first matc
15fe0 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79  h..**.** The key
15ff0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63   comparison func
16000 74 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65  tions will set e
16010 71 53 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66  qSeen to true if
16020 20 74 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65   they ever.** ge
16030 74 20 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75  t and equal resu
16040 6c 74 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69  lts when compari
16050 6e 67 20 74 68 69 73 20 73 74 72 75 63 74 75 72  ng this structur
16060 65 20 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65  e to a b-tree re
16070 63 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65  cord..** When de
16080 66 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65  fault_rc!=0, the
16090 20 73 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e   search might en
160a0 64 20 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f  d up on the reco
160b0 72 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a  rd immediately.*
160c0 2a 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72  * before the fir
160d0 73 74 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65  st match or imme
160e0 64 69 61 74 65 6c 79 20 61 66 74 65 72 20 74 68  diately after th
160f0 65 20 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54  e last match.  T
16100 68 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65  he.** eqSeen fie
16110 6c 64 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65  ld will indicate
16120 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
16130 61 6e 20 65 78 61 63 74 20 6d 61 74 63 68 20 65  an exact match e
16140 78 69 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20  xists in the.** 
16150 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63  b-tree..*/.struc
16160 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
16170 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b   {.  KeyInfo *pK
16180 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c  eyInfo;  /* Coll
16190 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f  ation and sort-o
161a0 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  rder information
161b0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b   */.  Mem *aMem;
161c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
161d0 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69  ues */.  u16 nFi
161e0 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  eld;         /* 
161f0 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
16200 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a  s in apMem[] */.
16210 20 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b    i8 default_rc;
16220 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69        /* Compari
16230 73 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65  son result if ke
16240 79 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a  ys are equal */.
16250 20 20 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20    u8 errCode;   
16260 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64        /* Error d
16270 65 74 65 63 74 65 64 20 62 79 20 78 52 65 63 6f  etected by xReco
16280 72 64 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55  rdCompare (CORRU
16290 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a  PT or NOMEM) */.
162a0 20 20 69 38 20 72 31 3b 20 20 20 20 20 20 20 20    i8 r1;        
162b0 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
162c0 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73  o return if (lhs
162d0 20 3c 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20   < rhs) */.  i8 
162e0 72 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r2;             
162f0 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
16300 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68  urn if (lhs > rh
16310 73 29 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65  s) */.  u8 eqSee
16320 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
16330 72 75 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69  rue if an equali
16340 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61  ty comparison ha
16350 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d  s been seen */.}
16360 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  ;.../*.** Each S
16370 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72  QL index is repr
16380 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
16390 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  y by an.** insta
163a0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
163b0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
163c0 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e  **.** The column
163d0 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  s of the table t
163e0 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e  hat are to be in
163f0 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69  dexed are descri
16400 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69  bed.** by the ai
16410 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f  Column[] field o
16420 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
16430 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
16440 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61  suppose.** we ha
16450 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ve the following
16460 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78   table and index
16470 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41  :.**.**     CREA
16480 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20  TE TABLE Ex1(c1 
16490 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20  int, c2 int, c3 
164a0 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52  text);.**     CR
164b0 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f  EATE INDEX Ex2 O
164c0 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a  N Ex1(c3,c1);.**
164d0 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65  .** In the Table
164e0 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
164f0 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d  ibing Ex1, nCol=
16500 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65  =3 because there
16510 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f   are.** three co
16520 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
16530 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65  le.  In the Inde
16540 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  x structure desc
16550 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e  ribing.** Ex2, n
16560 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20  Column==2 since 
16570 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d  2 of the 3 colum
16580 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e  ns of Ex1 are in
16590 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61  dexed..** The va
165a0 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20  lue of aiColumn 
165b0 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f  is {2, 0}.  aiCo
165c0 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75  lumn[0]==2 becau
165d0 73 65 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20  se the.** first 
165e0 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
165f0 65 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e  exed (c3) has an
16600 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45   index of 2 in E
16610 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68  x1.aCol[]..** Th
16620 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20  e second column 
16630 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
16640 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  1) has an index 
16650 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61  of 0 in.** Ex1.a
16660 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32  Col[], hence Ex2
16670 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e  .aiColumn[1]==0.
16680 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78  .**.** The Index
16690 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64  .onError field d
166a0 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65  etermines whethe
166b0 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64  r or not the ind
166c0 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  exed columns.** 
166d0 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61  must be unique a
166e0 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66  nd what to do if
166f0 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20   they are not.  
16700 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72  When Index.onErr
16710 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69  or=OE_None,.** i
16720 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20  t means this is 
16730 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64  not a unique ind
16740 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69  ex.  Otherwise i
16750 74 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e  t is a unique in
16760 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76  dex.** and the v
16770 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e  alue of Index.on
16780 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74  Error indicate t
16790 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63  he which conflic
167a0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20  t resolution.** 
167b0 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70  algorithm to emp
167c0 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20  loy whenever an 
167d0 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
167e0 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d  to insert a non-
167f0 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e  unique.** elemen
16800 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70  t..**.** While p
16810 61 72 73 69 6e 67 20 61 20 43 52 45 41 54 45 20  arsing a CREATE 
16820 54 41 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20  TABLE or CREATE 
16830 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20  INDEX statement 
16840 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
16850 65 6e 65 72 61 74 65 20 56 44 42 45 20 63 6f 64  enerate VDBE cod
16860 65 20 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f  e (as opposed to
16870 20 70 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61   parsing one rea
16880 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65  d from an sqlite
16890 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65  _master.** table
168a0 20 61 73 20 70 61 72 74 20 6f 66 20 70 61 72 73   as part of pars
168b0 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20  ing an existing 
168c0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 29  database schema)
168d0 2c 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74  , transient inst
168e0 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73  ances.** of this
168f0 20 73 74 72 75 63 74 75 72 65 20 6d 61 79 20 62   structure may b
16900 65 20 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68  e created. In th
16910 69 73 20 63 61 73 65 20 74 68 65 20 49 6e 64 65  is case the Inde
16920 78 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20  x.tnum variable 
16930 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74  is.** used to st
16940 6f 72 65 20 74 68 65 20 61 64 64 72 65 73 73 20  ore the address 
16950 6f 66 20 61 20 56 44 42 45 20 69 6e 73 74 72 75  of a VDBE instru
16960 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74  ction, not a dat
16970 61 62 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75  abase page.** nu
16980 6d 62 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20  mber (it cannot 
16990 2d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70  - the database p
169a0 61 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63  age is not alloc
169b0 61 74 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56  ated until the V
169c0 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69  DBE.** program i
169d0 73 20 65 78 65 63 75 74 65 64 29 2e 20 53 65 65  s executed). See
169e0 20 63 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75   convertToWithou
169f0 74 52 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f  tRowidTable() fo
16a00 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74  r details..*/.st
16a10 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63  ruct Index {.  c
16a20 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
16a30 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
16a40 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  of this index */
16a50 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e  .  i16 *aiColumn
16a60 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
16a70 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65  hich columns are
16a80 20 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e   used by this in
16a90 64 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a  dex.  1st is 0 *
16aa0 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f  /.  LogEst *aiRo
16ab0 77 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20  wLogEst;     /* 
16ac0 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73  From ANALYZE: Es
16ad0 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64  t. rows selected
16ae0 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   by each column 
16af0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
16b00 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
16b10 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62   The SQL table b
16b20 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a  eing indexed */.
16b30 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b    char *zColAff;
16b40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
16b50 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
16b60 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
16b70 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
16b80 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20  ndex *pNext;    
16b90 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
16ba0 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69  ext index associ
16bb0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61  ated with the sa
16bc0 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63  me table */.  Sc
16bd0 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
16be0 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
16bf0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73   containing this
16c00 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a   index */.  u8 *
16c10 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  aSortOrder;     
16c20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68       /* for each
16c30 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44   column: True==D
16c40 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20  ESC, False==ASC 
16c50 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
16c60 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a  **azColl;     /*
16c70 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74   Array of collat
16c80 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d  ion sequence nam
16c90 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a  es for index */.
16ca0 20 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78    Expr *pPartIdx
16cb0 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48  Where;     /* WH
16cc0 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70  ERE clause for p
16cd0 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a  artial indices *
16ce0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43  /.  ExprList *aC
16cf0 6f 6c 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20  olExpr;      /* 
16d00 43 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f  Column expressio
16d10 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  ns */.  int tnum
16d20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
16d30 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74   /* DB Page cont
16d40 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74  aining root of t
16d50 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c  his index */.  L
16d60 6f 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20  ogEst szIdxRow; 
16d70 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
16d80 61 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77  ated average row
16d90 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a   size in bytes *
16da0 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b  /.  u16 nKeyCol;
16db0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16dc0 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
16dd0 73 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65  s forming the ke
16de0 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75  y */.  u16 nColu
16df0 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  mn;             
16e00 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
16e10 75 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74  umns stored in t
16e20 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38  he index */.  u8
16e30 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20   onError;       
16e40 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f         /* OE_Abo
16e50 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f  rt, OE_Ignore, O
16e60 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45  E_Replace, or OE
16e70 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67  _None */.  unsig
16e80 6e 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20  ned idxType:2;  
16e90 20 20 20 20 2f 2a 20 30 3a 4e 6f 72 6d 61 6c 20      /* 0:Normal 
16ea0 31 3a 55 4e 49 51 55 45 2c 20 32 3a 50 52 49 4d  1:UNIQUE, 2:PRIM
16eb0 41 52 59 20 4b 45 59 2c 20 33 3a 49 50 4b 20 2a  ARY KEY, 3:IPK *
16ec0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e  /.  unsigned bUn
16ed0 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20  ordered:1;   /* 
16ee0 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66  Use this index f
16ef0 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72  or == or IN quer
16f00 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e  ies only */.  un
16f10 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75  signed uniqNotNu
16f20 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  ll:1;  /* True i
16f30 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54  f UNIQUE and NOT
16f40 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f   NULL for all co
16f50 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67  lumns */.  unsig
16f60 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b  ned isResized:1;
16f70 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72      /* True if r
16f80 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74  esizeIndexObject
16f90 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
16fa0 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ed */.  unsigned
16fb0 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20   isCovering:1;  
16fc0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73   /* True if this
16fd0 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69   is a covering i
16fe0 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ndex */.  unsign
16ff0 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b  ed noSkipScan:1;
17000 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79     /* Do not try
17010 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61   to use skip-sca
17020 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75  n if true */.  u
17030 6e 73 69 67 6e 65 64 20 68 61 73 53 74 61 74 31  nsigned hasStat1
17040 3a 31 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77  :1;     /* aiRow
17050 4c 6f 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f  LogEst values co
17060 6d 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73  me from sqlite_s
17070 74 61 74 31 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  tat1 */.  unsign
17080 65 64 20 62 4e 6f 51 75 65 72 79 3a 31 3b 20 20  ed bNoQuery:1;  
17090 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65     /* Do not use
170a0 20 74 68 69 73 20 69 6e 64 65 78 20 74 6f 20 6f   this index to o
170b0 70 74 69 6d 69 7a 65 20 71 75 65 72 69 65 73 20  ptimize queries 
170c0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 41  */.  unsigned bA
170d0 73 63 4b 65 79 42 75 67 3a 31 3b 20 20 20 2f 2a  scKeyBug:1;   /*
170e0 20 54 72 75 65 20 69 66 20 74 68 65 20 62 62 61   True if the bba
170f0 37 62 36 39 66 39 38 34 39 62 35 62 66 20 62 75  7b69f9849b5bf bu
17100 67 20 61 70 70 6c 69 65 73 20 2a 2f 0a 23 69 66  g applies */.#if
17110 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
17120 45 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53  E_STAT4.  int nS
17130 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20  ample;          
17140 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17150 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d  elements in aSam
17160 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ple[] */.  int n
17170 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20  SampleCol;      
17180 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49      /* Size of I
17190 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b  ndexSample.anEq[
171a0 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20  ] and so on */. 
171b0 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71   tRowcnt *aAvgEq
171c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65  ;         /* Ave
171d0 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20  rage nEq values 
171e0 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20  for keys not in 
171f0 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64  aSample */.  Ind
17200 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c  exSample *aSampl
17210 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73  e;    /* Samples
17220 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73   of the left-mos
17230 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63  t key */.  tRowc
17240 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20  nt *aiRowEst;   
17250 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72      /* Non-logar
17260 69 74 68 6d 69 63 20 73 74 61 74 31 20 64 61 74  ithmic stat1 dat
17270 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78  a for this index
17280 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52   */.  tRowcnt nR
17290 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f  owEst0;        /
172a0 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69  * Non-logarithmi
172b0 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  c number of rows
172c0 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
172d0 0a 23 65 6e 64 69 66 0a 20 20 42 69 74 6d 61 73  .#endif.  Bitmas
172e0 6b 20 63 6f 6c 4e 6f 74 49 64 78 65 64 3b 20 20  k colNotIdxed;  
172f0 20 20 20 2f 2a 20 30 20 66 6f 72 20 75 6e 69 6e     /* 0 for unin
17300 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 20 69 6e  dexed columns in
17310 20 70 54 61 62 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   pTab */.};../*.
17320 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
17330 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54  s for Index.idxT
17340 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ype.*/.#define S
17350 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50  QLITE_IDXTYPE_AP
17360 50 44 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a  PDEF      0   /*
17370 20 43 72 65 61 74 65 64 20 75 73 69 6e 67 20 43   Created using C
17380 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23  REATE INDEX */.#
17390 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
173a0 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20  XTYPE_UNIQUE    
173b0 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65    1   /* Impleme
173c0 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e  nts a UNIQUE con
173d0 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
173e0 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
173f0 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20  E_PRIMARYKEY  2 
17400 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d    /* Is the PRIM
17410 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20  ARY KEY for the 
17420 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
17430 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
17440 49 50 4b 20 20 20 20 20 20 20 20 20 33 20 20 20  IPK         3   
17450 2f 2a 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  /* INTEGER PRIMA
17460 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a  RY KEY index */.
17470 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
17480 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20  if index X is a 
17490 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65  PRIMARY KEY inde
174a0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50  x */.#define IsP
174b0 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58  rimaryKeyIndex(X
174c0 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65  )  ((X)->idxType
174d0 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  ==SQLITE_IDXTYPE
174e0 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a  _PRIMARYKEY)../*
174f0 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
17500 69 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e 49  index X is a UNI
17510 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  QUE index */.#de
17520 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64  fine IsUniqueInd
17530 65 78 28 58 29 20 20 20 20 20 20 28 28 58 29 2d  ex(X)      ((X)-
17540 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e  >onError!=OE_Non
17550 65 29 0a 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78  e)../* The Index
17560 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75  .aiColumn[] valu
17570 65 73 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20  es are normally 
17580 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72  positive integer
17590 2e 20 20 42 75 74 0a 2a 2a 20 74 68 65 72 65 20  .  But.** there 
175a0 61 72 65 20 73 6f 6d 65 20 6e 65 67 61 74 69 76  are some negativ
175b0 65 20 76 61 6c 75 65 73 20 74 68 61 74 20 68 61  e values that ha
175c0 76 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69  ve special meani
175d0 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58  ng:.*/.#define X
175e0 4e 5f 52 4f 57 49 44 20 20 20 20 20 28 2d 31 29  N_ROWID     (-1)
175f0 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20       /* Indexed 
17600 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f  column is the ro
17610 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58  wid */.#define X
17620 4e 5f 45 58 50 52 20 20 20 20 20 20 28 2d 32 29  N_EXPR      (-2)
17630 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20       /* Indexed 
17640 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70  column is an exp
17650 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a  ression */../*.*
17660 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74  * Each sample st
17670 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
17680 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 69  te_stat4 table i
17690 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
176a0 20 6d 65 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67   memory.** using
176b0 20 61 20 73 74 72 75 63 74 75 72 65 20 6f 66 20   a structure of 
176c0 74 68 69 73 20 74 79 70 65 2e 20 20 53 65 65 20  this type.  See 
176d0 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74  documentation at
176e0 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a   the top of the.
176f0 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75  ** analyze.c sou
17700 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64  rce file for add
17710 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
17720 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ion..*/.struct I
17730 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76  ndexSample {.  v
17740 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20  oid *p;         
17750 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73   /* Pointer to s
17760 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f  ampled record */
17770 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20  .  int n;       
17780 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
17790 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20  record in bytes 
177a0 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
177b0 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e  Eq;    /* Est. n
177c0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68  umber of rows wh
177d0 65 72 65 20 74 68 65 20 6b 65 79 20 65 71 75 61  ere the key equa
177e0 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  ls this sample *
177f0 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c  /.  tRowcnt *anL
17800 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  t;    /* Est. nu
17810 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65  mber of rows whe
17820 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74  re key is less t
17830 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20  han this sample 
17840 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
17850 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e  DLt;   /* Est. n
17860 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63  umber of distinc
17870 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e  t keys less than
17880 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
17890 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  };../*.** Possib
178a0 6c 65 20 76 61 6c 75 65 73 20 74 6f 20 75 73 65  le values to use
178b0 20 77 69 74 68 69 6e 20 74 68 65 20 66 6c 61 67   within the flag
178c0 73 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71  s argument to sq
178d0 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 29 2e  lite3GetToken().
178e0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
178f0 54 45 5f 54 4f 4b 45 4e 5f 51 55 4f 54 45 44 20  TE_TOKEN_QUOTED 
17900 20 20 20 30 78 31 20 2f 2a 20 54 6f 6b 65 6e 20     0x1 /* Token 
17910 69 73 20 61 20 71 75 6f 74 65 64 20 69 64 65 6e  is a quoted iden
17920 74 69 66 69 65 72 2e 20 2a 2f 0a 23 64 65 66 69  tifier. */.#defi
17930 6e 65 20 53 51 4c 49 54 45 5f 54 4f 4b 45 4e 5f  ne SQLITE_TOKEN_
17940 4b 45 59 57 4f 52 44 20 20 20 30 78 32 20 2f 2a  KEYWORD   0x2 /*
17950 20 54 6f 6b 65 6e 20 69 73 20 61 20 6b 65 79 77   Token is a keyw
17960 6f 72 64 2e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  ord. */../*.** E
17970 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67  ach token coming
17980 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65   out of the lexe
17990 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  r is an instance
179a0 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75   of.** this stru
179b0 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61  cture.  Tokens a
179c0 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20  re also used as 
179d0 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65  part of an expre
179e0 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ssion..**.** The
179f0 20 6d 65 6d 6f 72 79 20 74 68 61 74 20 22 7a 22   memory that "z"
17a00 20 70 6f 69 6e 74 73 20 74 6f 20 69 73 20 6f 77   points to is ow
17a10 6e 65 64 20 62 79 20 6f 74 68 65 72 20 6f 62 6a  ned by other obj
17a20 65 63 74 73 2e 20 20 54 61 6b 65 20 63 61 72 65  ects.  Take care
17a30 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 77 6e  .** that the own
17a40 65 72 20 6f 66 20 74 68 65 20 22 7a 22 20 73 74  er of the "z" st
17a50 72 69 6e 67 20 64 6f 65 73 20 6e 6f 74 20 64 65  ring does not de
17a60 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 73 74 72  allocate the str
17a70 69 6e 67 20 62 65 66 6f 72 65 0a 2a 2a 20 74 68  ing before.** th
17a80 65 20 54 6f 6b 65 6e 20 67 6f 65 73 20 6f 75 74  e Token goes out
17a90 20 6f 66 20 73 63 6f 70 65 21 20 20 56 65 72 79   of scope!  Very
17aa0 20 6f 66 74 65 6e 2c 20 74 68 65 20 22 7a 22 20   often, the "z" 
17ab0 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65 20 70  points to some p
17ac0 6c 61 63 65 0a 2a 2a 20 69 6e 20 74 68 65 20 6d  lace.** in the m
17ad0 69 64 64 6c 65 20 6f 66 20 74 68 65 20 50 61 72  iddle of the Par
17ae0 73 65 2e 7a 53 71 6c 20 74 65 78 74 2e 20 20 42  se.zSql text.  B
17af0 75 74 20 69 74 20 6d 69 67 68 74 20 61 6c 73 6f  ut it might also
17b00 20 70 6f 69 6e 74 20 74 6f 20 61 0a 2a 2a 20 73   point to a.** s
17b10 74 61 74 69 63 20 73 74 72 69 6e 67 2e 0a 2a 2f  tatic string..*/
17b20 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a  .struct Token {.
17b30 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b    const char *z;
17b40 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
17b50 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20  the token.  Not 
17b60 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21  NULL-terminated!
17b70 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
17b80 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62  nt n;    /* Numb
17b90 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
17ba0 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a   in this token *
17bb0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
17bc0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
17bd0 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
17be0 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  ns information n
17bf0 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
17c00 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20  e.** code for a 
17c10 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74  SELECT that cont
17c20 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
17c30 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
17c40 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41  If Expr.op==TK_A
17c50 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f  GG_COLUMN or TK_
17c60 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65  AGG_FUNCTION the
17c70 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20  n Expr.pAggInfo 
17c80 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  is a.** pointer 
17c90 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
17ca0 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f  e.  The Expr.iCo
17cb0 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68  lumn field is th
17cc0 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67  e index in.** Ag
17cd0 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20  gInfo.aCol[] or 
17ce0 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20  AggInfo.aFunc[] 
17cf0 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  of information n
17d00 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
17d10 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68  e.** code for th
17d20 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41  at node..**.** A
17d30 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20  ggInfo.pGroupBy 
17d40 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e  and AggInfo.aFun
17d50 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f  c.pExpr point to
17d60 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74   fields within t
17d70 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53  he.** original S
17d80 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20  elect structure 
17d90 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
17da0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
17db0 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66  ent.  These.** f
17dc0 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65  ields do not nee
17dd0 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68  d to be freed wh
17de0 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  en deallocating 
17df0 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75  the AggInfo stru
17e00 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
17e10 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20   AggInfo {.  u8 
17e20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20  directMode;     
17e30 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72       /* Direct r
17e40 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65  endering mode me
17e50 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69  ans take data di
17e60 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20  rectly.         
17e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e80 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20   ** from source 
17e90 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68  tables rather th
17ea0 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61  an from accumula
17eb0 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65  tors */.  u8 use
17ec0 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20  SortingIdx;     
17ed0 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d    /* In direct m
17ee0 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74  ode, reference t
17ef0 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
17f00 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20   rather.        
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f    ** than the so
17f30 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
17f40 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20  int sortingIdx; 
17f50 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
17f60 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
17f70 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
17f80 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
17f90 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75  xPTab;     /* Cu
17fa0 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70  rsor number of p
17fb0 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20  seudo-table */. 
17fc0 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c   int nSortingCol
17fd0 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62  umn;     /* Numb
17fe0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
17ff0 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
18000 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65  ex */.  int mnRe
18010 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20  g, mxReg;       
18020 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69  /* Range of regi
18030 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20  sters allocated 
18040 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75  for aCol and aFu
18050 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  nc */.  ExprList
18060 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20   *pGroupBy;     
18070 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20  /* The group by 
18080 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75  clause */.  stru
18090 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b  ct AggInfo_col {
180a0 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20      /* For each 
180b0 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73  column used in s
180c0 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a  ource tables */.
180d0 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
180f0 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  Source table */.
18100 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
18110 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18120 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
18130 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
18140 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f  e */.    int iCo
18150 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
18160 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
18170 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f  er within the so
18180 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
18190 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c    int iSorterCol
181a0 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  umn;       /* Co
181b0 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74  lumn number in t
181c0 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
181d0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
181e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
181f0 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
18200 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
18210 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
18220 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
18230 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18240 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70  The original exp
18250 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a  ression */.  } *
18260 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c  aCol;.  int nCol
18270 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
18280 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
18290 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  d entries in aCo
182a0 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63  l[] */.  int nAc
182b0 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20  cumulator;      
182c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
182d0 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20  lumns that show 
182e0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f  through to the o
182f0 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20  utput..         
18300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18310 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63   ** Additional c
18320 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
18330 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65  only as paramete
18340 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20  rs to.          
18350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18360 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ** aggregate fun
18370 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75  ctions */.  stru
18380 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20  ct AggInfo_func 
18390 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20  {   /* For each 
183a0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
183b0 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  on */.    Expr *
183c0 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
183d0 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
183e0 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75   encoding the fu
183f0 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75  nction */.    Fu
18400 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20  ncDef *pFunc;   
18410 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67         /* The ag
18420 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
18430 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
18440 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
18450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18460 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
18470 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
18480 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
18490 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74     int iDistinct
184a0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ;           /* E
184b0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75  phemeral table u
184c0 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44  sed to enforce D
184d0 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a  ISTINCT */.  } *
184e0 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75  aFunc;.  int nFu
184f0 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
18500 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
18510 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d  tries in aFunc[]
18520 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
18530 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72  e datatype ynVar
18540 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74   is a signed int
18550 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d  eger, either 16-
18560 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a  bit or 32-bit..*
18570 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20  * Usually it is 
18580 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66  16-bits.  But if
18590 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49   SQLITE_MAX_VARI
185a0 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67  ABLE_NUMBER is g
185b0 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33  reater.** than 3
185c0 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20  2767 we have to 
185d0 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20  make it 32-bit. 
185e0 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65   16-bit is prefe
185f0 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20  rred because.** 
18600 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d  it uses less mem
18610 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20  ory in the Expr 
18620 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73  object, which is
18630 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73   a big memory us
18640 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73  er.** in systems
18650 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72   with lots of pr
18660 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
18670 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c  s.  And few appl
18680 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64  ications.** need
18690 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74   more than about
186a0 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62   10 or 20 variab
186b0 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65  les.  But some e
186c0 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e  xtreme users wan
186d0 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65  t.** to have pre
186e0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
186f0 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37   with over 32767
18700 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20   variables, and 
18710 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20  for them.** the 
18720 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61  option is availa
18730 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d  ble (at compile-
18740 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51  time)..*/.#if SQ
18750 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
18760 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a  E_NUMBER<=32767.
18770 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61  typedef i16 ynVa
18780 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66  r;.#else.typedef
18790 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64   int ynVar;.#end
187a0 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e  if../*.** Each n
187b0 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73  ode of an expres
187c0 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73  sion in the pars
187d0 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73  e tree is an ins
187e0 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
187f0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
18800 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65  * Expr.op is the
18810 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74   opcode. The int
18820 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65  eger parser toke
18830 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73  n codes are reus
18840 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73  ed.** as opcodes
18850 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70   here. For examp
18860 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64  le, the parser d
18870 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20  efines TK_GE to 
18880 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  be an integer.**
18890 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69   code representi
188a0 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72  ng the ">=" oper
188b0 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20  ator. This same 
188c0 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20  integer code is 
188d0 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70  reused.** to rep
188e0 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74  resent the great
188f0 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c  er-than-or-equal
18900 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20  -to operator in 
18910 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a  the expression.*
18920 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  * tree..**.** If
18930 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
18940 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61  is an SQL litera
18950 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54  l (TK_INTEGER, T
18960 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42  K_FLOAT, TK_BLOB
18970 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e  ,.** or TK_STRIN
18980 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  G), then Expr.to
18990 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
189a0 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c   text of the SQL
189b0 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20   literal. If.** 
189c0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
189d0 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b  s a variable (TK
189e0 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e  _VARIABLE), then
189f0 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
18a00 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61 72 69  ains the.** vari
18a10 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c  able name. Final
18a20 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65  ly, if the expre
18a30 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
18a40 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e  function (TK_FUN
18a50 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20  CTION),.** then 
18a60 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
18a70 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ins the name of 
18a80 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a  the function..**
18a90 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20  .** Expr.pRight 
18aa0 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61  and Expr.pLeft a
18ab0 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  re the left and 
18ac0 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73  right subexpress
18ad0 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e  ions of a.** bin
18ae0 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69  ary operator. Ei
18af0 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79  ther or both may
18b00 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   be NULL..**.** 
18b10 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20  Expr.x.pList is 
18b20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65  a list of argume
18b30 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65  nts if the expre
18b40 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
18b50 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43  function,.** a C
18b60 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f  ASE expression o
18b70 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69  r an IN expressi
18b80 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  on of the form "
18b90 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c  <lhs> IN (<y>, <
18ba0 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72  z>...)"..** Expr
18bb0 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73  .x.pSelect is us
18bc0 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ed if the expres
18bd0 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65  sion is a sub-se
18be0 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65  lect or an expre
18bf0 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ssion of.** the 
18c00 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28  form "<lhs> IN (
18c10 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66  SELECT ...)". If
18c20 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63   the EP_xIsSelec
18c30 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20  t bit is set in 
18c40 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  the.** Expr.flag
18c50 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70  s mask, then Exp
18c60 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76  r.x.pSelect is v
18c70 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  alid. Otherwise,
18c80 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
18c90 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a  .** valid..**.**
18ca0 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   An expression o
18cb0 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72  f the form ID or
18cc0 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f   ID.ID refers to
18cd0 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74   a column in a t
18ce0 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63  able..** For suc
18cf0 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45  h expressions, E
18d00 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f  xpr.op is set to
18d10 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45   TK_COLUMN and E
18d20 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a  xpr.iTable is.**
18d30 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75 72   the integer cur
18d40 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20  sor number of a 
18d50 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e  VDBE cursor poin
18d60 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62  ting to that tab
18d70 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69  le and.** Expr.i
18d80 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f  Column is the co
18d90 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  lumn number for 
18da0 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c  the specific col
18db0 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  umn.  If the.** 
18dc0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73  expression is us
18dd0 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 69  ed as a result i
18de0 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 53  n an aggregate S
18df0 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a  ELECT, then the.
18e00 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f  ** value is also
18e10 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45   stored in the E
18e20 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20  xpr.iAgg column 
18e30 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74 65  in the aggregate
18e40 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63   so that.** it c
18e50 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 61  an be accessed a
18e60 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61  fter all aggrega
18e70 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64  tes are computed
18e80 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
18e90 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
18ea0 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65  unbound variable
18eb0 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73 74   marker (a quest
18ec0 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68 61 72  ion mark.** char
18ed0 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65  acter '?' in the
18ee0 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74   original SQL) t
18ef0 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61  hen the Expr.iTa
18f00 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e  ble holds the in
18f10 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f  dex.** number fo
18f20 72 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e  r that variable.
18f30 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
18f40 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75  pression is a su
18f50 62 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72  bquery then Expr
18f60 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61  .iColumn holds a
18f70 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67  n integer.** reg
18f80 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e  ister number con
18f90 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75  taining the resu
18fa0 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65  lt of the subque
18fb0 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73  ry.  If the.** s
18fc0 75 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20  ubquery gives a 
18fd0 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c  constant result,
18fe0 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20   then iTable is 
18ff0 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71  -1.  If the subq
19000 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20  uery.** gives a 
19010 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72  different answer
19020 20 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69   at different ti
19030 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65  mes during state
19040 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a  ment processing.
19050 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  ** then iTable i
19060 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
19070 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68   a subroutine th
19080 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20  at computes the 
19090 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  subquery..**.** 
190a0 49 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f  If the Expr is o
190b0 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e  f type OP_Column
190c0 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20  , and the table 
190d0 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20  it is selecting 
190e0 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73  from.** is a dis
190f0 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22  k table or the "
19100 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61  old.*" pseudo-ta
19110 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70  ble, then pTab p
19120 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20  oints to the.** 
19130 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61  corresponding ta
19140 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a  ble definition..
19150 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e  **.** ALLOCATION
19160 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78   NOTES:.**.** Ex
19170 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75  pr objects can u
19180 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f  se a lot of memo
19190 72 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61  ry space in data
191a0 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f  base schema.  To
191b0 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20  .** help reduce 
191c0 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65  memory requireme
191d0 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61  nts, sometimes a
191e0 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69  n Expr object wi
191f0 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74  ll be.** truncat
19200 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75  ed.  And to redu
19210 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ce the number of
19220 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
19230 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a  ons, sometimes.*
19240 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78  * two or more Ex
19250 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20  pr objects will 
19260 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73  be stored in a s
19270 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  ingle memory all
19280 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65  ocation,.** toge
19290 74 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a  ther with Expr.z
192a0 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a  Token strings..*
192b0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52  *.** If the EP_R
192c0 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f  educed and EP_To
192d0 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72  kenOnly flags ar
192e0 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e  e set when.** an
192f0 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20   Expr object is 
19300 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e  truncated.  When
19310 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73   EP_Reduced is s
19320 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20  et, then all.** 
19330 74 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f  the child Expr o
19340 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78  bjects in the Ex
19350 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70  pr.pLeft and Exp
19360 72 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65  r.pRight subtree
19370 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e  s.** are contain
19380 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  ed within the sa
19390 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  me memory alloca
193a0 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77  tion.  Note, how
193b0 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68  ever, that.** th
193c0 65 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78  e subtrees in Ex
193d0 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78  pr.x.pList or Ex
193e0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65  pr.x.pSelect are
193f0 20 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65   always separate
19400 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c  ly.** allocated,
19410 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
19420 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50  hether or not EP
19430 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e  _Reduced is set.
19440 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20  .*/.struct Expr 
19450 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  {.  u8 op;      
19460 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70             /* Op
19470 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65  eration performe
19480 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a  d by this node *
19490 2f 0a 20 20 63 68 61 72 20 61 66 66 45 78 70 72  /.  char affExpr
194a0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61 66  ;          /* af
194b0 66 69 6e 69 74 79 2c 20 6f 72 20 52 41 49 53 45  finity, or RAISE
194c0 20 74 79 70 65 20 2a 2f 0a 20 20 75 33 32 20 66   type */.  u32 f
194d0 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
194e0 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61    /* Various fla
194f0 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65  gs.  EP_* See be
19500 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  low */.  union {
19510 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65  .    char *zToke
19520 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
19530 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f  oken value. Zero
19540 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20   terminated and 
19550 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20  dequoted */.    
19560 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20  int iValue;     
19570 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65         /* Non-ne
19580 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76  gative integer v
19590 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61  alue if EP_IntVa
195a0 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20  lue */.  } u;.. 
195b0 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f   /* If the EP_To
195c0 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20  kenOnly flag is 
195d0 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
195e0 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
195f0 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
19600 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
19610 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
19620 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
19630 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
19640 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
19650 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
19660 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
19670 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  tion..  ********
19680 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19690 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
196a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
196b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
196c0 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20    Expr *pLeft;  
196d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74           /* Left
196e0 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78   subnode */.  Ex
196f0 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20  pr *pRight;     
19700 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75       /* Right su
19710 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e  bnode */.  union
19720 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20   {.    ExprList 
19730 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f  *pList;     /* o
19740 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
19750 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55  SELECT, CASE, FU
19760 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20  NCTION, BETWEEN 
19770 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
19780 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45  Select;     /* E
19790 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20  P_xIsSelect and 
197a0 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c  op = IN, EXISTS,
197b0 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78   SELECT */.  } x
197c0 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
197d0 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69  P_Reduced flag i
197e0 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70  s set in the Exp
197f0 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
19800 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65  en no.  ** space
19810 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f   is allocated fo
19820 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c  r the fields bel
19830 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41  ow this point. A
19840 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a  n attempt to.  *
19850 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69  * access them wi
19860 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ll result in a s
19870 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75  egfault or malfu
19880 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  nction..  ******
19890 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
198a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
198b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
198c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
198d0 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
198e0 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
198f0 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
19900 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74         /* Height
19910 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61   of the tree hea
19920 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  ded by this node
19930 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
19940 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
19950 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
19960 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  : cursor number 
19970 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67  of table holding
19980 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20   column.        
19990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199a0 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   ** TK_REGISTER:
199b0 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
199c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
199d0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
199e0 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65  TRIGGER: 1 -> ne
199f0 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20  w, 0 -> old.    
19a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a10 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b       ** EP_Unlik
19a20 65 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38 20  ely:  134217728 
19a30 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64  times likelihood
19a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19a50 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
19a60 49 4e 3a 20 65 70 68 65 6d 65 72 69 61 6c 20 74  IN: ephemerial t
19a70 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 52 48 53  able holding RHS
19a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19a90 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
19aa0 53 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 4e  SELECT_COLUMN: N
19ab0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
19ac0 20 6f 6e 20 74 68 65 20 4c 48 53 0a 20 20 20 20   on the LHS.    
19ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ae0 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43       ** TK_SELEC
19af0 54 3a 20 31 73 74 20 72 65 67 69 73 74 65 72 20  T: 1st register 
19b00 6f 66 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72  of result vector
19b10 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c   */.  ynVar iCol
19b20 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  umn;         /* 
19b30 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d  TK_COLUMN: colum
19b40 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72  n index.  -1 for
19b50 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20   rowid..        
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b70 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a   ** TK_VARIABLE:
19b80 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72   variable number
19b90 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a   (always >= 1)..
19ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bb0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53           ** TK_S
19bc0 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f  ELECT_COLUMN: co
19bd0 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75  lumn of the resu
19be0 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69  lt vector */.  i
19bf0 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20  16 iAgg;        
19c00 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65        /* Which e
19c10 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f  ntry in pAggInfo
19c20 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46  ->aCol[] or ->aF
19c30 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69  unc[] */.  i16 i
19c40 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20  RightJoinTable; 
19c50 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a    /* If EP_FromJ
19c60 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74  oin, the right t
19c70 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e  able of the join
19c80 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20   */.  u8 op2;   
19c90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19ca0 54 4b 5f 52 45 47 49 53 54 45 52 2f 54 4b 5f 54  TK_REGISTER/TK_T
19cb0 52 55 54 48 3a 20 6f 72 69 67 69 6e 61 6c 20 76  RUTH: original v
19cc0 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a  alue of Expr.op.
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ce0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43           ** TK_C
19cf0 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65  OLUMN: the value
19d00 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f   of p5 for OP_Co
19d10 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
19d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
19d30 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
19d40 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20  : nesting depth 
19d50 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
19d60 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55  ggInfo;     /* U
19d70 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f  sed by TK_AGG_CO
19d80 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f  LUMN and TK_AGG_
19d90 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 75 6e  FUNCTION */.  un
19da0 69 6f 6e 20 7b 0a 20 20 20 20 54 61 62 6c 65 20  ion {.    Table 
19db0 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
19dc0 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 54   /* TK_COLUMN: T
19dd0 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  able containing 
19de0 63 6f 6c 75 6d 6e 2e 20 43 61 6e 20 62 65 20 4e  column. Can be N
19df0 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ULL.            
19e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19e10 2a 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f  * for a column o
19e20 66 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e  f an index on an
19e30 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
19e40 20 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b     Window *pWin;
19e50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 50 5f            /* EP_
19e60 57 69 6e 46 75 6e 63 3a 20 57 69 6e 64 6f 77 2f  WinFunc: Window/
19e70 46 69 6c 74 65 72 20 64 65 66 6e 20 66 6f 72 20  Filter defn for 
19e80 61 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  a function */.  
19e90 20 20 73 74 72 75 63 74 20 7b 20 20 20 20 20 20    struct {      
19ea0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 49           /* TK_I
19eb0 4e 2c 20 54 4b 5f 53 45 4c 45 43 54 2c 20 61 6e  N, TK_SELECT, an
19ec0 64 20 54 4b 5f 45 58 49 53 54 53 20 2a 2f 0a 20  d TK_EXISTS */. 
19ed0 20 20 20 20 20 69 6e 74 20 69 41 64 64 72 3b 20       int iAddr; 
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
19ef0 75 62 72 6f 75 74 69 6e 65 20 65 6e 74 72 79 20  ubroutine entry 
19f00 61 64 64 72 65 73 73 20 2a 2f 0a 20 20 20 20 20  address */.     
19f10 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20   int regReturn; 
19f20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
19f30 74 65 72 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  ter used to hold
19f40 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20   return address 
19f50 2a 2f 0a 20 20 20 20 7d 20 73 75 62 3b 0a 20 20  */.    } sub;.  
19f60 7d 20 79 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  } y;.};../*.** T
19f70 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
19f80 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   the meanings of
19f90 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70   bits in the Exp
19fa0 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
19fb0 2a 20 56 61 6c 75 65 20 72 65 73 74 72 69 63 74  * Value restrict
19fc0 69 6f 6e 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ions:.**.**     
19fd0 20 20 20 20 20 45 50 5f 41 67 67 20 3d 3d 20 4e       EP_Agg == N
19fe0 43 5f 48 61 73 41 67 67 20 3d 3d 20 53 46 5f 48  C_HasAgg == SF_H
19ff0 61 73 41 67 67 0a 2a 2a 20 20 20 20 20 20 20 20  asAgg.**        
1a000 20 20 45 50 5f 57 69 6e 20 3d 3d 20 4e 43 5f 48    EP_Win == NC_H
1a010 61 73 57 69 6e 0a 2a 2f 0a 23 64 65 66 69 6e 65  asWin.*/.#define
1a020 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 20 30   EP_FromJoin   0
1a030 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69  x000001 /* Origi
1a040 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e  nates in ON/USIN
1a050 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74 65  G clause of oute
1a060 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
1a070 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 20  e EP_Distinct   
1a080 30 78 30 30 30 30 30 32 20 2f 2a 20 41 67 67 72  0x000002 /* Aggr
1a090 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77  egate function w
1a0a0 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79  ith DISTINCT key
1a0b0 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
1a0c0 45 50 5f 48 61 73 46 75 6e 63 20 20 20 20 30 78  EP_HasFunc    0x
1a0d0 30 30 30 30 30 34 20 2f 2a 20 43 6f 6e 74 61 69  000004 /* Contai
1a0e0 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66  ns one or more f
1a0f0 75 6e 63 74 69 6f 6e 73 20 6f 66 20 61 6e 79 20  unctions of any 
1a100 6b 69 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  kind */.#define 
1a110 45 50 5f 46 69 78 65 64 43 6f 6c 20 20 20 30 78  EP_FixedCol   0x
1a120 30 30 30 30 30 38 20 2f 2a 20 54 4b 5f 43 6f 6c  000008 /* TK_Col
1a130 75 6d 6e 20 77 69 74 68 20 61 20 6b 6e 6f 77 6e  umn with a known
1a140 20 66 69 78 65 64 20 76 61 6c 75 65 20 2a 2f 0a   fixed value */.
1a150 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20  #define EP_Agg  
1a160 20 20 20 20 20 20 30 78 30 30 30 30 31 30 20 2f        0x000010 /
1a170 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  * Contains one o
1a180 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
1a190 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64   functions */.#d
1a1a0 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65  efine EP_VarSele
1a1b0 63 74 20 20 30 78 30 30 30 30 32 30 20 2f 2a 20  ct  0x000020 /* 
1a1c0 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65  pSelect is corre
1a1d0 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74  lated, not const
1a1e0 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ant */.#define E
1a1f0 50 5f 44 62 6c 51 75 6f 74 65 64 20 20 30 78 30  P_DblQuoted  0x0
1a200 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a  00040 /* token.z
1a210 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20   was originally 
1a220 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66  in "..." */.#def
1a230 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63  ine EP_InfixFunc
1a240 20 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72    0x000080 /* Tr
1a250 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20  ue for an infix 
1a260 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20  function: LIKE, 
1a270 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65  GLOB, etc */.#de
1a280 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20  fine EP_Collate 
1a290 20 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54     0x000100 /* T
1a2a0 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54  ree contains a T
1a2b0 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74  K_COLLATE operat
1a2c0 6f 72 20 2a 2f 0a 20 20 2f 2a 20 20 20 20 20 20  or */.  /*      
1a2d0 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30              0x00
1a2e0 30 32 30 30 20 41 76 61 69 6c 61 62 6c 65 20 66  0200 Available f
1a2f0 6f 72 20 72 65 75 73 65 20 2a 2f 0a 23 64 65 66  or reuse */.#def
1a300 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20  ine EP_IntValue 
1a310 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e    0x000400 /* In
1a320 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74  teger value cont
1a330 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75  ained in u.iValu
1a340 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
1a350 78 49 73 53 65 6c 65 63 74 20 20 30 78 30 30 30  xIsSelect  0x000
1a360 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74  800 /* x.pSelect
1a370 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72   is valid (other
1a380 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29  wise x.pList is)
1a390 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
1a3a0 6b 69 70 20 20 20 20 20 20 20 30 78 30 30 31 30  kip       0x0010
1a3b0 30 30 20 2f 2a 20 4f 70 65 72 61 74 6f 72 20 64  00 /* Operator d
1a3c0 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 72 69 62 75  oes not contribu
1a3d0 74 65 20 74 6f 20 61 66 66 69 6e 69 74 79 20 2a  te to affinity *
1a3e0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64  /.#define EP_Red
1a3f0 75 63 65 64 20 20 20 20 30 78 30 30 32 30 30 30  uced    0x002000
1a400 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20   /* Expr struct 
1a410 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
1a420 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
1a430 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f  define EP_TokenO
1a440 6e 6c 79 20 20 30 78 30 30 34 30 30 30 20 2f 2a  nly  0x004000 /*
1a450 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
1a460 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
1a470 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
1a480 65 66 69 6e 65 20 45 50 5f 57 69 6e 20 20 20 20  efine EP_Win    
1a490 20 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20      0x008000 /* 
1a4a0 43 6f 6e 74 61 69 6e 73 20 77 69 6e 64 6f 77 20  Contains window 
1a4b0 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
1a4c0 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e  fine EP_MemToken
1a4d0 20 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e     0x010000 /* N
1a4e0 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62  eed to sqlite3Db
1a4f0 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b  Free() Expr.zTok
1a500 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  en */.#define EP
1a510 5f 4e 6f 52 65 64 75 63 65 20 20 20 30 78 30 32  _NoReduce   0x02
1a520 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45  0000 /* Cannot E
1a530 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 74 68  XPRDUP_REDUCE th
1a540 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69  is Expr */.#defi
1a550 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20  ne EP_Unlikely  
1a560 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c   0x040000 /* unl
1a570 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c  ikely() or likel
1a580 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e  ihood() function
1a590 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
1a5a0 6f 6e 73 74 46 75 6e 63 20 20 30 78 30 38 30 30  onstFunc  0x0800
1a5b0 30 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46  00 /* A SQLITE_F
1a5c0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20  UNC_CONSTANT or 
1a5d0 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f  _SLOCHNG functio
1a5e0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
1a5f0 43 61 6e 42 65 4e 75 6c 6c 20 20 30 78 31 30 30  CanBeNull  0x100
1a600 30 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75  000 /* Can be nu
1a610 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e  ll despite NOT N
1a620 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
1a630 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62  /.#define EP_Sub
1a640 71 75 65 72 79 20 20 20 30 78 32 30 30 30 30 30  query   0x200000
1a650 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e   /* Tree contain
1a660 73 20 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70  s a TK_SELECT op
1a670 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  erator */.#defin
1a680 65 20 45 50 5f 41 6c 69 61 73 20 20 20 20 20 20  e EP_Alias      
1a690 30 78 34 30 30 30 30 30 20 2f 2a 20 49 73 20 61  0x400000 /* Is a
1a6a0 6e 20 61 6c 69 61 73 20 66 6f 72 20 61 20 72 65  n alias for a re
1a6b0 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20  sult set column 
1a6c0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c 65  */.#define EP_Le
1a6d0 61 66 20 20 20 20 20 20 20 30 78 38 30 30 30 30  af       0x80000
1a6e0 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c  0 /* Expr.pLeft,
1a6f0 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e 70 53 65   .pRight, .u.pSe
1a700 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f  lect all NULL */
1a710 0a 23 64 65 66 69 6e 65 20 45 50 5f 57 69 6e 46  .#define EP_WinF
1a720 75 6e 63 20 20 20 30 78 31 30 30 30 30 30 30 20  unc   0x1000000 
1a730 2f 2a 20 54 4b 5f 46 55 4e 43 54 49 4f 4e 20 77  /* TK_FUNCTION w
1a740 69 74 68 20 45 78 70 72 2e 79 2e 70 57 69 6e 20  ith Expr.y.pWin 
1a750 73 65 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  set */.#define E
1a760 50 5f 53 75 62 72 74 6e 20 20 20 20 30 78 32 30  P_Subrtn    0x20
1a770 30 30 30 30 30 20 2f 2a 20 55 73 65 73 20 45 78  00000 /* Uses Ex
1a780 70 72 2e 79 2e 73 75 62 2e 20 54 4b 5f 49 4e 2c  pr.y.sub. TK_IN,
1a790 20 5f 53 45 4c 45 43 54 2c 20 6f 72 20 5f 45 58   _SELECT, or _EX
1a7a0 49 53 54 53 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ISTS */.#define 
1a7b0 45 50 5f 51 75 6f 74 65 64 20 20 20 20 30 78 34  EP_Quoted    0x4
1a7c0 30 30 30 30 30 30 20 2f 2a 20 54 4b 5f 49 44 20  000000 /* TK_ID 
1a7d0 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 71  was originally q
1a7e0 75 6f 74 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  uoted */.#define
1a7f0 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 30 78   EP_Static    0x
1a800 38 30 30 30 30 30 30 20 2f 2a 20 48 65 6c 64 20  8000000 /* Held 
1a810 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62  in memory not ob
1a820 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c  tained from mall
1a830 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oc() */.#define 
1a840 45 50 5f 49 73 54 72 75 65 20 20 20 30 78 31 30  EP_IsTrue   0x10
1a850 30 30 30 30 30 30 20 2f 2a 20 41 6c 77 61 79 73  000000 /* Always
1a860 20 68 61 73 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   has boolean val
1a870 75 65 20 6f 66 20 54 52 55 45 20 2a 2f 0a 23 64  ue of TRUE */.#d
1a880 65 66 69 6e 65 20 45 50 5f 49 73 46 61 6c 73 65  efine EP_IsFalse
1a890 20 20 30 78 32 30 30 30 30 30 30 30 20 2f 2a 20    0x20000000 /* 
1a8a0 41 6c 77 61 79 73 20 68 61 73 20 62 6f 6f 6c 65  Always has boole
1a8b0 61 6e 20 76 61 6c 75 65 20 6f 66 20 46 41 4c 53  an value of FALS
1a8c0 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  E */.#define EP_
1a8d0 49 6e 64 69 72 65 63 74 20 30 78 34 30 30 30 30  Indirect 0x40000
1a8e0 30 30 30 20 2f 2a 20 43 6f 6e 74 61 69 6e 65 64  000 /* Contained
1a8f0 20 77 69 74 68 69 6e 20 61 20 54 52 49 47 47 45   within a TRIGGE
1a900 52 20 6f 72 20 61 20 56 49 45 57 20 2a 2f 0a 0a  R or a VIEW */..
1a910 2f 2a 0a 2a 2a 20 54 68 65 20 45 50 5f 50 72 6f  /*.** The EP_Pro
1a920 70 61 67 61 74 65 20 6d 61 73 6b 20 69 73 20 61  pagate mask is a
1a930 20 73 65 74 20 6f 66 20 70 72 6f 70 65 72 74 69   set of properti
1a940 65 73 20 74 68 61 74 20 61 75 74 6f 6d 61 74 69  es that automati
1a950 63 61 6c 6c 79 20 70 72 6f 70 61 67 61 74 65 0a  cally propagate.
1a960 2a 2a 20 75 70 77 61 72 64 73 20 69 6e 74 6f 20  ** upwards into 
1a970 70 61 72 65 6e 74 20 6e 6f 64 65 73 2e 0a 2a 2f  parent nodes..*/
1a980 0a 23 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70  .#define EP_Prop
1a990 61 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74  agate (EP_Collat
1a9a0 65 7c 45 50 5f 53 75 62 71 75 65 72 79 7c 45 50  e|EP_Subquery|EP
1a9b0 5f 48 61 73 46 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a  _HasFunc)../*.**
1a9c0 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
1a9d0 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
1a9e0 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
1a9f0 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20   bits in the.** 
1aa00 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
1aa10 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70  ..*/.#define Exp
1aa20 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50  rHasProperty(E,P
1aa30 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61  )     (((E)->fla
1aa40 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
1aa50 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72  ine ExprHasAllPr
1aa60 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28  operty(E,P)  (((
1aa70 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d  E)->flags&(P))==
1aa80 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70  (P)).#define Exp
1aa90 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50  rSetProperty(E,P
1aaa0 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73  )     (E)->flags
1aab0 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78  |=(P).#define Ex
1aac0 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28  prClearProperty(
1aad0 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67  E,P)   (E)->flag
1aae0 73 26 3d 7e 28 50 29 0a 23 64 65 66 69 6e 65 20  s&=~(P).#define 
1aaf0 45 78 70 72 41 6c 77 61 79 73 54 72 75 65 28 45  ExprAlwaysTrue(E
1ab00 29 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73  )   (((E)->flags
1ab10 26 28 45 50 5f 46 72 6f 6d 4a 6f 69 6e 7c 45 50  &(EP_FromJoin|EP
1ab20 5f 49 73 54 72 75 65 29 29 3d 3d 45 50 5f 49 73  _IsTrue))==EP_Is
1ab30 54 72 75 65 29 0a 23 64 65 66 69 6e 65 20 45 78  True).#define Ex
1ab40 70 72 41 6c 77 61 79 73 46 61 6c 73 65 28 45 29  prAlwaysFalse(E)
1ab50 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
1ab60 45 50 5f 46 72 6f 6d 4a 6f 69 6e 7c 45 50 5f 49  EP_FromJoin|EP_I
1ab70 73 46 61 6c 73 65 29 29 3d 3d 45 50 5f 49 73 46  sFalse))==EP_IsF
1ab80 61 6c 73 65 29 0a 0a 2f 2a 20 54 68 65 20 45 78  alse)../* The Ex
1ab90 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
1aba0 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
1abb0 20 66 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f   for Verificatio
1abc0 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a  n, Validation,.*
1abd0 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74  * and Accreditat
1abe0 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f  ion only.  It wo
1abf0 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74  rks like ExprSet
1ac00 50 72 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e  Property() durin
1ac10 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73  g VVA.** process
1ac20 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f  es but is a no-o
1ac30 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a  p for delivery..
1ac40 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1ac50 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20  _DEBUG.# define 
1ac60 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
1ac70 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c  ty(E,P)  (E)->fl
1ac80 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23  ags|=(P).#else.#
1ac90 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
1aca0 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a  VAProperty(E,P).
1acb0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
1acc0 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
1acd0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
1ace0 62 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62  bytes required b
1acf0 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a  y a normal Expr.
1ad00 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78  ** struct, an Ex
1ad10 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
1ad20 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
1ad30 61 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66  ag set in Expr.f
1ad40 6c 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45  lags.** and an E
1ad50 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
1ad60 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
1ad70 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64   flag set..*/.#d
1ad80 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53  efine EXPR_FULLS
1ad90 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69  IZE           si
1ada0 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20  zeof(Expr)      
1adb0 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a       /* Full siz
1adc0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  e */.#define EXP
1add0 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20  R_REDUCEDSIZE   
1ade0 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
1adf0 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43  pr,iTable)  /* C
1ae00 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a  ommon features *
1ae10 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54  /.#define EXPR_T
1ae20 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20  OKENONLYSIZE    
1ae30 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
1ae40 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65  pLeft)   /* Fewe
1ae50 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f  r features */../
1ae60 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65  *.** Flags passe
1ae70 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  d to the sqlite3
1ae80 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69  ExprDup() functi
1ae90 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64  on. See the head
1aea0 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62  er comment.** ab
1aeb0 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  ove sqlite3ExprD
1aec0 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73  up() for details
1aed0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
1aee0 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20  RDUP_REDUCE     
1aef0 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55      0x0001  /* U
1af00 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65  sed reduced-size
1af10 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a   Expr nodes */..
1af20 2f 2a 0a 2a 2a 20 54 72 75 65 20 69 66 20 74 68  /*.** True if th
1af30 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 73  e expression pas
1af40 73 65 64 20 61 73 20 61 6e 20 61 72 67 75 6d 65  sed as an argume
1af50 6e 74 20 77 61 73 20 61 20 66 75 6e 63 74 69 6f  nt was a functio
1af60 6e 20 77 69 74 68 0a 2a 2a 20 61 6e 20 4f 56 45  n with.** an OVE
1af70 52 28 29 20 63 6c 61 75 73 65 20 28 61 20 77 69  R() clause (a wi
1af80 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 29 2e 0a  ndow function)..
1af90 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 57 69 6e  */.#define IsWin
1afa0 64 6f 77 46 75 6e 63 28 70 29 20 28 20 5c 0a 20  dowFunc(p) ( \. 
1afb0 20 20 20 45 78 70 72 48 61 73 50 72 6f 70 65 72     ExprHasProper
1afc0 74 79 28 28 70 29 2c 20 45 50 5f 57 69 6e 46 75  ty((p), EP_WinFu
1afd0 6e 63 29 20 26 26 20 70 2d 3e 79 2e 70 57 69 6e  nc) && p->y.pWin
1afe0 2d 3e 65 46 72 6d 54 79 70 65 21 3d 54 4b 5f 46  ->eFrmType!=TK_F
1aff0 49 4c 54 45 52 20 5c 0a 29 0a 0a 2f 2a 0a 2a 2a  ILTER \.)../*.**
1b000 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
1b010 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78  ssions.  Each ex
1b020 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74  pression may opt
1b030 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a  ionally have a.*
1b040 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72  * name.  An expr
1b050 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f  /name combinatio
1b060 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e  n can be used in
1b070 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73   several ways, s
1b080 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69  uch.** as the li
1b090 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49  st of "expr AS I
1b0a0 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77  D" fields follow
1b0b0 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f  ing a "SELECT" o
1b0c0 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74  r in the.** list
1b0d0 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20   of "ID = expr" 
1b0e0 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41  items in an UPDA
1b0f0 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65  TE.  A list of e
1b100 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a  xpressions can.*
1b110 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61  * also be used a
1b120 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  s the argument t
1b130 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e  o a function, in
1b140 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
1b150 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64  a.zName.** field
1b160 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
1b170 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74  .** By default t
1b180 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69  he Expr.zSpan fi
1b190 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61  eld holds a huma
1b1a0 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72  n-readable descr
1b1b0 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  iption of.** the
1b1c0 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
1b1d0 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20   is used in the 
1b1e0 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72  generation of er
1b1f0 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64  ror messages and
1b200 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c  .** column label
1b210 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  s.  In this case
1b220 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20  , Expr.zSpan is 
1b230 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65  typically the te
1b240 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d  xt of a.** colum
1b250 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20  n expression as 
1b260 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53  it exists in a S
1b270 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1b280 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a    However, if.**
1b290 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20   the bSpanIsTab 
1b2a0 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
1b2b0 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c  n zSpan is overl
1b2c0 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68  oaded to mean th
1b2d0 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65  e name.** of the
1b2e0 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69   result column i
1b2f0 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41  n the form: DATA
1b300 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  BASE.TABLE.COLUM
1b310 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a  N.  This later.*
1b320 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66  * form is used f
1b330 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69  or name resoluti
1b340 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46  on with nested F
1b350 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a  ROM clauses..*/.
1b360 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20  struct ExprList 
1b370 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20  {.  int nExpr;  
1b380 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1b390 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69  mber of expressi
1b3a0 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ons on the list 
1b3b0 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72  */.  struct Expr
1b3c0 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46  List_item { /* F
1b3d0 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69  or each expressi
1b3e0 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a  on in the list *
1b3f0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
1b400 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
1b410 20 54 68 65 20 70 61 72 73 65 20 74 72 65 65 20   The parse tree 
1b420 66 6f 72 20 74 68 69 73 20 65 78 70 72 65 73 73  for this express
1b430 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ion */.    char 
1b440 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
1b450 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f     /* Token asso
1b460 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
1b470 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
1b480 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20     char *zSpan; 
1b490 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72             /* Or
1b4a0 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
1b4b0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  he expression */
1b4c0 0a 20 20 20 20 75 38 20 73 6f 72 74 46 6c 61 67  .    u8 sortFlag
1b4d0 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
1b4e0 4d 61 73 6b 20 6f 66 20 4b 45 59 49 4e 46 4f 5f  Mask of KEYINFO_
1b4f0 4f 52 44 45 52 5f 2a 20 66 6c 61 67 73 20 2a 2f  ORDER_* flags */
1b500 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f  .    unsigned do
1b510 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20  ne :1;       /* 
1b520 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61  A flag to indica
1b530 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69  te when processi
1b540 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a  ng is finished *
1b550 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62  /.    unsigned b
1b560 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a  SpanIsTab :1; /*
1b570 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e   zSpan holds DB.
1b580 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a  TABLE.COLUMN */.
1b590 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75      unsigned reu
1b5a0 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43  sable :1;   /* C
1b5b0 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
1b5c0 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a  on is reusable *
1b5d0 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62  /.    unsigned b
1b5e0 53 6f 72 74 65 72 52 65 66 20 3a 31 3b 20 2f 2a  SorterRef :1; /*
1b5f0 20 44 65 66 65 72 20 65 76 61 6c 75 61 74 69 6f   Defer evaluatio
1b600 6e 20 75 6e 74 69 6c 20 61 66 74 65 72 20 73 6f  n until after so
1b610 72 74 69 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 73  rting */.    uns
1b620 69 67 6e 65 64 20 62 4e 75 6c 6c 73 3a 20 31 3b  igned bNulls: 1;
1b630 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1b640 65 78 70 6c 69 63 69 74 20 22 4e 55 4c 4c 53 20  explicit "NULLS 
1b650 46 49 52 53 54 2f 4c 41 53 54 22 20 2a 2f 0a 20  FIRST/LAST" */. 
1b660 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20     union {.     
1b670 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
1b680 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f    u16 iOrderByCo
1b690 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f  l;      /* For O
1b6a0 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20  RDER BY, column 
1b6b0 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74  number in result
1b6c0 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20   set */.        
1b6d0 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20  u16 iAlias;     
1b6e0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
1b6f0 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73  nto Parse.aAlias
1b700 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a  [] for zName */.
1b710 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20        } x;.     
1b720 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52   int iConstExprR
1b730 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69  eg;      /* Regi
1b740 73 74 65 72 20 69 6e 20 77 68 69 63 68 20 45 78  ster in which Ex
1b750 70 72 20 76 61 6c 75 65 20 69 73 20 63 61 63 68  pr value is cach
1b760 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20  ed */.    } u;. 
1b770 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20   } a[1];        
1b780 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1b790 20 73 6c 6f 74 20 66 6f 72 20 65 61 63 68 20 65   slot for each e
1b7a0 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
1b7b0 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
1b7c0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
1b7d0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
1b7e0 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70   can hold a simp
1b7f0 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74  le list of ident
1b800 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20  ifiers,.** such 
1b810 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62  as the list "a,b
1b820 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  ,c" in the follo
1b830 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a  wing statements:
1b840 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45  .**.**      INSE
1b850 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
1b860 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20   VALUES ...;.** 
1b870 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
1b880 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63  X idx ON t(a,b,c
1b890 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  );.**      CREAT
1b8a0 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42  E TRIGGER trig B
1b8b0 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20  EFORE UPDATE ON 
1b8c0 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a  t(a,b,c) ...;.**
1b8d0 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61  .** The IdList.a
1b8e0 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73  .idx field is us
1b8f0 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69  ed when the IdLi
1b900 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  st represents th
1b910 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c  e list of.** col
1b920 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20  umn names after 
1b930 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  a table name in 
1b940 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
1b950 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61  ent.  In the sta
1b960 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20  tement.**.**    
1b970 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
1b980 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20  ,b,c) ....**.** 
1b990 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d  If "a" is the k-
1b9a0 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62  th column of tab
1b9b0 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c  le "t", then IdL
1b9c0 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e  ist.a[0].idx==k.
1b9d0 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73  .*/.struct IdLis
1b9e0 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c  t {.  struct IdL
1b9f0 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63  ist_item {.    c
1ba00 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
1ba10 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
1ba20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20  identifier */.  
1ba30 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20    int idx;      
1ba40 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
1ba50 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b  some Table.aCol[
1ba60 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61  ] of a column na
1ba70 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d  med zName */.  }
1ba80 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20   *a;.  int nId; 
1ba90 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1baa0 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  r of identifiers
1bab0 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
1bac0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
1bad0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1bae0 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  e describes the 
1baf0 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
1bb00 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1bb10 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65  t..** Each table
1bb20 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
1bb30 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1bb40 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c  is a separate el
1bb50 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20  ement of.** the 
1bb60 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61  SrcList.a[] arra
1bb70 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68  y..**.** With th
1bb80 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75  e addition of mu
1bb90 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
1bba0 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c  support, the fol
1bbb0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1bbc0 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  .** can also be 
1bbd0 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65  used to describe
1bbe0 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
1bbf0 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20  ble such as the 
1bc00 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73  table that.** is
1bc10 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20   modified by an 
1bc20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20  INSERT, DELETE, 
1bc30 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
1bc40 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72  ent.  In standar
1bc50 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61  d SQL,.** such a
1bc60 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61   table must be a
1bc70 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44   simple name: ID
1bc80 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65  .  But in SQLite
1bc90 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a  , the table can.
1bca0 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69  ** now be identi
1bcb0 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61  fied by a databa
1bcc0 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20  se name, a dot, 
1bcd0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  then the table n
1bce0 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a  ame: ID.ID..**.*
1bcf0 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73  * The jointype s
1bd00 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e  tarts out showin
1bd10 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20  g the join type 
1bd20 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72  between the curr
1bd30 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64  ent table.** and
1bd40 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20   the next table 
1bd50 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68  on the list.  Th
1bd60 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20  e parser builds 
1bd70 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61  the list this wa
1bd80 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65  y..** But sqlite
1bd90 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
1bda0 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68  nType() later sh
1bdb0 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70  ifts the jointyp
1bdc0 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a  es so that each.
1bdd0 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72  ** jointype expr
1bde0 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62  esses the join b
1bdf0 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65  etween the table
1be00 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
1be10 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  s table..**.** I
1be20 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69  n the colUsed fi
1be30 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72  eld, the high-or
1be40 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29  der bit (bit 63)
1be50 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74   is set if the t
1be60 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  able.** contains
1be70 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f   more than 63 co
1be80 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34  lumns and the 64
1be90 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c  -th or later col
1bea0 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  umn is used..*/.
1beb0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b  struct SrcList {
1bec0 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20  .  int nSrc;    
1bed0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1bee0 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
1bef0 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f  eries in the FRO
1bf00 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33  M clause */.  u3
1bf10 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  2 nAlloc;      /
1bf20 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
1bf30 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ies allocated in
1bf40 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   a[] below */.  
1bf50 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
1bf60 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61  tem {.    Schema
1bf70 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53   *pSchema;  /* S
1bf80 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74  chema to which t
1bf90 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65  his item is fixe
1bfa0 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  d */.    char *z
1bfb0 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61  Database;  /* Na
1bfc0 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  me of database h
1bfd0 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c  olding this tabl
1bfe0 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
1bff0 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
1c000 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
1c010 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c  */.    char *zAl
1c020 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  ias;     /* The 
1c030 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41  "B" part of a "A
1c040 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20   AS B" phrase.  
1c050 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22  zName is the "A"
1c060 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
1c070 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  Tab;      /* An 
1c080 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73  SQL table corres
1c090 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65  ponding to zName
1c0a0 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
1c0b0 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53  pSelect;  /* A S
1c0c0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
1c0d0 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66  used in place of
1c0e0 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f   a table name */
1c0f0 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c  .    int addrFil
1c100 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73  lSub;  /* Addres
1c110 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20  s of subroutine 
1c120 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75  to manifest a su
1c130 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e  bquery */.    in
1c140 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20  t regReturn;    
1c150 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
1c160 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65  ing return addre
1c170 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75  ss of addrFillSu
1c180 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  b */.    int reg
1c190 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65  Result;    /* Re
1c1a0 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
1c1b0 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d  results of a co-
1c1c0 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73  routine */.    s
1c1d0 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 75 38  truct {.      u8
1c1e0 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20   jointype;      
1c1f0 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20  /* Type of join 
1c200 62 65 74 77 65 65 6e 20 74 68 69 73 20 74 61 62  between this tab
1c210 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69  le and the previ
1c220 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  ous */.      uns
1c230 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64  igned notIndexed
1c240 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20   :1;    /* True 
1c250 69 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f  if there is a NO
1c260 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65  T INDEXED clause
1c270 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1c280 65 64 20 69 73 49 6e 64 65 78 65 64 42 79 20 3a  ed isIndexedBy :
1c290 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  1;   /* True if 
1c2a0 74 68 65 72 65 20 69 73 20 61 6e 20 49 4e 44 45  there is an INDE
1c2b0 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  XED BY clause */
1c2c0 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1c2d0 69 73 54 61 62 46 75 6e 63 20 3a 31 3b 20 20 20  isTabFunc :1;   
1c2e0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 61 62    /* True if tab
1c2f0 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69  le-valued-functi
1c300 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20  on syntax */.   
1c310 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f     unsigned isCo
1c320 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a  rrelated :1;  /*
1c330 20 54 72 75 65 20 69 66 20 73 75 62 2d 71 75 65   True if sub-que
1c340 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ry is correlated
1c350 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1c360 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20  ed viaCoroutine 
1c370 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e  :1;  /* Implemen
1c380 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74  ted as a co-rout
1c390 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  ine */.      uns
1c3a0 69 67 6e 65 64 20 69 73 52 65 63 75 72 73 69 76  igned isRecursiv
1c3b0 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  e :1;   /* True 
1c3c0 66 6f 72 20 72 65 63 75 72 73 69 76 65 20 72 65  for recursive re
1c3d0 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20  ference in WITH 
1c3e0 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 20 20 20  */.    } fg;.   
1c3f0 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20   int iCursor;   
1c400 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
1c410 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65  ursor number use
1c420 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 73  d to access this
1c430 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78   table */.    Ex
1c440 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20  pr *pOn;        
1c450 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65  /* The ON clause
1c460 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
1c470 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67    IdList *pUsing
1c480 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47  ;   /* The USING
1c490 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
1c4a0 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b  n */.    Bitmask
1c4b0 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69   colUsed;  /* Bi
1c4c0 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69  t N (1<<N) set i
1c4d0 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54  f column N of pT
1c4e0 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20  ab is used */.  
1c4f0 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20    union {.      
1c500 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79  char *zIndexedBy
1c510 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69  ;    /* Identifi
1c520 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44  er from "INDEXED
1c530 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c   BY <zIndex>" cl
1c540 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 45 78  ause */.      Ex
1c550 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41 72 67  prList *pFuncArg
1c560 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20  ;  /* Arguments 
1c570 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d  to table-valued-
1c580 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
1c590 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65 78 20  } u1;.    Index 
1c5a0 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49  *pIBIndex;  /* I
1c5b0 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 63  ndex structure c
1c5c0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
1c5d0 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f  u1.zIndexedBy */
1c5e0 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20  .  } a[1];      
1c5f0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
1c600 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65  try for each ide
1c610 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c  ntifier on the l
1c620 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
1c630 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65   Permitted value
1c640 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74  s of the SrcList
1c650 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c  .a.jointype fiel
1c660 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d.*/.#define JT_
1c670 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31  INNER     0x0001
1c680 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20      /* Any kind 
1c690 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73  of inner or cros
1c6a0 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  s join */.#defin
1c6b0 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30  e JT_CROSS     0
1c6c0 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c  x0002    /* Expl
1c6d0 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20  icit use of the 
1c6e0 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f  CROSS keyword */
1c6f0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55  .#define JT_NATU
1c700 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20  RAL   0x0004    
1c710 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e  /* True for a "n
1c720 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a  atural" join */.
1c730 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20  #define JT_LEFT 
1c740 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f       0x0008    /
1c750 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69  * Left outer joi
1c760 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1c770 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30  RIGHT     0x0010
1c780 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74      /* Right out
1c790 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
1c7a0 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20  ne JT_OUTER     
1c7b0 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65  0x0020    /* The
1c7c0 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64   "OUTER" keyword
1c7d0 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23   is present */.#
1c7e0 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20  define JT_ERROR 
1c7f0 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a      0x0040    /*
1c800 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75   unknown or unsu
1c810 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70  pported join typ
1c820 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  e */.../*.** Fla
1c830 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66  gs appropriate f
1c840 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67  or the wctrlFlag
1c850 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73  s parameter of s
1c860 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
1c870 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68  ().** and the Wh
1c880 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61  ereInfo.wctrlFla
1c890 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a  gs member..**.**
1c8a0 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
1c8b0 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61  ts (enforced via
1c8c0 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
1c8d0 20 20 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d     WHERE_USE_LIM
1c8e0 49 54 20 20 3d 3d 20 53 46 5f 46 69 78 65 64 4c  IT  == SF_FixedL
1c8f0 69 6d 69 74 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  imit.*/.#define 
1c900 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f  WHERE_ORDERBY_NO
1c910 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a  RMAL   0x0000 /*
1c920 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e   No-op */.#defin
1c930 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
1c940 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31 20  MIN      0x0001 
1c950 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
1c960 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29  essing for min()
1c970 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
1c980 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d   WHERE_ORDERBY_M
1c990 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20 2f  AX      0x0002 /
1c9a0 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
1c9b0 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20  ssing for max() 
1c9c0 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
1c9d0 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45  WHERE_ONEPASS_DE
1c9e0 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a  SIRED  0x0004 /*
1c9f0 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d   Want to do one-
1ca00 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45  pass UPDATE/DELE
1ca10 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  TE */.#define WH
1ca20 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54  ERE_ONEPASS_MULT
1ca30 49 52 4f 57 20 30 78 30 30 30 38 20 2f 2a 20 4f  IROW 0x0008 /* O
1ca40 4e 45 50 41 53 53 20 69 73 20 6f 6b 20 77 69 74  NEPASS is ok wit
1ca50 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  h multiple rows 
1ca60 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1ca70 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20  _DUPLICATES_OK  
1ca80 20 20 30 78 30 30 31 30 20 2f 2a 20 4f 6b 20 74    0x0010 /* Ok t
1ca90 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d  o return a row m
1caa0 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f  ore than once */
1cab0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1cac0 52 5f 53 55 42 43 4c 41 55 53 45 20 20 20 20 20  R_SUBCLAUSE     
1cad0 30 78 30 30 32 30 20 2f 2a 20 50 72 6f 63 65 73  0x0020 /* Proces
1cae0 73 69 6e 67 20 61 20 73 75 62 2d 57 48 45 52 45  sing a sub-WHERE
1caf0 20 61 73 20 70 61 72 74 20 6f 66 0a 20 20 20 20   as part of.    
1cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb20 20 20 2a 2a 20 74 68 65 20 4f 52 20 6f 70 74 69    ** the OR opti
1cb30 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23 64 65  mization  */.#de
1cb40 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50  fine WHERE_GROUP
1cb50 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30 30  BY          0x00
1cb60 34 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69  40 /* pOrderBy i
1cb70 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50  s really a GROUP
1cb80 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57   BY */.#define W
1cb90 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20  HERE_DISTINCTBY 
1cba0 20 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20        0x0080 /* 
1cbb0 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61 6c  pOrderby is real
1cbc0 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c  ly a DISTINCT cl
1cbd0 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1cbe0 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49  WHERE_WANT_DISTI
1cbf0 4e 43 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a  NCT    0x0100 /*
1cc00 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64   All output need
1cc10 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74  s to be distinct
1cc20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1cc30 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20  E_SORTBYGROUP   
1cc40 20 20 20 30 78 30 32 30 30 20 2f 2a 20 53 75 70     0x0200 /* Sup
1cc50 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65 72  port sqlite3Wher
1cc60 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23  eIsSorted() */.#
1cc70 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45  define WHERE_SEE
1cc80 4b 5f 54 41 42 4c 45 20 20 20 20 20 20 20 30 78  K_TABLE       0x
1cc90 30 34 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64  0400 /* Do not d
1cca0 65 66 65 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61  efer seeks on ma
1ccb0 69 6e 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  in table */.#def
1ccc0 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
1ccd0 59 5f 4c 49 4d 49 54 20 20 20 20 30 78 30 38 30  Y_LIMIT    0x080
1cce0 30 20 2f 2a 20 4f 52 44 45 52 42 59 2b 4c 49 4d  0 /* ORDERBY+LIM
1ccf0 49 54 20 6f 6e 20 74 68 65 20 69 6e 6e 65 72 20  IT on the inner 
1cd00 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  loop */.#define 
1cd10 57 48 45 52 45 5f 53 45 45 4b 5f 55 4e 49 51 5f  WHERE_SEEK_UNIQ_
1cd20 54 41 42 4c 45 20 20 30 78 31 30 30 30 20 2f 2a  TABLE  0x1000 /*
1cd30 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65   Do not defer se
1cd40 65 6b 73 20 69 66 20 75 6e 69 71 75 65 20 2a 2f  eks if unique */
1cd50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cd60 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20           /*     
1cd70 30 78 32 30 30 30 20 20 20 20 6e 6f 74 20 63 75  0x2000    not cu
1cd80 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a  rrently used */.
1cd90 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 55 53  #define WHERE_US
1cda0 45 5f 4c 49 4d 49 54 20 20 20 20 20 20 20 20 30  E_LIMIT        0
1cdb0 78 34 30 30 30 20 2f 2a 20 55 73 65 20 74 68 65  x4000 /* Use the
1cdc0 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73 74 20 65   LIMIT in cost e
1cdd0 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20 20 20 20  stimates */.    
1cde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdf0 20 20 20 20 2f 2a 20 20 20 20 20 30 78 38 30 30      /*     0x800
1ce00 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74  0    not current
1ce10 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20 41  ly used */../* A
1ce20 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61  llowed return va
1ce30 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  lues from sqlite
1ce40 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
1ce50 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ().*/.#define WH
1ce60 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f  ERE_DISTINCT_NOO
1ce70 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53  P      0  /* DIS
1ce80 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f  TINCT keyword no
1ce90 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  t used */.#defin
1cea0 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1ceb0 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a  _UNIQUE    1  /*
1cec0 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a   No duplicates *
1ced0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1cee0 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44  DISTINCT_ORDERED
1cef0 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70     2  /* All dup
1cf00 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a 61  licates are adja
1cf10 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cent */.#define 
1cf20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
1cf30 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44  NORDERED 3  /* D
1cf40 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73 63  uplicates are sc
1cf50 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a  attered */../*.*
1cf60 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  * A NameContext 
1cf70 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78  defines a contex
1cf80 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65  t in which to re
1cf90 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20  solve table and 
1cfa0 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e  column.** names.
1cfb0 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f    The context co
1cfc0 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74  nsists of a list
1cfd0 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65 20   of tables (the 
1cfe0 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20  pSrcList) field 
1cff0 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66  and.** a list of
1d000 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
1d010 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65  n (pEList).  The
1d020 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
1d030 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65  n list may.** be
1d040 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63   NULL.  The pSrc
1d050 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
1d060 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1d070 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a  of a SELECT or.*
1d080 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  * to the table b
1d090 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
1d0a0 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41   by INSERT, UPDA
1d0b0 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20  TE, or DELETE.  
1d0c0 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f  The.** pEList co
1d0d0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
1d0e0 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61   result set of a
1d0f0 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e   SELECT and is N
1d100 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72  ULL for.** other
1d110 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
1d120 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20  ** NameContexts 
1d130 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20  can be nested.  
1d140 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e  When resolving n
1d150 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d  ames, the inner-
1d160 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20  most.** context 
1d170 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73  is searched firs
1d180 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20  t.  If no match 
1d190 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65  is found, the ne
1d1a0 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74  xt outer.** cont
1d1b0 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20  ext is checked. 
1d1c0 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69   If there is sti
1d1d0 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65  ll no match, the
1d1e0 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a   next context.**
1d1f0 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68   is checked.  Th
1d200 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69  is process conti
1d210 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65  nues until eithe
1d220 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  r a match is fou
1d230 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e  nd.** or all con
1d240 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e  texts are check.
1d250 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69    When a match i
1d260 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65  s found, the nRe
1d270 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74  f member of.** t
1d280 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61  he context conta
1d290 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20  ining the match 
1d2a0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
1d2b0 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75  **.** Each subqu
1d2c0 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e  ery gets a new N
1d2d0 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65  ameContext.  The
1d2e0 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69   pNext field poi
1d2f0 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61  nts to the.** Na
1d300 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65  meContext in the
1d310 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20   parent query.  
1d320 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73  Thus the process
1d330 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65   of scanning the
1d340 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
1d350 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  list corresponds
1d360 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68   to searching th
1d370 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65  rough successive
1d380 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71  ly outer.** subq
1d390 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66  ueries looking f
1d3a0 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73  or a match..*/.s
1d3b0 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
1d3c0 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  t {.  Parse *pPa
1d3d0 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  rse;       /* Th
1d3e0 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72  e parser */.  Sr
1d3f0 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
1d400 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72     /* One or mor
1d410 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f  e tables used to
1d420 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a   resolve names *
1d430 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
1d440 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
1d450 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c  ;    /* Optional
1d460 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d   list of result-
1d470 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  set columns */. 
1d480 20 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67     AggInfo *pAgg
1d490 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72  Info;   /* Infor
1d4a0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67  mation about agg
1d4b0 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20  regates at this 
1d4c0 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 55 70 73  level */.    Ups
1d4d0 65 72 74 20 2a 70 55 70 73 65 72 74 3b 20 20 20  ert *pUpsert;   
1d4e0 20 20 2f 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54    /* ON CONFLICT
1d4f0 20 63 6c 61 75 73 65 20 69 6e 66 6f 72 6d 61 74   clause informat
1d500 69 6f 6e 20 66 72 6f 6d 20 61 6e 20 75 70 73 65  ion from an upse
1d510 72 74 20 2a 2f 0a 20 20 7d 20 75 4e 43 3b 0a 20  rt */.  } uNC;. 
1d520 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
1d530 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75  ext;  /* Next ou
1d540 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74  ter name context
1d550 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65  .  NULL for oute
1d560 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  rmost */.  int n
1d570 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
1d580 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d  /* Number of nam
1d590 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74  es resolved by t
1d5a0 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  his context */. 
1d5b0 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
1d5c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1d5d0 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e  of errors encoun
1d5e0 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f  tered while reso
1d5f0 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20  lving names */. 
1d600 20 69 6e 74 20 6e 63 46 6c 61 67 73 3b 20 20 20   int ncFlags;   
1d610 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72        /* Zero or
1d620 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73   more NC_* flags
1d630 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a   defined below *
1d640 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 57 69 6e  /.  Select *pWin
1d650 53 65 6c 65 63 74 3b 20 20 2f 2a 20 53 45 4c 45  Select;  /* SELE
1d660 43 54 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72  CT statement for
1d670 20 61 6e 79 20 77 69 6e 64 6f 77 20 66 75 6e 63   any window func
1d680 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  tions */.};../*.
1d690 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
1d6a0 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f  s for the NameCo
1d6b0 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66  ntext, ncFlags f
1d6c0 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  ield..**.** Valu
1d6d0 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61  e constraints (a
1d6e0 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61  ll checked via a
1d6f0 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
1d700 4e 43 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20  NC_HasAgg    == 
1d710 53 46 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20  SF_HasAgg    == 
1d720 45 50 5f 41 67 67 0a 2a 2a 20 20 20 20 4e 43 5f  EP_Agg.**    NC_
1d730 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 46 5f  MinMaxAgg == SF_
1d740 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 51 4c  MinMaxAgg == SQL
1d750 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a  ITE_FUNC_MINMAX.
1d760 2a 2a 20 20 20 20 4e 43 5f 48 61 73 57 69 6e 20  **    NC_HasWin 
1d770 20 20 20 3d 3d 20 45 50 5f 57 69 6e 0a 2a 2a 0a     == EP_Win.**.
1d780 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c  */.#define NC_Al
1d790 6c 6f 77 41 67 67 20 20 30 78 30 30 30 31 20 20  lowAgg  0x0001  
1d7a0 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
1d7b0 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77  ctions are allow
1d7c0 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  ed here */.#defi
1d7d0 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20  ne NC_PartIdx   
1d7e0 30 78 30 30 30 32 20 20 2f 2a 20 54 72 75 65 20  0x0002  /* True 
1d7f0 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70  if resolving a p
1d800 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45  artial index WHE
1d810 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  RE */.#define NC
1d820 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 30 30  _IsCheck   0x000
1d830 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  4  /* True if re
1d840 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e  solving names in
1d850 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61   a CHECK constra
1d860 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  int */.#define N
1d870 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30  C_InAggFunc 0x00
1d880 30 38 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61  08  /* True if a
1d890 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e  nalyzing argumen
1d8a0 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e  ts to an agg fun
1d8b0 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  c */.#define NC_
1d8c0 48 61 73 41 67 67 20 20 20 20 30 78 30 30 31 30  HasAgg    0x0010
1d8d0 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
1d8e0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1d8f0 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65  ions seen */.#de
1d900 66 69 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20  fine NC_IdxExpr 
1d910 20 20 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75    0x0020  /* Tru
1d920 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63  e if resolving c
1d930 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45  olumns of CREATE
1d940 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e   INDEX */.#defin
1d950 65 20 4e 43 5f 56 61 72 53 65 6c 65 63 74 20 30  e NC_VarSelect 0
1d960 78 30 30 34 30 20 20 2f 2a 20 41 20 63 6f 72 72  x0040  /* A corr
1d970 65 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20  elated subquery 
1d980 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f  has been seen */
1d990 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 45 4c 69  .#define NC_UELi
1d9a0 73 74 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a  st    0x0080  /*
1d9b0 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70 45 4c   True if uNC.pEL
1d9c0 69 73 74 20 69 73 20 75 73 65 64 20 2a 2f 0a 23  ist is used */.#
1d9d0 64 65 66 69 6e 65 20 4e 43 5f 55 41 67 67 49 6e  define NC_UAggIn
1d9e0 66 6f 20 20 30 78 30 31 30 30 20 20 2f 2a 20 54  fo  0x0100  /* T
1d9f0 72 75 65 20 69 66 20 75 4e 43 2e 70 41 67 67 49  rue if uNC.pAggI
1da00 6e 66 6f 20 69 73 20 75 73 65 64 20 2a 2f 0a 23  nfo is used */.#
1da10 64 65 66 69 6e 65 20 4e 43 5f 55 55 70 73 65 72  define NC_UUpser
1da20 74 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20 54  t   0x0200  /* T
1da30 72 75 65 20 69 66 20 75 4e 43 2e 70 55 70 73 65  rue if uNC.pUpse
1da40 72 74 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64  rt is used */.#d
1da50 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41  efine NC_MinMaxA
1da60 67 67 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69  gg 0x1000  /* mi
1da70 6e 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65 73  n/max aggregates
1da80 20 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65   seen.  See note
1da90 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e   above */.#defin
1daa0 65 20 4e 43 5f 43 6f 6d 70 6c 65 78 20 20 20 30  e NC_Complex   0
1dab0 78 32 30 30 30 20 20 2f 2a 20 54 72 75 65 20 69  x2000  /* True i
1dac0 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20  f a function or 
1dad0 73 75 62 71 75 65 72 79 20 73 65 65 6e 20 2a 2f  subquery seen */
1dae0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f  .#define NC_Allo
1daf0 77 57 69 6e 20 20 30 78 34 30 30 30 20 20 2f 2a  wWin  0x4000  /*
1db00 20 57 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   Window function
1db10 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65  s are allowed he
1db20 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  re */.#define NC
1db30 5f 48 61 73 57 69 6e 20 20 20 20 30 78 38 30 30  _HasWin    0x800
1db40 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72  0  /* One or mor
1db50 65 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  e window functio
1db60 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  ns seen */.#defi
1db70 6e 65 20 4e 43 5f 49 73 44 44 4c 20 20 20 20 30  ne NC_IsDDL    0
1db80 78 31 30 30 30 30 20 20 2f 2a 20 52 65 73 6f 6c  x10000  /* Resol
1db90 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20  ving names in a 
1dba0 43 52 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74  CREATE statement
1dbb0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
1dbc0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
1dbd0 6c 6c 6f 77 69 6e 67 20 6f 62 6a 65 63 74 20 64  llowing object d
1dbe0 65 73 63 72 69 62 65 73 20 61 20 73 69 6e 67 6c  escribes a singl
1dbf0 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 0a 2a 2a  e ON CONFLICT.**
1dc00 20 63 6c 61 75 73 65 20 69 6e 20 61 6e 20 75 70   clause in an up
1dc10 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sert..**.** The 
1dc20 70 55 70 73 65 72 74 54 61 72 67 65 74 20 66 69  pUpsertTarget fi
1dc30 65 6c 64 20 69 73 20 6f 6e 6c 79 20 73 65 74 20  eld is only set 
1dc40 69 66 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  if the ON CONFLI
1dc50 43 54 20 63 6c 61 75 73 65 20 69 6e 63 6c 75 64  CT clause includ
1dc60 65 73 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74  es.** conflict-t
1dc70 61 72 67 65 74 20 63 6c 61 75 73 65 2e 20 20 28  arget clause.  (
1dc80 49 6e 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 28  In "ON CONFLICT(
1dc90 61 2c 62 29 22 20 74 68 65 20 22 28 61 2c 62 29  a,b)" the "(a,b)
1dca0 22 20 69 73 20 74 68 65 0a 2a 2a 20 63 6f 6e 66  " is the.** conf
1dcb0 6c 69 63 74 2d 74 61 72 67 65 74 20 63 6c 61 75  lict-target clau
1dcc0 73 65 2e 29 20 20 54 68 65 20 70 55 70 73 65 72  se.)  The pUpser
1dcd0 74 54 61 72 67 65 74 57 68 65 72 65 20 69 73 20  tTargetWhere is 
1dce0 74 68 65 20 6f 70 74 69 6f 6e 61 6c 0a 2a 2a 20  the optional.** 
1dcf0 57 48 45 52 45 20 63 6c 61 75 73 65 20 75 73 65  WHERE clause use
1dd00 64 20 74 6f 20 69 64 65 6e 74 69 66 79 20 70 61  d to identify pa
1dd10 72 74 69 61 6c 20 75 6e 69 71 75 65 20 69 6e 64  rtial unique ind
1dd20 65 78 65 73 2e 0a 2a 2a 0a 2a 2a 20 70 55 70 73  exes..**.** pUps
1dd30 65 72 74 53 65 74 20 69 73 20 74 68 65 20 6c 69  ertSet is the li
1dd40 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 3d 65 78 70  st of column=exp
1dd50 72 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 55  r terms of the U
1dd60 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
1dd70 20 0a 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74   .** The pUpsert
1dd80 53 65 74 20 66 69 65 6c 64 20 69 73 20 4e 55 4c  Set field is NUL
1dd90 4c 20 66 6f 72 20 61 20 4f 4e 20 43 4f 4e 46 4c  L for a ON CONFL
1dda0 49 43 54 20 44 4f 20 4e 4f 54 48 49 4e 47 2e 20  ICT DO NOTHING. 
1ddb0 20 54 68 65 0a 2a 2a 20 70 55 70 73 65 72 74 57   The.** pUpsertW
1ddc0 68 65 72 65 20 69 73 20 74 68 65 20 57 48 45 52  here is the WHER
1ddd0 45 20 63 6c 61 75 73 65 20 66 6f 72 20 74 68 65  E clause for the
1dde0 20 55 50 44 41 54 45 20 61 6e 64 20 69 73 20 4e   UPDATE and is N
1ddf0 55 4c 4c 20 69 66 20 74 68 65 0a 2a 2a 20 57 48  ULL if the.** WH
1de00 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 6f 6d  ERE clause is om
1de10 69 74 74 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  itted..*/.struct
1de20 20 55 70 73 65 72 74 20 7b 0a 20 20 45 78 70 72   Upsert {.  Expr
1de30 4c 69 73 74 20 2a 70 55 70 73 65 72 74 54 61 72  List *pUpsertTar
1de40 67 65 74 3b 20 20 2f 2a 20 4f 70 74 69 6f 6e 61  get;  /* Optiona
1de50 6c 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  l description of
1de60 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64   conflicting ind
1de70 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55  ex */.  Expr *pU
1de80 70 73 65 72 74 54 61 72 67 65 74 57 68 65 72 65  psertTargetWhere
1de90 3b 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73  ; /* WHERE claus
1dea0 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e  e for partial in
1deb0 64 65 78 20 74 61 72 67 65 74 73 20 2a 2f 0a 20  dex targets */. 
1dec0 20 45 78 70 72 4c 69 73 74 20 2a 70 55 70 73 65   ExprList *pUpse
1ded0 72 74 53 65 74 3b 20 20 20 20 20 2f 2a 20 54 68  rtSet;     /* Th
1dee0 65 20 53 45 54 20 63 6c 61 75 73 65 20 66 72 6f  e SET clause fro
1def0 6d 20 61 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  m an ON CONFLICT
1df00 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 45 78 70   UPDATE */.  Exp
1df10 72 20 2a 70 55 70 73 65 72 74 57 68 65 72 65 3b  r *pUpsertWhere;
1df20 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20         /* WHERE 
1df30 63 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20 4f  clause for the O
1df40 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54  N CONFLICT UPDAT
1df50 45 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 66 69  E */.  /* The fi
1df60 65 6c 64 73 20 61 62 6f 76 65 20 63 6f 6d 70 72  elds above compr
1df70 69 73 65 20 74 68 65 20 70 61 72 73 65 20 74 72  ise the parse tr
1df80 65 65 20 66 6f 72 20 74 68 65 20 75 70 73 65 72  ee for the upser
1df90 74 20 63 6c 61 75 73 65 2e 0a 20 20 2a 2a 20 54  t clause..  ** T
1dfa0 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
1dfb0 61 72 65 20 75 73 65 64 20 74 6f 20 74 72 61 6e  are used to tran
1dfc0 73 66 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  sfer information
1dfd0 20 66 72 6f 6d 20 74 68 65 20 49 4e 53 45 52 54   from the INSERT
1dfe0 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67  .  ** processing
1dff0 20 64 6f 77 6e 20 69 6e 74 6f 20 74 68 65 20 55   down into the U
1e000 50 44 41 54 45 20 70 72 6f 63 65 73 73 69 6e 67  PDATE processing
1e010 20 77 68 69 6c 65 20 67 65 6e 65 72 61 74 69 6e   while generatin
1e020 67 20 63 6f 64 65 2e 0a 20 20 2a 2a 20 55 70 73  g code..  ** Ups
1e030 65 72 74 20 6f 77 6e 73 20 74 68 65 20 6d 65 6d  ert owns the mem
1e040 6f 72 79 20 61 6c 6c 6f 63 61 74 65 64 20 61 62  ory allocated ab
1e050 6f 76 65 2c 20 62 75 74 20 6e 6f 74 20 74 68 65  ove, but not the
1e060 20 6d 65 6d 6f 72 79 20 62 65 6c 6f 77 2e 20 2a   memory below. *
1e070 2f 0a 20 20 49 6e 64 65 78 20 2a 70 55 70 73 65  /.  Index *pUpse
1e080 72 74 49 64 78 3b 20 20 20 20 20 20 20 20 2f 2a  rtIdx;        /*
1e090 20 43 6f 6e 73 74 72 61 69 6e 74 20 74 68 61 74   Constraint that
1e0a0 20 70 55 70 73 65 72 74 54 61 72 67 65 74 20 69   pUpsertTarget i
1e0b0 64 65 6e 74 69 66 69 65 73 20 2a 2f 0a 20 20 53  dentifies */.  S
1e0c0 72 63 4c 69 73 74 20 2a 70 55 70 73 65 72 74 53  rcList *pUpsertS
1e0d0 72 63 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c  rc;      /* Tabl
1e0e0 65 20 74 6f 20 62 65 20 75 70 64 61 74 65 64 20  e to be updated 
1e0f0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 44 61 74 61  */.  int regData
1e100 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1e110 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72  * First register
1e120 20 68 6f 6c 64 69 6e 67 20 61 72 72 61 79 20 6f   holding array o
1e130 66 20 56 41 4c 55 45 53 20 2a 2f 0a 20 20 69 6e  f VALUES */.  in
1e140 74 20 69 44 61 74 61 43 75 72 3b 20 20 20 20 20  t iDataCur;     
1e150 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1e160 20 6f 66 20 74 68 65 20 64 61 74 61 20 63 75 72   of the data cur
1e170 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 69 49 64  sor */.  int iId
1e180 78 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20  xCur;           
1e190 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74     /* Index of t
1e1a0 68 65 20 66 69 72 73 74 20 69 6e 64 65 78 20 63  he first index c
1e1b0 75 72 73 6f 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ursor */.};../*.
1e1c0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
1e1d0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1e1e0 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
1e1f0 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69  ns all informati
1e200 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20  on.** needed to 
1e210 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f  generate code fo
1e220 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43  r a single SELEC
1e230 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a  T statement..**.
1e240 2a 2a 20 53 65 65 20 74 68 65 20 68 65 61 64 65  ** See the heade
1e250 72 20 63 6f 6d 6d 65 6e 74 20 6f 6e 20 74 68 65  r comment on the
1e260 20 63 6f 6d 70 75 74 65 4c 69 6d 69 74 52 65 67   computeLimitReg
1e270 69 73 74 65 72 73 28 29 20 72 6f 75 74 69 6e 65  isters() routine
1e280 20 66 6f 72 20 61 0a 2a 2a 20 64 65 74 61 69 6c   for a.** detail
1e290 65 64 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f  ed description o
1e2a0 66 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66  f the meaning of
1e2b0 20 74 68 65 20 69 4c 69 6d 69 74 20 61 6e 64 20   the iLimit and 
1e2c0 69 4f 66 66 73 65 74 20 66 69 65 6c 64 73 2e 0a  iOffset fields..
1e2d0 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70  **.** addrOpenEp
1e2e0 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e  hm[] entries con
1e2f0 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73  tain the address
1e300 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   of OP_OpenEphem
1e310 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  eral opcodes..**
1e320 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73   These addresses
1e330 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20   must be stored 
1e340 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67  so that we can g
1e350 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20  o back and fill 
1e360 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59  in.** the P4_KEY
1e370 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61  INFO and P2 para
1e380 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e  meters later.  N
1e390 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e  either the KeyIn
1e3a0 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75  fo nor.** the nu
1e3b0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1e3c0 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d  in P2 can be com
1e3d0 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d  puted at the sam
1e3e0 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65  e time.** as the
1e3f0 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73   OP_OpenEphm ins
1e400 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65  truction is code
1e410 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a  d because not.**
1e420 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74   enough informat
1e430 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f  ion about the co
1e440 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20  mpound query is 
1e450 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f  known at that po
1e460 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49  int..** The KeyI
1e470 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
1e480 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20  Tran[0] and [1] 
1e490 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
1e4a0 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20  ng sequences.** 
1e4b0 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73  for the result s
1e4c0 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  et.  The KeyInfo
1e4d0 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68   for addrOpenEph
1e4e0 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f  m[2] contains co
1e4f0 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65  llating.** seque
1e500 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44  nces for the ORD
1e510 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f  ER BY clause..*/
1e520 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b  .struct Select {
1e530 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
1e540 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  ist;      /* The
1e550 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72   fields of the r
1e560 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70  esult */.  u8 op
1e570 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e580 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f    /* One of: TK_
1e590 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f  UNION TK_ALL TK_
1e5a0 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43  INTERSECT TK_EXC
1e5b0 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  EPT */.  LogEst 
1e5c0 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20  nSelectRow;     
1e5d0 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d  /* Estimated num
1e5e0 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  ber of result ro
1e5f0 77 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46  ws */.  u32 selF
1e600 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f  lags;          /
1e610 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76  * Various SF_* v
1e620 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69  alues */.  int i
1e630 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20  Limit, iOffset; 
1e640 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
1e650 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49  sters holding LI
1e660 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75  MIT & OFFSET cou
1e670 6e 74 65 72 73 20 2a 2f 0a 20 20 75 33 32 20 73  nters */.  u32 s
1e680 65 6c 49 64 3b 20 20 20 20 20 20 20 20 20 20 20  elId;           
1e690 20 20 2f 2a 20 55 6e 69 71 75 65 20 69 64 65 6e    /* Unique iden
1e6a0 74 69 66 69 65 72 20 6e 75 6d 62 65 72 20 66 6f  tifier number fo
1e6b0 72 20 74 68 69 73 20 53 45 4c 45 43 54 20 2a 2f  r this SELECT */
1e6c0 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45  .  int addrOpenE
1e6d0 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f  phm[2];   /* OP_
1e6e0 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65  OpenEphem opcode
1e6f0 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69  s related to thi
1e700 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72  s select */.  Sr
1e710 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20  cList *pSrc;    
1e720 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d       /* The FROM
1e730 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
1e740 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
1e750 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
1e760 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
1e770 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
1e780 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50      /* The GROUP
1e790 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
1e7a0 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20  Expr *pHaving;  
1e7b0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41         /* The HA
1e7c0 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20  VING clause */. 
1e7d0 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65   ExprList *pOrde
1e7e0 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f  rBy;    /* The O
1e7f0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a  RDER BY clause *
1e800 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69  /.  Select *pPri
1e810 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72  or;        /* Pr
1e820 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20  ior select in a 
1e830 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20  compound select 
1e840 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53  statement */.  S
1e850 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20  elect *pNext;   
1e860 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65        /* Next se
1e870 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74  lect to the left
1e880 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a   in a compound *
1e890 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74  /.  Expr *pLimit
1e8a0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49  ;          /* LI
1e8b0 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  MIT expression. 
1e8c0 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75  NULL means not u
1e8d0 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a  sed. */.  With *
1e8e0 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20  pWith;          
1e8f0 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20   /* WITH clause 
1e900 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73  attached to this
1e910 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c   select. Or NULL
1e920 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  . */.#ifndef SQL
1e930 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46  ITE_OMIT_WINDOWF
1e940 55 4e 43 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57  UNC.  Window *pW
1e950 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  in;          /* 
1e960 4c 69 73 74 20 6f 66 20 77 69 6e 64 6f 77 20 66  List of window f
1e970 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 57 69  unctions */.  Wi
1e980 6e 64 6f 77 20 2a 70 57 69 6e 44 65 66 6e 3b 20  ndow *pWinDefn; 
1e990 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
1e9a0 6e 61 6d 65 64 20 77 69 6e 64 6f 77 20 64 65 66  named window def
1e9b0 69 6e 69 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64  initions */.#end
1e9c0 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  if.};../*.** All
1e9d0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
1e9e0 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e  Select.selFlags.
1e9f0 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69    The "SF" prefi
1ea00 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20  x stands for.** 
1ea10 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a  "Select Flag"..*
1ea20 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
1ea30 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63  raints (all chec
1ea40 6b 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ked via assert()
1ea50 29 0a 2a 2a 20 20 20 20 20 53 46 5f 48 61 73 41  ).**     SF_HasA
1ea60 67 67 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73  gg     == NC_Has
1ea70 41 67 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69  Agg.**     SF_Mi
1ea80 6e 4d 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d  nMaxAgg  == NC_M
1ea90 69 6e 4d 61 78 41 67 67 20 20 20 20 20 3d 3d 20  inMaxAgg     == 
1eaa0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
1eab0 41 58 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69 78  AX.**     SF_Fix
1eac0 65 64 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52 45  edLimit == WHERE
1ead0 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64  _USE_LIMIT.*/.#d
1eae0 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63  efine SF_Distinc
1eaf0 74 20 20 20 20 20 20 20 30 78 30 30 30 30 31 20  t       0x00001 
1eb00 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c   /* Output shoul
1eb10 64 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f  d be DISTINCT */
1eb20 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20  .#define SF_All 
1eb30 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
1eb40 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20  02  /* Includes 
1eb50 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20  the ALL keyword 
1eb60 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65  */.#define SF_Re
1eb70 73 6f 6c 76 65 64 20 20 20 20 20 20 20 30 78 30  solved       0x0
1eb80 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66  0004  /* Identif
1eb90 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72  iers have been r
1eba0 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69  esolved */.#defi
1ebb0 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20  ne SF_Aggregate 
1ebc0 20 20 20 20 20 30 78 30 30 30 30 38 20 20 2f 2a       0x00008  /*
1ebd0 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 20 66 75   Contains agg fu
1ebe0 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f  nctions or a GRO
1ebf0 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  UP BY */.#define
1ec00 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20 20   SF_HasAgg      
1ec10 20 20 20 30 78 30 30 30 31 30 20 20 2f 2a 20 43     0x00010  /* C
1ec20 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
1ec30 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  e functions */.#
1ec40 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70  define SF_UsesEp
1ec50 68 65 6d 65 72 61 6c 20 20 30 78 30 30 30 32 30  hemeral  0x00020
1ec60 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70    /* Uses the Op
1ec70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f  enEphemeral opco
1ec80 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  de */.#define SF
1ec90 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20 20 20  _Expanded       
1eca0 30 78 30 30 30 34 30 20 20 2f 2a 20 73 71 6c 69  0x00040  /* sqli
1ecb0 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28  te3SelectExpand(
1ecc0 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73  ) called on this
1ecd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48   */.#define SF_H
1ece0 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20 30 78  asTypeInfo    0x
1ecf0 30 30 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73  00080  /* FROM s
1ed00 75 62 71 75 65 72 69 65 73 20 68 61 76 65 20 54  ubqueries have T
1ed10 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f  able metadata */
1ed20 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70  .#define SF_Comp
1ed30 6f 75 6e 64 20 20 20 20 20 20 20 30 78 30 30 31  ound       0x001
1ed40 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61  00  /* Part of a
1ed50 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20   compound query 
1ed60 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61  */.#define SF_Va
1ed70 6c 75 65 73 20 20 20 20 20 20 20 20 20 30 78 30  lues         0x0
1ed80 30 32 30 30 20 20 2f 2a 20 53 79 6e 74 68 65 73  0200  /* Synthes
1ed90 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53  ized from VALUES
1eda0 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
1edb0 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65  ne SF_MultiValue
1edc0 20 20 20 20 20 30 78 30 30 34 30 30 20 20 2f 2a       0x00400  /*
1edd0 20 53 69 6e 67 6c 65 20 56 41 4c 55 45 53 20 74   Single VALUES t
1ede0 65 72 6d 20 77 69 74 68 20 6d 75 6c 74 69 70 6c  erm with multipl
1edf0 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e  e rows */.#defin
1ee00 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20  e SF_NestedFrom 
1ee10 20 20 20 20 30 78 30 30 38 30 30 20 20 2f 2a 20      0x00800  /* 
1ee20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74  Part of a parent
1ee30 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61  hesized FROM cla
1ee40 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
1ee50 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  F_MinMaxAgg     
1ee60 20 30 78 30 31 30 30 30 20 20 2f 2a 20 41 67 67   0x01000  /* Agg
1ee70 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e  regate containin
1ee80 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29  g min() or max()
1ee90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
1eea0 65 63 75 72 73 69 76 65 20 20 20 20 20 20 30 78  ecursive      0x
1eeb0 30 32 30 30 30 20 20 2f 2a 20 54 68 65 20 72 65  02000  /* The re
1eec0 63 75 72 73 69 76 65 20 70 61 72 74 20 6f 66 20  cursive part of 
1eed0 61 20 72 65 63 75 72 73 69 76 65 20 43 54 45 20  a recursive CTE 
1eee0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 46 69  */.#define SF_Fi
1eef0 78 65 64 4c 69 6d 69 74 20 20 20 20 20 30 78 30  xedLimit     0x0
1ef00 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74  4000  /* nSelect
1ef10 52 6f 77 20 73 65 74 20 62 79 20 61 20 63 6f 6e  Row set by a con
1ef20 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23  stant LIMIT */.#
1ef30 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43  define SF_MaybeC
1ef40 6f 6e 76 65 72 74 20 20 20 30 78 30 38 30 30 30  onvert   0x08000
1ef50 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72    /* Need conver
1ef60 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
1ef70 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23  oSubquery() */.#
1ef80 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72  define SF_Conver
1ef90 74 65 64 20 20 20 20 20 20 30 78 31 30 30 30 30  ted      0x10000
1efa0 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43    /* By convertC
1efb0 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1efc0 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65  ubquery() */.#de
1efd0 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65 48  fine SF_IncludeH
1efe0 69 64 64 65 6e 20 20 30 78 32 30 30 30 30 20 20  idden  0x20000  
1eff0 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69 64 64 65  /* Include hidde
1f000 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74  n columns in out
1f010 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  put */.#define S
1f020 46 5f 43 6f 6d 70 6c 65 78 52 65 73 75 6c 74 20  F_ComplexResult 
1f030 20 30 78 34 30 30 30 30 20 20 2f 2a 20 52 65 73   0x40000  /* Res
1f040 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20 73 75 62  ult contains sub
1f050 71 75 65 72 79 20 6f 72 20 66 75 6e 63 74 69 6f  query or functio
1f060 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  n */.#define SF_
1f070 57 68 65 72 65 42 65 67 69 6e 20 20 20 20 20 30  WhereBegin     0
1f080 78 38 30 30 30 30 20 20 2f 2a 20 52 65 61 6c 6c  x80000  /* Reall
1f090 79 20 61 20 57 68 65 72 65 42 65 67 69 6e 28 29  y a WhereBegin()
1f0a0 20 63 61 6c 6c 2e 20 20 44 65 62 75 67 20 4f 6e   call.  Debug On
1f0b0 6c 79 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ly */../*.** The
1f0c0 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45   results of a SE
1f0d0 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74  LECT can be dist
1f0e0 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72  ributed in sever
1f0f0 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69  al ways, as defi
1f100 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66  ned.** by one of
1f110 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
1f120 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54  acros.  The "SRT
1f130 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22  " prefix means "
1f140 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a  SELECT Result.**
1f150 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Type"..**.**   
1f160 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20    SRT_Union     
1f170 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1f180 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65  as a key in a te
1f190 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a  mporary index.**
1f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1b0 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 64 20       identified 
1f1c0 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  by pDest->iSDPar
1f1d0 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
1f1e0 5f 45 78 63 65 70 74 20 20 20 20 20 20 52 65 6d  _Except      Rem
1f1f0 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  ove results from
1f200 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69   the temporary i
1f210 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50  ndex pDest->iSDP
1f220 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  arm..**.**     S
1f230 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 53  RT_Exists      S
1f240 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f  tore a 1 in memo
1f250 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69  ry cell pDest->i
1f260 53 44 50 61 72 6d 20 69 66 20 74 68 65 20 72 65  SDParm if the re
1f270 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  sult.**         
1f280 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1f290 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a  is not empty..**
1f2a0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63  .**     SRT_Disc
1f2b0 61 72 64 20 20 20 20 20 54 68 72 6f 77 20 74 68  ard     Throw th
1f2c0 65 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20  e results away. 
1f2d0 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
1f2e0 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20   SELECT.**      
1f2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1f300 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
1f310 20 74 72 69 67 67 65 72 73 20 77 68 6f 73 65 20   triggers whose 
1f320 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a  only purpose is.
1f330 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1f340 20 20 20 20 20 20 20 74 68 65 20 73 69 64 65 2d         the side-
1f350 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74  effects of funct
1f360 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  ions..**.** All 
1f370 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65  of the above are
1f380 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20   free to ignore 
1f390 74 68 65 69 72 20 4f 52 44 45 52 20 42 59 20 63  their ORDER BY c
1f3a0 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61  lause. Those tha
1f3b0 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74  t.** follow must
1f3c0 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52   honor the ORDER
1f3d0 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a   BY clause..**.*
1f3e0 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74  *     SRT_Output
1f3f0 20 20 20 20 20 20 47 65 6e 65 72 61 74 65 20 61        Generate a
1f400 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28   row of output (
1f410 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73  using the OP_Res
1f420 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20  ultRow.**       
1f430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70                op
1f440 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20 72  code) for each r
1f450 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ow in the result
1f460 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20   set..**.**     
1f470 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
1f480 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68  Only valid if th
1f490 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 73 69  e result is a si
1f4a0 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20  ngle column..** 
1f4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4c0 20 20 20 20 53 74 6f 72 65 20 74 68 65 20 66 69      Store the fi
1f4d0 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  rst column of th
1f4e0 65 20 66 69 72 73 74 20 72 65 73 75 6c 74 20 72  e first result r
1f4f0 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ow.**           
1f500 20 20 20 20 20 20 20 20 20 20 69 6e 20 72 65 67            in reg
1f510 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
1f520 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f  Parm then abando
1f530 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20  n the rest.**   
1f540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f550 20 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20    of the query. 
1f560 20 54 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f   This destinatio
1f570 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54  n implies "LIMIT
1f580 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53   1"..**.**     S
1f590 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 54  RT_Set         T
1f5a0 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62  he result must b
1f5b0 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  e a single colum
1f5c0 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a  n.  Store each.*
1f5d0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f5e0 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73        row of res
1f5f0 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20 69  ult as the key i
1f600 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  n table pDest->i
1f610 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20  SDParm..**      
1f620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
1f630 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74  pply the affinit
1f640 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74  y pDest->affSdst
1f650 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a   before storing.
1f660 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1f670 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20         results. 
1f680 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   Used to impleme
1f690 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e  nt "IN (SELECT .
1f6a0 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ..)"..**.**     
1f6b0 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
1f6c0 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72  Create an tempor
1f6d0 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1f6e0 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f  >iSDParm and sto
1f6f0 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
1f700 20 20 20 20 20 20 20 20 20 20 74 68 65 20 72 65            the re
1f710 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20  sult there. The 
1f720 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f  cursor is left o
1f730 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20  pen after.**    
1f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f750 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69   returning.  Thi
1f760 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61  s is like SRT_Ta
1f770 62 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 0a  ble except that.
1f780 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1f790 20 20 20 20 20 20 20 74 68 69 73 20 64 65 73 74         this dest
1f7a0 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f  ination uses OP_
1f7b0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f  OpenEphemeral to
1f7c0 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20   create.**      
1f7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1f7e0 68 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a  he table first..
1f7f0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f  **.**     SRT_Co
1f800 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61  routine   Genera
1f810 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  te a co-routine 
1f820 74 68 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e  that returns a n
1f830 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20  ew row of.**    
1f840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f850 20 72 65 73 75 6c 74 73 20 65 61 63 68 20 74 69   results each ti
1f860 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64  me it is invoked
1f870 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69  .  The entry poi
1f880 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  nt.**           
1f890 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65            of the
1f8a0 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73   co-routine is s
1f8b0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
1f8c0 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  r pDest->iSDParm
1f8d0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f8e0 20 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20          and the 
1f8f0 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74  result row is st
1f900 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e  ored in pDest->n
1f910 44 65 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a  Dest registers.*
1f920 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f930 20 20 20 20 20 20 73 74 61 72 74 69 6e 67 20 77        starting w
1f940 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74  ith pDest->iSdst
1f950 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1f960 54 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72  Table       Stor
1f970 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d  e results in tem
1f980 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1f990 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1f9a0 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20      SRT_Fifo    
1f9b0 20 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65      This is like
1f9c0 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78   SRT_EphemTab ex
1f9d0 63 65 70 74 20 74 68 61 74 20 74 68 65 20 74 61  cept that the ta
1f9e0 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ble.**          
1f9f0 20 20 20 20 20 20 20 20 20 20 20 69 73 20 61 73             is as
1fa00 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79  sumed to already
1fa10 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46   be open.  SRT_F
1fa20 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20  ifo has.**      
1fa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1fa40 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72  he additional pr
1fa50 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20  operty of being 
1fa60 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a  able to ignore.*
1fa70 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1fa80 20 20 20 20 20 20 74 68 65 20 4f 52 44 45 52 20        the ORDER 
1fa90 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a  BY clause..**.**
1faa0 20 20 20 20 20 53 52 54 5f 44 69 73 74 46 69 66       SRT_DistFif
1fab0 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c  o    Store resul
1fac0 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72  ts in a temporar
1fad0 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1fae0 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20  SDParm..**      
1faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1fb00 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70  ut also use temp
1fb10 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1fb20 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a  t->iSDParm+1 as.
1fb30 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1fb40 20 20 20 20 20 20 20 61 20 72 65 63 6f 72 64 20         a record 
1fb50 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73  of all prior res
1fb60 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20  ults and ignore 
1fb70 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a  any duplicate.**
1fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb90 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65       rows.  Name
1fba0 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e   means:  "Distin
1fbb0 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20  ct Fifo"..**.** 
1fbc0 20 20 20 20 53 52 54 5f 51 75 65 75 65 20 20 20      SRT_Queue   
1fbd0 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1fbe0 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75  s in priority qu
1fbf0 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  eue pDest->iSDPa
1fc00 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20  rm (really.**   
1fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70    an index).  Ap
1fc30 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20  pend a sequence 
1fc40 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61  number so that a
1fc50 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20  ll entries.**   
1fc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc70 20 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a    are distinct..
1fc80 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
1fc90 73 74 51 75 65 75 65 20 20 20 53 74 6f 72 65 20  stQueue   Store 
1fca0 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72  results in prior
1fcb0 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d  ity queue pDest-
1fcc0 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66  >iSDParm only if
1fcd0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1fce0 20 20 20 20 20 20 20 20 74 68 65 20 73 61 6d 65          the same
1fcf0 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65   record has neve
1fd00 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65  r been stored be
1fd10 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20  fore.  The.**   
1fd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd30 20 20 69 6e 64 65 78 20 61 74 20 70 44 65 73 74    index at pDest
1fd40 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64  ->iSDParm+1 hold
1fd50 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65   all prior store
1fd60 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  s..*/.#define SR
1fd70 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31  T_Union        1
1fd80 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1fd90 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  t as keys in an 
1fda0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1fdb0 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
1fdc0 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72    2  /* Remove r
1fdd0 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49  esult from a UNI
1fde0 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ON index */.#def
1fdf0 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20  ine SRT_Exists  
1fe00 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65       3  /* Store
1fe10 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74   1 if the result
1fe20 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f   is not empty */
1fe30 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1fe40 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20  card      4  /* 
1fe50 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20  Do not save the 
1fe60 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65  results anywhere
1fe70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1fe80 46 69 66 6f 20 20 20 20 20 20 20 20 20 35 20 20  Fifo         5  
1fe90 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1fea0 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20  as data with an 
1feb0 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20  automatic rowid 
1fec0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
1fed0 69 73 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f  istFifo     6  /
1fee0 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c  * Like SRT_Fifo,
1fef0 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75   but unique resu
1ff00 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  lts only */.#def
1ff10 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20 20  ine SRT_Queue   
1ff20 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65       7  /* Store
1ff30 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75   result in an qu
1ff40 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  eue */.#define S
1ff50 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 20  RT_DistQueue    
1ff60 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51  8  /* Like SRT_Q
1ff70 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65  ueue, but unique
1ff80 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
1ff90 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42  ../* The ORDER B
1ffa0 59 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f  Y clause is igno
1ffb0 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74  red for all of t
1ffc0 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66  he above */.#def
1ffd0 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64  ine IgnorableOrd
1ffe0 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65  erby(X) ((X->eDe
1fff0 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65  st)<=SRT_DistQue
20000 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54  ue)..#define SRT
20010 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 39 20  _Output       9 
20020 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20   /* Output each 
20030 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
20040 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d  .#define SRT_Mem
20050 20 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20           10  /* 
20060 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
20070 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f  a memory cell */
20080 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74  .#define SRT_Set
20090 20 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20           11  /* 
200a0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
200b0 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
200c0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
200d0 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31 32 20  _EphemTab    12 
200e0 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73   /* Create trans
200f0 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f  ient tab and sto
20100 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  re like SRT_Tabl
20110 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
20120 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20  _Coroutine   13 
20130 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73   /* Generate a s
20140 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73  ingle row of res
20150 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ult */.#define S
20160 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31  RT_Table       1
20170 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  4  /* Store resu
20180 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
20190 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
201a0 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  id */../*.** An 
201b0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
201c0 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65   object describe
201d0 73 20 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f  s where to put o
201e0 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  f the results of
201f0 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61  .** a SELECT sta
20200 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  tement..*/.struc
20210 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20  t SelectDest {. 
20220 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20   u8 eDest;      
20230 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20        /* How to 
20240 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72  dispose of the r
20250 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53  esults.  On of S
20260 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20  RT_* above. */. 
20270 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20   int iSDParm;   
20280 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d        /* A param
20290 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68 65  eter used by the
202a0 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20   eDest disposal 
202b0 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20  method */.  int 
202c0 69 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20  iSdst;          
202d0 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
202e0 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73 20  r where results 
202f0 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20  are written */. 
20300 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20   int nSdst;     
20310 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20320 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
20330 6f 63 61 74 65 64 20 2a 2f 0a 20 20 63 68 61 72  ocated */.  char
20340 20 2a 7a 41 66 66 53 64 73 74 3b 20 20 20 20 20   *zAffSdst;     
20350 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65   /* Affinity use
20360 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52  d when eDest==SR
20370 54 5f 53 65 74 20 2a 2f 0a 20 20 45 78 70 72 4c  T_Set */.  ExprL
20380 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
20390 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66  /* Key columns f
203a0 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64  or SRT_Queue and
203b0 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a   SRT_DistQueue *
203c0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69  /.};../*.** Duri
203d0 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69  ng code generati
203e0 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73  on of statements
203f0 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73   that do inserts
20400 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d   into AUTOINCREM
20410 45 4e 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74  ENT.** tables, t
20420 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66  he following inf
20430 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61  ormation is atta
20440 63 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c  ched to the Tabl
20450 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a  e.u.autoInc.p.**
20460 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68   pointer of each
20470 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74   autoincrement t
20480 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73  able to record s
20490 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61  ome side informa
204a0 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65  tion that.** the
204b0 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20   code generator 
204c0 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20  needs.  We have 
204d0 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c  to keep per-tabl
204e0 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a  e autoincrement.
204f0 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ** information i
20500 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61  n case inserts a
20510 72 65 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74  re done within t
20520 72 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65  riggers.  Trigge
20530 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72  rs do not.** nor
20540 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65  mally coordinate
20550 20 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65   their activitie
20560 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65  s, but we do nee
20570 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20  d to coordinate 
20580 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61  the.** loading a
20590 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74  nd saving of aut
205a0 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72  oincrement infor
205b0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
205c0 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a  t AutoincInfo {.
205d0 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70    AutoincInfo *p
205e0 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20  Next;   /* Next 
205f0 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20  info block in a 
20600 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c  list of them all
20610 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
20620 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  b;          /* T
20630 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62  able this info b
20640 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a  lock refers to *
20650 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
20660 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
20670 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44  ex in sqlite3.aD
20680 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20  b[] of database 
20690 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a  holding pTab */.
206a0 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20    int regCtr;   
206b0 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
206c0 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69  y register holdi
206d0 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75  ng the rowid cou
206e0 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  nter */.};../*.*
206f0 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69  * At least one i
20700 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
20710 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
20720 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  re is created fo
20730 72 20 65 61 63 68 0a 2a 2a 20 74 72 69 67 67 65  r each.** trigge
20740 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69  r that may be fi
20750 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e  red while parsin
20760 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44  g an INSERT, UPD
20770 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a  ATE or DELETE.**
20780 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20   statement. All 
20790 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65  such objects are
207a0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c   stored in the l
207b0 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
207c0 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54  d at.** Parse.pT
207d0 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65  riggerPrg and de
207e0 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65  leted once state
207f0 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  ment compilation
20800 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d   has been.** com
20810 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20  pleted..**.** A 
20820 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d  Vdbe sub-program
20830 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73   that implements
20840 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48   the body and WH
20850 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69  EN clause of tri
20860 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50  gger.** TriggerP
20870 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73  rg.pTrigger, ass
20880 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20  uming a default 
20890 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
208a0 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72  se of.** Trigger
208b0 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73  Prg.orconf, is s
208c0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69  tored in the Tri
208d0 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d  ggerPrg.pProgram
208e0 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68   variable..** Th
208f0 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  e Parse.pTrigger
20900 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63  Prg list never c
20910 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72  ontains two entr
20920 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  ies with the sam
20930 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20  e.** values for 
20940 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e  both pTrigger an
20950 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20  d orconf..**.** 
20960 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  The TriggerPrg.a
20970 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61  Colmask[0] varia
20980 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20  ble is set to a 
20990 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  mask of old.* co
209a0 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65  lumns.** accesse
209b0 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66  d (or set to 0 f
209c0 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65  or triggers fire
209d0 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66  d as a result of
209e0 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74 65   INSERT.** state
209f0 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c  ments). Similarl
20a00 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72  y, the TriggerPr
20a10 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61  g.aColmask[1] va
20a20 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
20a30 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65  .** a mask of ne
20a40 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64  w.* columns used
20a50 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
20a60 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67  .*/.struct Trigg
20a70 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65  erPrg {.  Trigge
20a80 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20  r *pTrigger;    
20a90 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69    /* Trigger thi
20aa0 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f  s program was co
20ab0 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72  ded from */.  Tr
20ac0 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b  iggerPrg *pNext;
20ad0 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e        /* Next en
20ae0 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72  try in Parse.pTr
20af0 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f  iggerPrg list */
20b00 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
20b10 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72  Program;   /* Pr
20b20 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69  ogram implementi
20b30 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f  ng pTrigger/orco
20b40 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f  nf */.  int orco
20b50 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nf;             
20b60 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
20b70 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f  NFLICT policy */
20b80 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b  .  u32 aColmask[
20b90 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  2];        /* Ma
20ba0 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65  sks of old.*, ne
20bb0 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65  w.* columns acce
20bc0 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ssed */.};../*.*
20bd0 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61  * The yDbMask da
20be0 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62  tatype for the b
20bf0 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74  itmask of all at
20c00 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
20c10 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
20c20 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
20c30 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
20c40 65 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b  ed char yDbMask[
20c50 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  (SQLITE_MAX_ATTA
20c60 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65  CHED+9)/8];.# de
20c70 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28  fine DbMaskTest(
20c80 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49  M,I)    (((M)[(I
20c90 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29  )/8]&(1<<((I)&7)
20ca0 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  ))!=0).# define 
20cb0 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20  DbMaskZero(M)   
20cc0 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c     memset((M),0,
20cd0 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66  sizeof(M)).# def
20ce0 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c  ine DbMaskSet(M,
20cf0 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38  I)     (M)[(I)/8
20d00 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a  ]|=(1<<((I)&7)).
20d10 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41  # define DbMaskA
20d20 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69  llZero(M)   sqli
20d30 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
20d40 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  (M).# define DbM
20d50 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
20d60 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c  (sqlite3DbMaskAl
20d70 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c  lZero(M)==0).#el
20d80 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73  se.  typedef uns
20d90 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73  igned int yDbMas
20da0 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  k;.# define DbMa
20db0 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
20dc0 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29  ((M)&(((yDbMask)
20dd0 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20  1)<<(I)))!=0).# 
20de0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
20df0 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a  o(M)      (M)=0.
20e00 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53  # define DbMaskS
20e10 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c  et(M,I)     (M)|
20e20 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  =(((yDbMask)1)<<
20e30 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  (I)).# define Db
20e40 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20  MaskAllZero(M)  
20e50 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65   (M)==0.# define
20e60 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d   DbMaskNonZero(M
20e70 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69  )   (M)!=0.#endi
20e80 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20  f../*.** An SQL 
20e90 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  parser context. 
20ea0 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20   A copy of this 
20eb0 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
20ec0 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  sed through.** t
20ed0 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f  he parser and do
20ee0 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20  wn into all the 
20ef0 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f  parser action ro
20f00 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74  utine in order t
20f10 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e  o.** carry aroun
20f20 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  d information th
20f30 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20  at is global to 
20f40 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65  the entire parse
20f50 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75  ..**.** The stru
20f60 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64  cture is divided
20f70 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e   into two parts.
20f80 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65    When the parse
20f90 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65  r and code.** ge
20fa0 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d  nerate call them
20fb0 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65  selves recursive
20fc0 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61  ly, the first pa
20fd0 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74  rt of the struct
20fe0 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61  ure.** is consta
20ff0 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e  nt but the secon
21000 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20  d part is reset 
21010 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
21020 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65   and end of.** e
21030 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a  ach recursion..*
21040 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c  *.** The nTableL
21050 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f  ock and aTableLo
21060 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  ck variables are
21070 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68   only used if th
21080 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 0a 2a  e shared-cache.*
21090 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61  * feature is ena
210a0 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33  bled (if sqlite3
210b0 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64  Tsd()->useShared
210c0 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54  Data is true). T
210d0 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  hey are.** used 
210e0 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74  to store the set
210f0 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20   of table-locks 
21100 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
21110 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a  statement being.
21120 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e  ** compiled. Fun
21130 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62  ction sqlite3Tab
21140 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64  leLock() is used
21150 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20   to add entries 
21160 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a  to the.** list..
21170 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20  */.struct Parse 
21180 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
21190 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
211a0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74  main database st
211b0 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61  ructure */.  cha
211c0 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20  r *zErrMsg;     
211d0 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65    /* An error me
211e0 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20  ssage */.  Vdbe 
211f0 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
21200 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72  /* An engine for
21210 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62   executing datab
21220 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a  ase bytecode */.
21230 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
21240 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e         /* Return
21250 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75   code from execu
21260 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c  tion */.  u8 col
21270 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f  NamesSet;      /
21280 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f  * TRUE after OP_
21290 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62  ColumnName has b
212a0 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56  een issued to pV
212b0 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63  dbe */.  u8 chec
212c0 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a  kSchema;      /*
212d0 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63   Causes schema c
212e0 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65  ookie check afte
212f0 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20  r an error */.  
21300 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20  u8 nested;      
21310 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
21320 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74  f nested calls t
21330 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64  o the parser/cod
21340 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20  e generator */. 
21350 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20   u8 nTempReg;   
21360 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21370 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  of temporary reg
21380 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52  isters in aTempR
21390 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d  eg[] */.  u8 isM
213a0 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f  ultiWrite;     /
213b0 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
213c0 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69  ent may modify/i
213d0 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72  nsert multiple r
213e0 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41  ows */.  u8 mayA
213f0 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  bort;         /*
21400 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
21410 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20  nt may throw an 
21420 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20  ABORT exception 
21430 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f  */.  u8 hasCompo
21440 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65  und;      /* Nee
21450 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76  d to invoke conv
21460 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
21470 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
21480 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63  .  u8 okConstFac
21490 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f  tor;    /* OK to
214a0 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73   factor out cons
214b0 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64 69  tants */.  u8 di
214c0 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20  sableLookaside; 
214d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d  /* Number of tim
214e0 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73  es lookaside has
214f0 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20 2a   been disabled *
21500 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 56 74  /.  u8 disableVt
21510 61 62 3b 20 20 20 20 20 20 2f 2a 20 44 69 73 61  ab;      /* Disa
21520 62 6c 65 20 61 6c 6c 20 76 69 72 74 75 61 6c 20  ble all virtual 
21530 74 61 62 6c 65 73 20 66 6f 72 20 74 68 69 73 20  tables for this 
21540 70 61 72 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  parse */.  int n
21550 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
21560 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74  /* Size of the t
21570 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
21580 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
21590 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20   iRangeReg;     
215a0 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73    /* First regis
215b0 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  ter in temporary
215c0 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
215d0 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
215e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
215f0 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65  ber of errors se
21600 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62  en */.  int nTab
21610 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
21620 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f  Number of previo
21630 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56  usly allocated V
21640 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20  DBE cursors */. 
21650 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
21660 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21670 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
21680 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
21690 20 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20   int szOpAlloc; 
216a0 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f        /* Bytes o
216b0 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 61  f memory space a
216c0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62  llocated for Vdb
216d0 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  e.aOp[] */.  int
216e0 20 69 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20   iSelfTab;      
216f0 20 20 2f 2a 20 54 61 62 6c 65 20 61 73 73 6f 63    /* Table assoc
21700 69 61 74 65 64 20 77 69 74 68 20 61 6e 20 69 6e  iated with an in
21710 64 65 78 20 6f 6e 20 65 78 70 72 2c 20 6f 72 20  dex on expr, or 
21720 6e 65 67 61 74 69 76 65 0a 20 20 20 20 20 20 20  negative.       
21730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21740 2a 2a 20 6f 66 20 74 68 65 20 62 61 73 65 20 72  ** of the base r
21750 65 67 69 73 74 65 72 20 64 75 72 69 6e 67 20 63  egister during c
21760 68 65 63 6b 2d 63 6f 6e 73 74 72 61 69 6e 74 20  heck-constraint 
21770 65 76 61 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  eval */.  int nL
21780 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  abel;          /
21790 2a 20 54 68 65 20 2a 6e 65 67 61 74 69 76 65 2a  * The *negative*
217a0 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   of the number o
217b0 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f  f labels used */
217c0 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 41 6c 6c  .  int nLabelAll
217d0 6f 63 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  oc;     /* Numbe
217e0 72 20 6f 66 20 73 6c 6f 74 73 20 69 6e 20 61 4c  r of slots in aL
217f0 61 62 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  abel */.  int *a
21800 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f  Label;         /
21810 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20  * Space to hold 
21820 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20  the labels */.  
21830 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74  ExprList *pConst
21840 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74  Expr;/* Constant
21850 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
21860 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69    Token constrai
21870 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f  ntName;/* Name o
21880 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  f the constraint
21890 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67   currently being
218a0 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62   parsed */.  yDb
218b0 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20  Mask writeMask; 
218c0 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69    /* Start a wri
218d0 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f  te transaction o
218e0 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65  n these database
218f0 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63  s */.  yDbMask c
21900 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42  ookieMask;  /* B
21910 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61  itmask of schema
21920 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61   verified databa
21930 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  ses */.  int reg
21940 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a  Rowid;        /*
21950 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
21960 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54  g rowid of CREAT
21970 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f  E TABLE entry */
21980 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20  .  int regRoot; 
21990 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
219a0 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74  ter holding root
219b0 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
219c0 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a   new objects */.
219d0 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20    int nMaxArg;  
219e0 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72         /* Max ar
219f0 67 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65  gs passed to use
21a00 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75  r function by su
21a10 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69  b-program */.  i
21a20 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20  nt nSelect;     
21a30 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
21a40 20 53 45 4c 45 43 54 20 73 74 6d 74 73 2e 20 43   SELECT stmts. C
21a50 6f 75 6e 74 65 72 20 66 6f 72 20 53 65 6c 65 63  ounter for Selec
21a60 74 2e 73 65 6c 49 64 20 2a 2f 0a 23 69 66 6e 64  t.selId */.#ifnd
21a70 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
21a80 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e  HARED_CACHE.  in
21a90 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20  t nTableLock;   
21aa0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
21ab0 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c  f locks in aTabl
21ac0 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65  eLock */.  Table
21ad0 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b  Lock *aTableLock
21ae0 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61  ; /* Required ta
21af0 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68  ble locks for sh
21b00 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
21b10 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f  */.#endif.  Auto
21b20 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20  incInfo *pAinc; 
21b30 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
21b40 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d  about AUTOINCREM
21b50 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  ENT counters */.
21b60 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76    Parse *pToplev
21b70 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20  el;    /* Parse 
21b80 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61  structure for ma
21b90 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e  in program (or N
21ba0 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ULL) */.  Table 
21bb0 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f  *pTriggerTab;  /
21bc0 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73  * Table triggers
21bd0 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64   are being coded
21be0 20 66 6f 72 20 2a 2f 0a 20 20 50 61 72 73 65 20   for */.  Parse 
21bf0 2a 70 50 61 72 65 6e 74 50 61 72 73 65 3b 20 2f  *pParentParse; /
21c00 2a 20 50 61 72 65 6e 74 20 70 61 72 73 65 72 20  * Parent parser 
21c10 69 66 20 74 68 69 73 20 70 61 72 73 65 72 20 69  if this parser i
21c20 73 20 6e 65 73 74 65 64 20 2a 2f 0a 20 20 69 6e  s nested */.  in
21c30 74 20 61 64 64 72 43 72 54 61 62 3b 20 20 20 20  t addrCrTab;    
21c40 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
21c50 20 4f 50 5f 43 72 65 61 74 65 42 74 72 65 65 20   OP_CreateBtree 
21c60 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45  opcode on CREATE
21c70 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20   TABLE */.  u32 
21c80 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20  nQueryLoop;     
21c90 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f   /* Est number o
21ca0 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20  f iterations of 
21cb0 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32  a query (10*log2
21cc0 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c  (N)) */.  u32 ol
21cd0 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  dmask;         /
21ce0 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  * Mask of old.* 
21cf0 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
21d00 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d  ed */.  u32 newm
21d10 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
21d20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  Mask of new.* co
21d30 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
21d40 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65   */.  u8 eTrigge
21d50 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b  rOp;       /* TK
21d60 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
21d70 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20  RT or TK_DELETE 
21d80 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b  */.  u8 eOrconf;
21d90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
21da0 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
21db0 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67   policy for trig
21dc0 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75  ger steps */.  u
21dd0 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65 72  8 disableTrigger
21de0 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64  s;  /* True to d
21df0 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  isable triggers 
21e00 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  */..  /*********
21e10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21e20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21e30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21e40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21e50 2a 0a 20 20 2a 2a 20 46 69 65 6c 64 73 20 61 62  *.  ** Fields ab
21e60 6f 76 65 20 6d 75 73 74 20 62 65 20 69 6e 69 74  ove must be init
21e70 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e  ialized to zero.
21e80 20 20 54 68 65 20 66 69 65 6c 64 73 20 74 68 61    The fields tha
21e90 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a 20 64  t follow,.  ** d
21ea0 6f 77 6e 20 74 6f 20 74 68 65 20 62 65 67 69 6e  own to the begin
21eb0 6e 69 6e 67 20 6f 66 20 74 68 65 20 72 65 63 75  ning of the recu
21ec0 72 73 69 76 65 20 73 65 63 74 69 6f 6e 2c 20 64  rsive section, d
21ed0 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65  o not need to be
21ee0 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65  .  ** initialize
21ef0 64 20 61 73 20 74 68 65 79 20 77 69 6c 6c 20 62  d as they will b
21f00 65 20 73 65 74 20 62 65 66 6f 72 65 20 62 65 69  e set before bei
21f10 6e 67 20 75 73 65 64 2e 20 20 54 68 65 20 62 6f  ng used.  The bo
21f20 75 6e 64 61 72 79 20 69 73 0a 20 20 2a 2a 20 64  undary is.  ** d
21f30 65 74 65 72 6d 69 6e 65 64 20 62 79 20 6f 66 66  etermined by off
21f40 73 65 74 6f 66 28 50 61 72 73 65 2c 61 54 65 6d  setof(Parse,aTem
21f50 70 52 65 67 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  pReg)..  *******
21f60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21f70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21f80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21f90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21fa0 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20 61 54 65 6d  ***/..  int aTem
21fb0 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 20 20 20  pReg[8];        
21fc0 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20  /* Holding area 
21fd0 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65  for temporary re
21fe0 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 54 6f 6b  gisters */.  Tok
21ff0 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20  en sNameToken;  
22000 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69       /* Token wi
22010 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73  th unqualified s
22020 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d  chema object nam
22030 65 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a  e */..  /*******
22040 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22050 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22070 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22080 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20  *.  ** Above is 
22090 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e  constant between
220a0 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65   recursions.  Be
220b0 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66  low is reset bef
220c0 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20  ore and after.  
220d0 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
220e0 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79  n.  The boundary
220f0 20 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74   between these t
22100 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65  wo regions is de
22110 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73  termined.  ** us
22120 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72  ing offsetof(Par
22130 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 73  se,sLastToken) s
22140 6f 20 74 68 65 20 73 4c 61 73 74 54 6f 6b 65 6e  o the sLastToken
22150 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74   field must be t
22160 68 65 0a 20 20 2a 2a 20 66 69 72 73 74 20 66 69  he.  ** first fi
22170 65 6c 64 20 69 6e 20 74 68 65 20 72 65 63 75 72  eld in the recur
22180 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a  sive region..  *
22190 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
221a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
221b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
221c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
221d0 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b 65  *******/..  Toke
221e0 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20  n sLastToken;   
221f0 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20      /* The last 
22200 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a  token parsed */.
22210 20 20 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20    ynVar nVar;   
22220 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
22230 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72  umber of '?' var
22240 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74  iables seen in t
22250 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f  he SQL so far */
22260 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64  .  u8 iPkSortOrd
22270 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
22280 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20  ASC or DESC for 
22290 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
222a0 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c  KEY */.  u8 expl
222b0 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ain;            
222c0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
222d0 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69  e EXPLAIN flag i
222e0 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71  s found on the q
222f0 75 65 72 79 20 2a 2f 0a 23 69 66 20 21 28 64 65  uery */.#if !(de
22300 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
22310 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 20  T_VIRTUALTABLE) 
22320 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
22330 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
22340 45 29 29 0a 20 20 75 38 20 65 50 61 72 73 65 4d  E)).  u8 eParseM
22350 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
22360 2f 2a 20 50 41 52 53 45 5f 4d 4f 44 45 5f 58 58  /* PARSE_MODE_XX
22370 58 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 65  X constant */.#e
22380 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
22390 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
223a0 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 74 61  TABLE.  int nVta
223b0 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20  bLock;          
223c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
223d0 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f  irtual tables to
223e0 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a   lock */.#endif.
223f0 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20    int nHeight;  
22400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
22410 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68  xpression tree h
22420 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74  eight of current
22430 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23   sub-select */.#
22440 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
22450 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74  IT_EXPLAIN.  int
22460 20 61 64 64 72 45 78 70 6c 61 69 6e 3b 20 20 20   addrExplain;   
22470 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73         /* Addres
22480 73 20 6f 66 20 63 75 72 72 65 6e 74 20 4f 50 5f  s of current OP_
22490 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 2a  Explain opcode *
224a0 2f 0a 23 65 6e 64 69 66 0a 20 20 56 4c 69 73 74  /.#endif.  VList
224b0 20 2a 70 56 4c 69 73 74 3b 20 20 20 20 20 20 20   *pVList;       
224c0 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20       /* Mapping 
224d0 62 65 74 77 65 65 6e 20 76 61 72 69 61 62 6c 65  between variable
224e0 20 6e 61 6d 65 73 20 61 6e 64 20 6e 75 6d 62 65   names and numbe
224f0 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52  rs */.  Vdbe *pR
22500 65 70 72 65 70 61 72 65 3b 20 20 20 20 20 20 20  eprepare;       
22510 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65    /* VM being re
22520 70 72 65 70 61 72 65 64 20 28 73 71 6c 69 74 65  prepared (sqlite
22530 33 52 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f  3Reprepare()) */
22540 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
22550 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  Tail;        /* 
22560 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73  All SQL text pas
22570 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63  t the last semic
22580 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20  olon parsed */. 
22590 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c   Table *pNewTabl
225a0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  e;         /* A 
225b0 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73  table being cons
225c0 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54  tructed by CREAT
225d0 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 49 6e 64  E TABLE */.  Ind
225e0 65 78 20 2a 70 4e 65 77 49 6e 64 65 78 3b 20 20  ex *pNewIndex;  
225f0 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 69 6e 64         /* An ind
22600 65 78 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75  ex being constru
22610 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20 49  cted by CREATE I
22620 4e 44 45 58 2e 0a 20 20 20 20 20 20 20 20 20 20  NDEX..          
22630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22640 20 20 2a 2a 20 41 6c 73 6f 20 75 73 65 64 20 74    ** Also used t
22650 6f 20 68 6f 6c 64 20 72 65 64 75 6e 64 61 6e 74  o hold redundant
22660 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
22670 6e 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 20  nts.            
22680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22690 2a 2a 20 64 75 72 69 6e 67 20 61 20 52 45 4e 41  ** during a RENA
226a0 4d 45 20 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 54  ME COLUMN */.  T
226b0 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67  rigger *pNewTrig
226c0 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67  ger;     /* Trig
226d0 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72  ger under constr
226e0 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45 20  uct by a CREATE 
226f0 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e  TRIGGER */.  con
22700 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f  st char *zAuthCo
22710 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74  ntext; /* The 6t
22720 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64  h parameter to d
22730 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63  b->xAuth callbac
22740 6b 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ks */.#ifndef SQ
22750 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
22760 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73  LTABLE.  Token s
22770 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
22780 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74     /* Complete t
22790 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20  ext of a module 
227a0 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61  argument */.  Ta
227b0 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b  ble **apVtabLock
227c0 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ;       /* Point
227d0 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61  er to virtual ta
227e0 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63  bles needing loc
227f0 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  king */.#endif. 
22800 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54   Table *pZombieT
22810 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  ab;        /* Li
22820 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65  st of Table obje
22830 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66  cts to delete af
22840 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a  ter code gen */.
22850 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54    TriggerPrg *pT
22860 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c  riggerPrg;  /* L
22870 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f  inked list of co
22880 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ded triggers */.
22890 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20    With *pWith;  
228a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
228b0 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75  urrent WITH clau
228c0 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  se, or NULL */. 
228d0 20 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72   With *pWithToFr
228e0 65 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72  ee;        /* Fr
228f0 65 65 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a  ee this WITH obj
22900 65 63 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ect at the end o
22910 66 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 23  f the parse */.#
22920 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
22930 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20  IT_ALTERTABLE.  
22940 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 2a 70 52 65  RenameToken *pRe
22950 6e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 54 6f 6b  name;     /* Tok
22960 65 6e 73 20 73 75 62 6a 65 63 74 20 74 6f 20 72  ens subject to r
22970 65 6e 61 6d 69 6e 67 20 62 79 20 41 4c 54 45 52  enaming by ALTER
22980 20 54 41 42 4c 45 20 2a 2f 0a 23 65 6e 64 69 66   TABLE */.#endif
22990 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 50 41 52  .};..#define PAR
229a0 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 20 20  SE_MODE_NORMAL  
229b0 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20        0.#define 
229c0 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c 41  PARSE_MODE_DECLA
229d0 52 45 5f 56 54 41 42 20 20 31 0a 23 64 65 66 69  RE_VTAB  1.#defi
229e0 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45  ne PARSE_MODE_RE
229f0 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 20 32 0a 23 64  NAME_COLUMN 2.#d
22a00 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45  efine PARSE_MODE
22a10 5f 52 45 4e 41 4d 45 5f 54 41 42 4c 45 20 20 33  _RENAME_TABLE  3
22a20 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61 6e  ../*.** Sizes an
22a30 64 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 76 61  d pointers of va
22a40 72 69 6f 75 73 20 70 61 72 74 73 20 6f 66 20 74  rious parts of t
22a50 68 65 20 50 61 72 73 65 20 6f 62 6a 65 63 74 2e  he Parse object.
22a60 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53  .*/.#define PARS
22a70 45 5f 48 44 52 5f 53 5a 20 6f 66 66 73 65 74 6f  E_HDR_SZ offseto
22a80 66 28 50 61 72 73 65 2c 61 54 65 6d 70 52 65 67  f(Parse,aTempReg
22a90 29 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70  ) /* Recursive p
22aa0 61 72 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63 68  art w/o aColCach
22ab0 65 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53  e*/.#define PARS
22ac0 45 5f 52 45 43 55 52 53 45 5f 53 5a 20 6f 66 66  E_RECURSE_SZ off
22ad0 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73  setof(Parse,sLas
22ae0 74 54 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52 65  tToken)    /* Re
22af0 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a  cursive part */.
22b00 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41  #define PARSE_TA
22b10 49 4c 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50 61  IL_SZ (sizeof(Pa
22b20 72 73 65 29 2d 50 41 52 53 45 5f 52 45 43 55 52  rse)-PARSE_RECUR
22b30 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65  SE_SZ) /* Non-re
22b40 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a  cursive part */.
22b50 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41  #define PARSE_TA
22b60 49 4c 28 58 29 20 28 28 28 63 68 61 72 2a 29 28  IL(X) (((char*)(
22b70 58 29 29 2b 50 41 52 53 45 5f 52 45 43 55 52 53  X))+PARSE_RECURS
22b80 45 5f 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74 65  E_SZ)  /* Pointe
22b90 72 20 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a  r to tail */../*
22ba0 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
22bb0 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73  if currently ins
22bc0 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64  ide an sqlite3_d
22bd0 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61  eclare_vtab() ca
22be0 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ll..*/.#ifdef SQ
22bf0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
22c00 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65  LTABLE.  #define
22c10 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
22c20 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69   0.#else.  #defi
22c30 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
22c40 41 42 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72  AB (pParse->ePar
22c50 73 65 4d 6f 64 65 3d 3d 50 41 52 53 45 5f 4d 4f  seMode==PARSE_MO
22c60 44 45 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 29  DE_DECLARE_VTAB)
22c70 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
22c80 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
22c90 5f 41 4c 54 45 52 54 41 42 4c 45 29 0a 20 20 23  _ALTERTABLE).  #
22ca0 64 65 66 69 6e 65 20 49 4e 5f 52 45 4e 41 4d 45  define IN_RENAME
22cb0 5f 4f 42 4a 45 43 54 20 30 0a 23 65 6c 73 65 0a  _OBJECT 0.#else.
22cc0 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 52 45 4e    #define IN_REN
22cd0 41 4d 45 5f 4f 42 4a 45 43 54 20 28 70 50 61 72  AME_OBJECT (pPar
22ce0 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3e 3d  se->eParseMode>=
22cf0 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d  PARSE_MODE_RENAM
22d00 45 5f 43 4f 4c 55 4d 4e 29 0a 23 65 6e 64 69 66  E_COLUMN).#endif
22d10 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
22d20 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
22d30 4c 54 41 42 4c 45 29 20 26 26 20 64 65 66 69 6e  LTABLE) && defin
22d40 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
22d50 4c 54 45 52 54 41 42 4c 45 29 0a 20 20 23 64 65  LTERTABLE).  #de
22d60 66 69 6e 65 20 49 4e 5f 53 50 45 43 49 41 4c 5f  fine IN_SPECIAL_
22d70 50 41 52 53 45 20 30 0a 23 65 6c 73 65 0a 20 20  PARSE 0.#else.  
22d80 23 64 65 66 69 6e 65 20 49 4e 5f 53 50 45 43 49  #define IN_SPECI
22d90 41 4c 5f 50 41 52 53 45 20 28 70 50 61 72 73 65  AL_PARSE (pParse
22da0 2d 3e 65 50 61 72 73 65 4d 6f 64 65 21 3d 50 41  ->eParseMode!=PA
22db0 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 29  RSE_MODE_NORMAL)
22dc0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
22dd0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
22de0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
22df0 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63  cture can be dec
22e00 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b  lared on a stack
22e10 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20   and used.** to 
22e20 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a  save the Parse.z
22e30 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75  AuthContext valu
22e40 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  e so that it can
22e50 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74   be restored lat
22e60 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  er..*/.struct Au
22e70 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f  thContext {.  co
22e80 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
22e90 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74  ontext;   /* Put
22ea0 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75   saved Parse.zAu
22eb0 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a  thContext here *
22ec0 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  /.  Parse *pPars
22ed0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
22ee0 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72  /* The Parse str
22ef0 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ucture */.};../*
22f00 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61  .** Bitfield fla
22f10 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20  gs for P5 value 
22f20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64  in various opcod
22f30 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  es..**.** Value 
22f40 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66  constraints (enf
22f50 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74  orced via assert
22f60 28 29 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  ()):.**    OPFLA
22f70 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 3d  G_LENGTHARG    =
22f80 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45  = SQLITE_FUNC_LE
22f90 4e 47 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  NGTH.**    OPFLA
22fa0 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 3d  G_TYPEOFARG    =
22fb0 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59  = SQLITE_FUNC_TY
22fc0 50 45 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  PEOF.**    OPFLA
22fd0 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 3d  G_BULKCSR      =
22fe0 3d 20 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44  = BTREE_BULKLOAD
22ff0 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 45  .**    OPFLAG_SE
23000 45 4b 45 51 20 20 20 20 20 20 20 3d 3d 20 42 54  EKEQ       == BT
23010 52 45 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20 20  REE_SEEK_EQ.**  
23020 20 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45    OPFLAG_FORDELE
23030 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 46  TE    == BTREE_F
23040 4f 52 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20 4f  ORDELETE.**    O
23050 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
23060 4f 4e 20 3d 3d 20 42 54 52 45 45 5f 53 41 56 45  ON == BTREE_SAVE
23070 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f  POSITION.**    O
23080 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20  PFLAG_AUXDELETE 
23090 20 20 20 3d 3d 20 42 54 52 45 45 5f 41 55 58 44     == BTREE_AUXD
230a0 45 4c 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e 65  ELETE.*/.#define
230b0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
230c0 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
230d0 20 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65 74 20   OP_Insert: Set 
230e0 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43  to update db->nC
230f0 68 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20 20  hange */.       
23100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23120 20 41 6c 73 6f 20 75 73 65 64 20 69 6e 20 50 32   Also used in P2
23130 20 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f   (not P5) of OP_
23140 44 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e  Delete */.#defin
23150 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 20  e OPFLAG_NOCHNG 
23160 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
23170 2a 20 4f 50 5f 56 43 6f 6c 75 6d 6e 20 6e 6f 63  * OP_VColumn noc
23180 68 61 6e 67 65 20 66 6f 72 20 55 50 44 41 54 45  hange for UPDATE
23190 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
231a0 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20  AG_EPHEM        
231b0 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43   0x01    /* OP_C
231c0 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c  olumn: Ephemeral
231d0 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f   output is ok */
231e0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
231f0 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78  LASTROWID     0x
23200 32 30 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20  20    /* Set to 
23210 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52  update db->lastR
23220 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
23230 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
23240 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20       0x04    /* 
23250 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69  This OP_Insert i
23260 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20  s an sql UPDATE 
23270 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
23280 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20  G_APPEND        
23290 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20  0x08    /* This 
232a0 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
232b0 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65  an append */.#de
232c0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53  fine OPFLAG_USES
232d0 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20  EEKRESULT 0x10  
232e0 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69    /* Try to avoi
232f0 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65  d a seek in Btre
23300 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65  eInsert() */.#de
23310 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e 4f  fine OPFLAG_ISNO
23320 4f 50 20 20 20 20 20 20 20 20 30 78 34 30 20 20  OP        0x40  
23330 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20 64    /* OP_Delete d
23340 6f 65 73 20 70 72 65 2d 75 70 64 61 74 65 2d 68  oes pre-update-h
23350 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  ook only */.#def
23360 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  ine OPFLAG_LENGT
23370 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20  HARG     0x40   
23380 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
23390 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67  ly used for leng
233a0 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  th() */.#define 
233b0 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
233c0 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20       0x80    /* 
233d0 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
233e0 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29  sed for typeof()
233f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
23400 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
23410 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x01    /* OP_O
23420 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70  pen** used to op
23430 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a  en bulk cursor *
23440 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
23450 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 20 30  _SEEKEQ        0
23460 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  x02    /* OP_Ope
23470 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20  n** cursor uses 
23480 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a  EQ seek only */.
23490 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46  #define OPFLAG_F
234a0 4f 52 44 45 4c 45 54 45 20 20 20 20 20 30 78 30  ORDELETE     0x0
234b0 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20  8    /* OP_Open 
234c0 73 68 6f 75 6c 64 20 75 73 65 20 42 54 52 45 45  should use BTREE
234d0 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64  _FORDELETE */.#d
234e0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49  efine OPFLAG_P2I
234f0 53 52 45 47 20 20 20 20 20 20 20 30 78 31 30 20  SREG       0x10 
23500 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f     /* P2 to OP_O
23510 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73  pen** is a regis
23520 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64  ter number */.#d
23530 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52  efine OPFLAG_PER
23540 4d 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20  MUTE       0x01 
23550 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65     /* OP_Compare
23560 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74  : use the permut
23570 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
23580 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
23590 54 49 4f 4e 20 20 30 78 30 32 20 20 20 20 2f 2a  TION  0x02    /*
235a0 20 4f 50 5f 44 65 6c 65 74 65 2f 49 6e 73 65 72   OP_Delete/Inser
235b0 74 3a 20 73 61 76 65 20 63 75 72 73 6f 72 20 70  t: save cursor p
235c0 6f 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  os */.#define OP
235d0 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20  FLAG_AUXDELETE  
235e0 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 4f 50     0x04    /* OP
235f0 5f 44 65 6c 65 74 65 3a 20 69 6e 64 65 78 20 69  _Delete: index i
23600 6e 20 61 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f  n a DELETE op */
23610 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
23620 4e 4f 43 48 4e 47 5f 4d 41 47 49 43 20 20 30 78  NOCHNG_MAGIC  0x
23630 36 64 20 20 20 20 2f 2a 20 4f 50 5f 4d 61 6b 65  6d    /* OP_Make
23640 52 65 63 6f 72 64 3a 20 73 65 72 69 61 6c 74 79  Record: serialty
23650 70 65 20 31 30 20 69 73 20 6f 6b 20 2a 2f 0a 0a  pe 10 is ok */..
23660 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67  /*. * Each trigg
23670 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  er present in th
23680 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
23690 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61  a is stored as a
236a0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a  n instance of. *
236b0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e   struct Trigger.
236c0 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20  . *. * Pointers 
236d0 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20  to instances of 
236e0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61  struct Trigger a
236f0 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f  re stored in two
23700 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20   ways.. * 1. In 
23710 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68  the "trigHash" h
23720 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20  ash table (part 
23730 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20  of the sqlite3* 
23740 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20  that represents 
23750 74 68 65 0a 20 2a 20 20 20 20 64 61 74 61 62 61  the. *    databa
23760 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73  se). This allows
23770 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75   Trigger structu
23780 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65  res to be retrie
23790 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20  ved by name.. * 
237a0 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  2. All triggers 
237b0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
237c0 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66  a single table f
237d0 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73  orm a linked lis
237e0 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20  t, using the. * 
237f0 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20     pNext member 
23800 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
23810 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  r. A pointer to 
23820 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
23830 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c  t of the. *    l
23840 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74  inked list is st
23850 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72  ored as the "pTr
23860 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66  igger" member of
23870 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a   the associated.
23880 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62   *    struct Tab
23890 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73  le.. *. * The "s
238a0 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
238b0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
238c0 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
238d0 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a  a linked list. *
238e0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
238f0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73  SQL statements s
23900 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
23910 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
23920 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
23930 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ger {.  char *zN
23940 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
23950 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  /* The name of t
23960 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20  he trigger      
23970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23980 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62    */.  char *tab
23990 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
239a0 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76  * The table or v
239b0 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
239c0 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73   trigger applies
239d0 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
239e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
239f0 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
23a00 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
23a10 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20  _INSERT         
23a20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20  */.  u8 tr_tm;  
23a30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23a40 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42  One of TRIGGER_B
23a50 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41  EFORE, TRIGGER_A
23a60 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a  FTER */.  Expr *
23a70 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20  pWhen;          
23a80 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c    /* The WHEN cl
23a90 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72  ause of the expr
23aa0 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e  ession (may be N
23ab0 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74  ULL) */.  IdList
23ac0 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20   *pColumns;     
23ad0 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20    /* If this is 
23ae0 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f  an UPDATE OF <co
23af0 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67  lumn-list> trigg
23b00 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  er,.            
23b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73   the <column-lis
23b30 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72  t> is stored her
23b40 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
23b50 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f  Schema;        /
23b60 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
23b70 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
23b80 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61  */.  Schema *pTa
23b90 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  bSchema;     /* 
23ba0 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
23bb0 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  g the table */. 
23bc0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74   TriggerStep *st
23bd0 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b  ep_list; /* Link
23be0 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   list of trigger
23bf0 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20   program steps  
23c00 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
23c10 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20  Trigger *pNext; 
23c20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
23c30 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74  trigger associat
23c40 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
23c50 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  e */.};../*.** A
23c60 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68   trigger is eith
23c70 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61  er a BEFORE or a
23c80 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e  n AFTER trigger.
23c90 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
23ca0 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74  constants.** det
23cb0 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a  ermine which..**
23cc0 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65  .** If there are
23cd0 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65   multiple trigge
23ce0 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66  rs, you might of
23cf0 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64   some BEFORE and
23d00 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20   some AFTER..** 
23d10 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74  In that cases, t
23d20 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c  he constants bel
23d30 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74  ow can be ORed t
23d40 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  ogether..*/.#def
23d50 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f  ine TRIGGER_BEFO
23d60 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52  RE  1.#define TR
23d70 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a  IGGER_AFTER   2.
23d80 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*. * An instan
23d90 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  ce of struct Tri
23da0 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64  ggerStep is used
23db0 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67   to store a sing
23dc0 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
23dd0 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61  . * that is a pa
23de0 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d  rt of a trigger-
23df0 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49  program.. *. * I
23e00 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
23e10 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61  ct TriggerStep a
23e20 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73  re stored in a s
23e30 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73  ingly linked lis
23e40 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69  t (linked. * usi
23e50 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d  ng the "pNext" m
23e60 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65  ember) reference
23e70 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c  d by the "step_l
23e80 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ist" member of t
23e90 68 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64  he. * associated
23ea0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
23eb0 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69  instance. The fi
23ec0 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
23ed0 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69  he linked list i
23ee0 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73  s. * the first s
23ef0 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67  tep of the trigg
23f00 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20  er-program.. *. 
23f10 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65  * The "op" membe
23f20 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74  r indicates whet
23f30 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44  her this is a "D
23f40 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22  ELETE", "INSERT"
23f50 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a  , "UPDATE" or. *
23f60 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d   "SELECT" statem
23f70 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67  ent. The meaning
23f80 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d  s of the other m
23f90 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d  embers is determ
23fa0 69 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76  ined by the. * v
23fb0 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20  alue of "op" as 
23fc0 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28  follows:. *. * (
23fd0 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29  op == TK_INSERT)
23fe0 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e  . * orconf    ->
23ff0 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43   stores the ON C
24000 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
24010 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d  m. * pSelect   -
24020 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
24030 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
24040 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65  SELECT ... state
24050 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
24060 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
24070 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72  stores a pointer
24080 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73   to the SELECT s
24090 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77  tatement. Otherw
240a0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61  ise NULL.. * zTa
240b0 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74  rget   -> Dequot
240c0 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
240d0 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69  able to insert i
240e0 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  nto.. * pExprLis
240f0 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20  t -> If this is 
24100 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
24110 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74  .. VALUES ... st
24120 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
24130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
24140 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73  is stores values
24150 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e   to be inserted.
24160 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
24170 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e  . * pIdList   ->
24180 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
24190 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28  NSERT INTO ... (
241a0 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20  <column-names>) 
241b0 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20  VALUES .... *   
241c0 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
241d0 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20  ment, then this 
241e0 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d  stores the colum
241f0 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a  n-names to be. *
24200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
24210 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a  serted into.. *.
24220 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c   * (op == TK_DEL
24230 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20  ETE). * zTarget 
24240 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
24250 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
24260 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a  to delete from..
24270 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
24280 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
24290 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73   of the DELETE s
242a0 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
242b0 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
242c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
242d0 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
242e0 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50  . * (op == TK_UP
242f0 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74  DATE). * zTarget
24300 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
24310 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
24320 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70   to update.. * p
24330 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
24340 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
24350 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
24360 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
24370 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
24380 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
24390 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78  ise NULL.. * pEx
243a0 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74  prList -> A list
243b0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
243c0 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68  to update and th
243d0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f  e expressions to
243e0 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20   update. *      
243f0 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e          them to.
24400 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61   See sqlite3Upda
24410 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69  te() documentati
24420 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22  on of "pChanges"
24430 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
24440 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a   argument.. *. *
24450 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
24460 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Step {.  u8 op; 
24470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24480 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
24490 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
244a0 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45  _INSERT, TK_SELE
244b0 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e  CT */.  u8 orcon
244c0 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
244d0 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e  OE_Rollback etc.
244e0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
244f0 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68  Trig;      /* Th
24500 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74  e trigger that t
24510 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61  his step is a pa
24520 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63  rt of */.  Selec
24530 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
24540 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  /* SELECT statem
24550 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e  ent or RHS of IN
24560 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54  SERT INTO SELECT
24570 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a   ... */.  char *
24580 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f  zTarget;       /
24590 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66  * Target table f
245a0 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54  or DELETE, UPDAT
245b0 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45  E, INSERT */.  E
245c0 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
245d0 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
245e0 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45   clause for DELE
245f0 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65  TE or UPDATE ste
24600 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ps */.  ExprList
24610 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20   *pExprList; /* 
24620 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55  SET clause for U
24630 50 44 41 54 45 20 2a 2f 0a 20 20 49 64 4c 69 73  PDATE */.  IdLis
24640 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20  t *pIdList;     
24650 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  /* Column names 
24660 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  for INSERT */.  
24670 55 70 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b  Upsert *pUpsert;
24680 20 20 20 20 20 2f 2a 20 55 70 73 65 72 74 20 63       /* Upsert c
24690 6c 61 75 73 65 73 20 6f 6e 20 61 6e 20 49 4e 53  lauses on an INS
246a0 45 52 54 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ERT */.  char *z
246b0 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  Span;         /*
246c0 20 4f 72 69 67 69 6e 61 6c 20 53 51 4c 20 74 65   Original SQL te
246d0 78 74 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61  xt of this comma
246e0 6e 64 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  nd */.  TriggerS
246f0 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  tep *pNext;  /* 
24700 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b  Next in the link
24710 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67  -list */.  Trigg
24720 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20  erStep *pLast;  
24730 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20  /* Last element 
24740 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61  in link-list. Va
24750 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d  lid for 1st elem
24760 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   only */.};../*.
24770 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
24780 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
24790 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
247a0 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  used by the sqli
247b0 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74  teFix....** rout
247c0 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c  ines as they wal
247d0 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  k the parse tree
247e0 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73   to make databas
247f0 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20  e references.** 
24800 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70  explicit..*/.typ
24810 65 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69  edef struct DbFi
24820 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72  xer DbFixer;.str
24830 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20  uct DbFixer {.  
24840 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
24850 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69      /* The parsi
24860 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72  ng context.  Err
24870 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74  or messages writ
24880 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  ten here */.  Sc
24890 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
248a0 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74    /* Fix items t
248b0 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  o this schema */
248c0 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b  .  int bVarOnly;
248d0 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20         /* Check 
248e0 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66  for variable ref
248f0 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a  erences only */.
24900 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
24910 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75  b;    /* Make su
24920 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61  re all objects a
24930 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  re contained in 
24940 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
24950 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
24960 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f  Type;  /* Type o
24970 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
24980 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
24990 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63   messages */.  c
249a0 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d  onst Token *pNam
249b0 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  e; /* Name of th
249c0 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73  e container - us
249d0 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73  ed for error mes
249e0 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  sages */.};../*.
249f0 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75  ** An objected u
24a00 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74  sed to accumulat
24a10 65 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20  e the text of a 
24a20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a  string where we.
24a30 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73  ** do not necess
24a40 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62  arily know how b
24a50 69 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69  ig the string wi
24a60 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64  ll be in the end
24a70 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69  ..*/.struct sqli
24a80 74 65 33 5f 73 74 72 20 7b 0a 20 20 73 71 6c 69  te3_str {.  sqli
24a90 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
24aa0 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74   /* Optional dat
24ab0 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73  abase for lookas
24ac0 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c  ide.  Can be NUL
24ad0 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65  L */.  char *zTe
24ae0 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  xt;         /* T
24af0 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63  he string collec
24b00 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ted so far */.  
24b10 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20  u32  nAlloc;    
24b20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f       /* Amount o
24b30 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  f space allocate
24b40 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20  d in zText */.  
24b50 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20  u32  mxAlloc;   
24b60 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
24b70 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69  allowed allocati
24b80 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61  on.  0 for no ma
24b90 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20  lloc usage */.  
24ba0 75 33 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20  u32  nChar;     
24bb0 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
24bc0 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20  f the string so 
24bd0 66 61 72 20 2a 2f 0a 20 20 75 38 20 20 20 61 63  far */.  u8   ac
24be0 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a  cError;       /*
24bf0 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 6f 72   SQLITE_NOMEM or
24c00 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 2a   SQLITE_TOOBIG *
24c10 2f 0a 20 20 75 38 20 20 20 70 72 69 6e 74 66 46  /.  u8   printfF
24c20 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c 49  lags;    /* SQLI
24c30 54 45 5f 50 52 49 4e 54 46 20 66 6c 61 67 73 20  TE_PRINTF flags 
24c40 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66  below */.};.#def
24c50 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
24c60 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20  F_INTERNAL 0x01 
24c70 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65   /* Internal-use
24c80 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73  -only converters
24c90 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66   allowed */.#def
24ca0 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
24cb0 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20  F_SQLFUNC  0x02 
24cc0 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   /* SQL function
24cd0 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58   arguments to VX
24ce0 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e  Printf */.#defin
24cf0 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
24d00 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f  MALLOCED 0x04  /
24d10 2a 20 54 72 75 65 20 69 66 20 78 54 65 78 74 20  * True if xText 
24d20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  is allocated spa
24d30 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69  ce */..#define i
24d40 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28  sMalloced(X)  ((
24d50 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73  (X)->printfFlags
24d60 20 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46   & SQLITE_PRINTF
24d70 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a  _MALLOCED)!=0)..
24d80 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72  ./*.** A pointer
24d90 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
24da0 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  re is used to co
24db0 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d  mmunicate inform
24dc0 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71  ation.** from sq
24dd0 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50  lite3Init and OP
24de0 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74  _ParseSchema int
24df0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69  o the sqlite3Ini
24e00 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79  tCallback..*/.ty
24e10 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20  pedef struct {. 
24e20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
24e30 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
24e40 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69  base being initi
24e50 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72  alized */.  char
24e60 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20   **pzErrMsg;    
24e70 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
24e80 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
24e90 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
24ea0 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d        /* 0 for m
24eb0 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31  ain database.  1
24ec0 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66   for TEMP, 2.. f
24ed0 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20  or ATTACHed */. 
24ee0 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
24ef0 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63       /* Result c
24f00 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  ode stored here 
24f10 2a 2f 0a 20 20 75 33 32 20 6d 49 6e 69 74 46 6c  */.  u32 mInitFl
24f20 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67  ags;     /* Flag
24f30 73 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 65 72  s controlling er
24f40 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
24f50 20 20 75 33 32 20 6e 49 6e 69 74 52 6f 77 3b 20    u32 nInitRow; 
24f60 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
24f70 6f 66 20 72 6f 77 73 20 70 72 6f 63 65 73 73 65  of rows processe
24f80 64 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b  d */.} InitData;
24f90 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
24fa0 76 61 6c 75 65 73 20 66 6f 72 20 6d 49 6e 69 74  values for mInit
24fb0 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  Flags.*/.#define
24fc0 20 49 4e 49 54 46 4c 41 47 5f 41 6c 74 65 72 54   INITFLAG_AlterT
24fd0 61 62 6c 65 20 20 20 30 78 30 30 30 31 20 20 2f  able   0x0001  /
24fe0 2a 20 54 68 69 73 20 69 73 20 61 20 72 65 70 61  * This is a repa
24ff0 72 73 65 20 61 66 74 65 72 20 41 4c 54 45 52 20  rse after ALTER 
25000 54 41 42 4c 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  TABLE */../*.** 
25010 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  Structure contai
25020 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66  ning global conf
25030 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66  iguration data f
25040 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  or the SQLite li
25050 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  brary..**.** Thi
25060 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f  s structure also
25070 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73   contains some s
25080 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tate information
25090 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69  ..*/.struct Sqli
250a0 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e  te3Config {.  in
250b0 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20  t bMemstat;     
250c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250d0 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
250e0 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20  e memory status 
250f0 2a 2f 0a 20 20 75 38 20 62 43 6f 72 65 4d 75 74  */.  u8 bCoreMut
25100 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
25110 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
25120 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75  o enable core mu
25130 74 65 78 69 6e 67 20 2a 2f 0a 20 20 75 38 20 62  texing */.  u8 b
25140 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20  FullMutex;      
25150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25160 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
25170 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f  full mutexing */
25180 0a 20 20 75 38 20 62 4f 70 65 6e 55 72 69 3b 20  .  u8 bOpenUri; 
25190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251a0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
251b0 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61  interpret filena
251c0 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20  mes as URIs */. 
251d0 20 75 38 20 62 55 73 65 43 69 73 3b 20 20 20 20   u8 bUseCis;    
251e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251f0 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69     /* Use coveri
25200 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66  ng indices for f
25210 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 75  ull-scans */.  u
25220 38 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f 63 3b 20  8 bSmallMalloc; 
25230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25240 20 2f 2a 20 41 76 6f 69 64 20 6c 61 72 67 65 20   /* Avoid large 
25250 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
25260 6e 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20  ns if true */.  
25270 75 38 20 62 45 78 74 72 61 53 63 68 65 6d 61 43  u8 bExtraSchemaC
25280 68 65 63 6b 73 3b 20 20 20 20 20 20 20 20 20 20  hecks;          
25290 20 20 2f 2a 20 56 65 72 69 66 79 20 74 79 70 65    /* Verify type
252a0 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65 20 69  ,name,tbl_name i
252b0 6e 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e  n schema */.  in
252c0 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20  t mxStrlen;     
252d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252e0 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e  /* Maximum strin
252f0 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e  g length */.  in
25300 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20  t neverCorrupt; 
25310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25320 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61  /* Database is a
25330 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65  lways well-forme
25340 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f  d */.  int szLoo
25350 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
25360 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
25370 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
25380 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69  ffer size */.  i
25390 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  nt nLookaside;  
253a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253b0 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
253c0 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75  aside buffer cou
253d0 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 6d  nt */.  int nStm
253e0 74 53 70 69 6c 6c 3b 20 20 20 20 20 20 20 20 20  tSpill;         
253f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 6d            /* Stm
25400 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c 6c 2d  t-journal spill-
25410 74 6f 2d 64 69 73 6b 20 74 68 72 65 73 68 6f 6c  to-disk threshol
25420 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  d */.  sqlite3_m
25430 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20  em_methods m;   
25440 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d           /* Low-
25450 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c  level memory all
25460 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63  ocation interfac
25470 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  e */.  sqlite3_m
25480 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74  utex_methods mut
25490 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d  ex;      /* Low-
254a0 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65  level mutex inte
254b0 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
254c0 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64  e3_pcache_method
254d0 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20  s2 pcache2;  /* 
254e0 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63  Low-level page-c
254f0 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a  ache interface *
25500 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b  /.  void *pHeap;
25510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25520 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74        /* Heap st
25530 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20  orage space */. 
25540 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20   int nHeap;     
25550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25560 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48     /* Size of pH
25570 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d  eap[] */.  int m
25580 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20  nReq, mxReq;    
25590 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
255a0 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70  Min and max heap
255b0 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73 20   requests sizes 
255c0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  */.  sqlite3_int
255d0 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20  64 szMmap;      
255e0 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29         /* mmap()
255f0 20 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20   space per open 
25600 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  file */.  sqlite
25610 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20  3_int64 mxMmap; 
25620 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
25630 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72  aximum value for
25640 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69   szMmap */.  voi
25650 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20  d *pPage;       
25660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25670 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d  * Page cache mem
25680 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50  ory */.  int szP
25690 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
256a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
256b0 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20  ze of each page 
256c0 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
256d0 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20  int nPage;      
256e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
25700 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20  ages in pPage[] 
25710 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65  */.  int mxParse
25720 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20  rStack;         
25730 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75         /* maximu
25740 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65 20 70  m depth of the p
25750 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20  arser stack */. 
25760 20 69 6e 74 20 73 68 61 72 65 64 43 61 63 68 65   int sharedCache
25770 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20  Enabled;        
25780 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68     /* true if sh
25790 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
257a0 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32  enabled */.  u32
257b0 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20 20 20   szPma;         
257c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
257d0 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65 72  * Maximum Sorter
257e0 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f   PMA size */.  /
257f0 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68  * The above migh
25800 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
25810 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54   to non-zero.  T
25820 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65  he following nee
25830 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a  d to always.  **
25840 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65   initially be ze
25850 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a  ro, however. */.
25860 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20    int isInit;   
25870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25880 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
25890 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  r initialization
258a0 20 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f   has finished */
258b0 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73  .  int inProgres
258c0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
258d0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69       /* True whi
258e0 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  le initializatio
258f0 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f  n in progress */
25900 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e  .  int isMutexIn
25910 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
25920 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
25930 65 72 20 6d 75 74 65 78 65 73 20 61 72 65 20 69  er mutexes are i
25940 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
25950 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74  int isMallocInit
25960 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25970 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
25980 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61  malloc is initia
25990 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
259a0 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20  sPCacheInit;    
259b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
259c0 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
259d0 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
259e0 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e   */.  int nRefIn
259f0 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  itMutex;        
25a00 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
25a10 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49  r of users of pI
25a20 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71  nitMutex */.  sq
25a30 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e  lite3_mutex *pIn
25a40 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  itMutex;        
25a50 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62 79  /* Mutex used by
25a60 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c   sqlite3_initial
25a70 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ize() */.  void 
25a80 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e  (*xLog)(void*,in
25a90 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20  t,const char*); 
25aa0 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20  /* Function for 
25ab0 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69  logging */.  voi
25ac0 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20  d *pLogArg;     
25ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ae0 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
25af0 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f  ent to xLog() */
25b00 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
25b10 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76  NABLE_SQLLOG.  v
25b20 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f  oid(*xSqllog)(vo
25b30 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  id*,sqlite3*,con
25b40 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  st char*, int);.
25b50 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41    void *pSqllogA
25b60 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  rg;.#endif.#ifde
25b70 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f  f SQLITE_VDBE_CO
25b80 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20  VERAGE.  /* The 
25b90 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61  following callba
25ba0 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29  ck (if not NULL)
25bb0 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65   is invoked on e
25bc0 76 65 72 79 20 56 44 42 45 20 62 72 61 6e 63 68  very VDBE branch
25bd0 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e  .  ** operation.
25be0 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61    Set the callba
25bf0 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f  ck using SQLITE_
25c00 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f  TESTCTRL_VDBE_CO
25c10 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76  VERAGE..  */.  v
25c20 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63  oid (*xVdbeBranc
25c30 68 29 28 76 6f 69 64 2a 2c 75 6e 73 69 67 6e 65  h)(void*,unsigne
25c40 64 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54  d iSrcLine,u8 eT
25c50 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a  his,u8 eMx);  /*
25c60 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   Callback */.  v
25c70 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68  oid *pVdbeBranch
25c80 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
25c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ca0 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
25cb0 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64  argument */.#end
25cc0 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
25cd0 5f 45 4e 41 42 4c 45 5f 44 45 53 45 52 49 41 4c  _ENABLE_DESERIAL
25ce0 49 5a 45 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e  IZE.  sqlite3_in
25cf0 74 36 34 20 6d 78 4d 65 6d 64 62 53 69 7a 65 3b  t64 mxMemdbSize;
25d00 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
25d10 6c 74 20 6d 61 78 20 6d 65 6d 64 62 20 73 69 7a  lt max memdb siz
25d20 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  e */.#endif.#ifn
25d30 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
25d40 54 41 42 4c 45 0a 20 20 69 6e 74 20 28 2a 78 54  TABLE.  int (*xT
25d50 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74  estCallback)(int
25d60 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 76  );        /* Inv
25d70 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33 46  oked by sqlite3F
25d80 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e  aultSim() */.#en
25d90 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c  dif.  int bLocal
25da0 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20  timeFault;      
25db0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
25dc0 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d  to fail localtim
25dd0 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 20 20 69  e() calls */.  i
25de0 6e 74 20 62 49 6e 74 65 72 6e 61 6c 46 75 6e 63  nt bInternalFunc
25df0 74 69 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  tions;          
25e00 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 20 53 51 4c   /* Internal SQL
25e10 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 76   functions are v
25e20 69 73 69 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  isible */.  int 
25e30 69 4f 6e 63 65 52 65 73 65 74 54 68 72 65 73 68  iOnceResetThresh
25e40 6f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  old;          /*
25e50 20 57 68 65 6e 20 74 6f 20 72 65 73 65 74 20 4f   When to reset O
25e60 50 5f 4f 6e 63 65 20 63 6f 75 6e 74 65 72 73 20  P_Once counters 
25e70 2a 2f 0a 20 20 75 33 32 20 73 7a 53 6f 72 74 65  */.  u32 szSorte
25e80 72 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  rRef;           
25e90 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 73 69         /* Min si
25ea0 7a 65 20 69 6e 20 62 79 74 65 73 20 74 6f 20 75  ze in bytes to u
25eb0 73 65 20 73 6f 72 74 65 72 2d 72 65 66 73 20 2a  se sorter-refs *
25ec0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  /.  unsigned int
25ed0 20 69 50 72 6e 67 53 65 65 64 3b 20 20 20 20 20   iPrngSeed;     
25ee0 20 20 20 20 20 20 2f 2a 20 41 6c 74 65 72 6e 61        /* Alterna
25ef0 74 69 76 65 20 66 69 78 65 64 20 73 65 65 64 20  tive fixed seed 
25f00 66 6f 72 20 74 68 65 20 50 52 4e 47 20 2a 2f 0a  for the PRNG */.
25f10 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d  };../*.** This m
25f20 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
25f30 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20  ide of assert() 
25f40 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e  statements to in
25f50 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74  dicate that.** t
25f60 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c  he assert is onl
25f70 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c  y valid on a wel
25f80 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
25f90 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a  e.  Instead of:.
25fa0 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
25fb0 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65  ( X );.**.** One
25fc0 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20   writes:.**.**  
25fd0 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20     assert( X || 
25fe0 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a  CORRUPT_DB );.**
25ff0 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69  .** CORRUPT_DB i
26000 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f  s true during no
26010 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20  rmal operation. 
26020 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73   CORRUPT_DB does
26030 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a   not indicate.**
26040 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61   that the databa
26050 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79  se is definitely
26060 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74   corrupt, only t
26070 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20  hat it might be 
26080 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20  corrupt..** For 
26090 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c  most test cases,
260a0 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73   CORRUPT_DB is s
260b0 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e  et to false usin
260c0 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73  g a special.** s
260d0 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
260e0 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61  rol().  This ena
260f0 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74  bles assert() st
26100 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76  atements to prov
26110 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74  e.** things that
26120 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65   are always true
26130 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64   for well-formed
26140 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
26150 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44  define CORRUPT_D
26160 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69  B  (sqlite3Confi
26170 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d  g.neverCorrupt==
26180 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78  0)../*.** Contex
26190 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64  t pointer passed
261a0 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68   down through th
261b0 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a  e tree-walk..*/.
261c0 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a  struct Walker {.
261d0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
261e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
26200 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
26210 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72  */.  int (*xExpr
26220 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
26230 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f  *, Expr*);     /
26240 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65  * Callback for e
26250 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
26260 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c  int (*xSelectCal
26270 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53  lback)(Walker*,S
26280 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c  elect*);  /* Cal
26290 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
262a0 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  s */.  void (*xS
262b0 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28  electCallback2)(
262c0 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29  Walker*,Select*)
262d0 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62  ;/* Second callb
262e0 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
262f0 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44  */.  int walkerD
26300 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  epth;           
26310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26320 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71  * Number of subq
26330 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65  ueries */.  u8 e
26340 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
26350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26360 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c        /* A small
26370 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65   processing code
26380 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20   */.  union {   
26390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263b0 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f  /* Extra data fo
263c0 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  r callback */.  
263d0 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
263e0 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  NC;             
263f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
26400 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f  aming context */
26410 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  .    int n;     
26420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26440 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  * A counter */. 
26450 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20     int iCur;    
26460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26470 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26480 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  A cursor number 
26490 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a  */.    SrcList *
264a0 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20  pSrcList;       
264b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264c0 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20   /* FROM clause 
264d0 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72  */.    struct Sr
264e0 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e  cCount *pSrcCoun
264f0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
26500 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c   /* Counting col
26510 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a  umn references *
26520 2f 0a 20 20 20 20 73 74 72 75 63 74 20 43 43 75  /.    struct CCu
26530 72 48 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74  rHint *pCCurHint
26540 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
26550 2f 2a 20 55 73 65 64 20 62 79 20 63 6f 64 65 43  /* Used by codeC
26560 75 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20  ursorHint() */. 
26570 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20     int *aiCol;  
26580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26590 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
265a0 61 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20  array of column 
265b0 69 6e 64 65 78 65 73 20 2a 2f 0a 20 20 20 20 73  indexes */.    s
265c0 74 72 75 63 74 20 49 64 78 43 6f 76 65 72 20 2a  truct IdxCover *
265d0 70 49 64 78 43 6f 76 65 72 3b 20 20 20 20 20 20  pIdxCover;      
265e0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63           /* Chec
265f0 6b 20 66 6f 72 20 69 6e 64 65 78 20 63 6f 76 65  k for index cove
26600 72 61 67 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  rage */.    stru
26610 63 74 20 49 64 78 45 78 70 72 54 72 61 6e 73 20  ct IdxExprTrans 
26620 2a 70 49 64 78 54 72 61 6e 73 3b 20 20 20 20 20  *pIdxTrans;     
26630 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74        /* Convert
26640 20 69 64 78 65 64 20 65 78 70 72 20 74 6f 20 63   idxed expr to c
26650 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70  olumn */.    Exp
26660 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
26670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26680 20 20 20 20 20 20 20 2f 2a 20 47 52 4f 55 50 20         /* GROUP 
26690 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  BY clause */.   
266a0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
266b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
266c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 41             /* HA
266d0 56 49 4e 47 20 74 6f 20 57 48 45 52 45 20 63 6c  VING to WHERE cl
266e0 61 75 73 65 20 63 74 78 20 2a 2f 0a 20 20 20 20  ause ctx */.    
266f0 73 74 72 75 63 74 20 57 69 6e 64 6f 77 52 65 77  struct WindowRew
26700 72 69 74 65 20 2a 70 52 65 77 72 69 74 65 3b 20  rite *pRewrite; 
26710 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 69 6e            /* Win
26720 64 6f 77 20 72 65 77 72 69 74 65 20 63 6f 6e 74  dow rewrite cont
26730 65 78 74 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  ext */.    struc
26740 74 20 57 68 65 72 65 43 6f 6e 73 74 20 2a 70 43  t WhereConst *pC
26750 6f 6e 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  onst;           
26760 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c       /* WHERE cl
26770 61 75 73 65 20 63 6f 6e 73 74 61 6e 74 73 20 2a  ause constants *
26780 2f 0a 20 20 20 20 73 74 72 75 63 74 20 52 65 6e  /.    struct Ren
26790 61 6d 65 43 74 78 20 2a 70 52 65 6e 61 6d 65 3b  ameCtx *pRename;
267a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267b0 2f 2a 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e  /* RENAME COLUMN
267c0 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 7d 20   context */.  } 
267d0 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72  u;.};../* Forwar
267e0 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a  d declarations *
267f0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  /.int sqlite3Wal
26800 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45  kExpr(Walker*, E
26810 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
26820 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57  e3WalkExprList(W
26830 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  alker*, ExprList
26840 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
26850 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72  alkSelect(Walker
26860 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
26870 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
26880 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  ctExpr(Walker*, 
26890 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
268a0 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46  lite3WalkSelectF
268b0 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  rom(Walker*, Sel
268c0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
268d0 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57  e3ExprWalkNoop(W
268e0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
268f0 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
26900 74 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72  tWalkNoop(Walker
26910 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
26920 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
26930 6c 6b 46 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20  lkFail(Walker*, 
26940 53 65 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65 66  Select*);.#ifdef
26950 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f   SQLITE_DEBUG.vo
26960 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
26970 57 61 6c 6b 41 73 73 65 72 74 32 28 57 61 6c 6b  WalkAssert2(Walk
26980 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23  er*, Select*);.#
26990 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  endif../*.** Ret
269a0 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  urn code from th
269b0 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c  e parse-tree wal
269c0 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20  king primitives 
269d0 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c  and their.** cal
269e0 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69  lbacks..*/.#defi
269f0 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20  ne WRC_Continue 
26a00 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e     0   /* Contin
26a10 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69  ue down into chi
26a20 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ldren */.#define
26a30 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20   WRC_Prune      
26a40 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69   1   /* Omit chi
26a50 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e  ldren but contin
26a60 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69  ue walking sibli
26a70 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ngs */.#define W
26a80 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32  RC_Abort       2
26a90 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68     /* Abandon th
26aa0 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a  e tree walk */..
26ab0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
26ac0 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
26ad0 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61  ure represents a
26ae0 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d   set of one or m
26af0 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d  ore CTEs.** (com
26b00 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
26b10 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62  sions) created b
26b20 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20  y a single WITH 
26b30 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
26b40 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e  t With {.  int n
26b50 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cte;            
26b60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
26b70 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20  mber of CTEs in 
26b80 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20  the WITH clause 
26b90 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65  */.  With *pOute
26ba0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
26bb0 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69       /* Containi
26bc0 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20  ng WITH clause, 
26bd0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72  or NULL */.  str
26be0 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20  uct Cte {       
26bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26c00 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20  For each CTE in 
26c10 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e  the WITH clause.
26c20 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ... */.    char 
26c30 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
26c40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
26c50 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a  me of this CTE *
26c60 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  /.    ExprList *
26c70 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20  pCols;          
26c80 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
26c90 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e   explicit column
26ca0 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20   names, or NULL 
26cb0 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
26cc0 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
26cd0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
26ce0 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73  finition of this
26cf0 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73   CTE */.    cons
26d00 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b  t char *zCteErr;
26d10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
26d20 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72  rror message for
26d30 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65   circular refere
26d40 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d  nces */.  } a[1]
26d50 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  ;.};..#ifdef SQL
26d60 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
26d70 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
26d80 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65  he TreeView obje
26d90 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 70  ct is used for p
26da0 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74  rinting the cont
26db0 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73  ent of.** data s
26dc0 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c  tructures on sql
26dd0 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
26de0 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c  ) using a tree-l
26df0 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72  ike view..*/.str
26e00 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20  uct TreeView {. 
26e10 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20   int iLevel;    
26e20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
26e30 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74  h level of the t
26e40 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f  ree we are on */
26e50 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30  .  u8  bLine[100
26e60 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72  ];         /* Dr
26e70 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63  aw vertical in c
26e80 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65  olumn i if bLine
26e90 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d  [i] is true */.}
26ea0 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
26eb0 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a  TE_DEBUG */../*.
26ec0 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69  ** This object i
26ed0 73 20 75 73 65 64 20 69 6e 20 76 61 72 69 6f 75  s used in variou
26ee0 73 20 77 61 79 73 2c 20 6d 6f 73 74 20 28 62 75  s ways, most (bu
26ef0 74 20 6e 6f 74 20 61 6c 6c 29 20 72 65 6c 61 74  t not all) relat
26f00 65 64 20 74 6f 20 77 69 6e 64 6f 77 0a 2a 2a 20  ed to window.** 
26f10 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
26f20 20 20 20 28 31 29 20 41 20 73 69 6e 67 6c 65 20     (1) A single 
26f30 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
26f40 20 73 74 72 75 63 74 75 72 65 20 69 73 20 61 74   structure is at
26f50 74 61 63 68 65 64 20 74 6f 20 74 68 65 0a 2a 2a  tached to the.**
26f60 20 20 20 20 20 20 20 74 68 65 20 45 78 70 72 2e         the Expr.
26f70 79 2e 70 57 69 6e 20 66 69 65 6c 64 20 66 6f 72  y.pWin field for
26f80 20 65 61 63 68 20 77 69 6e 64 6f 77 20 66 75 6e   each window fun
26f90 63 74 69 6f 6e 20 69 6e 20 61 6e 20 65 78 70 72  ction in an expr
26fa0 65 73 73 69 6f 6e 20 74 72 65 65 2e 0a 2a 2a 20  ession tree..** 
26fb0 20 20 20 20 20 20 54 68 69 73 20 6f 62 6a 65 63        This objec
26fc0 74 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 66 6f  t holds the info
26fd0 72 6d 61 74 69 6f 6e 20 63 6f 6e 74 61 69 6e 65  rmation containe
26fe0 64 20 69 6e 20 74 68 65 20 4f 56 45 52 20 63 6c  d in the OVER cl
26ff0 61 75 73 65 2c 0a 2a 2a 20 20 20 20 20 20 20 70  ause,.**       p
27000 6c 75 73 20 61 64 64 69 74 69 6f 6e 61 6c 20 66  lus additional f
27010 69 65 6c 64 73 20 75 73 65 64 20 64 75 72 69 6e  ields used durin
27020 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f  g code generatio
27030 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 32 29 20 41  n..**.**   (2) A
27040 6c 6c 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69  ll window functi
27050 6f 6e 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 20  ons in a single 
27060 53 45 4c 45 43 54 20 66 6f 72 6d 20 61 20 6c 69  SELECT form a li
27070 6e 6b 65 64 2d 6c 69 73 74 0a 2a 2a 20 20 20 20  nked-list.**    
27080 20 20 20 61 74 74 61 63 68 65 64 20 74 6f 20 53     attached to S
27090 65 6c 65 63 74 2e 70 57 69 6e 2e 20 20 54 68 65  elect.pWin.  The
270a0 20 57 69 6e 64 6f 77 2e 70 46 75 6e 63 20 61 6e   Window.pFunc an
270b0 64 20 57 69 6e 64 6f 77 2e 70 45 78 70 72 0a 2a  d Window.pExpr.*
270c0 2a 20 20 20 20 20 20 20 66 69 65 6c 64 73 20 70  *       fields p
270d0 6f 69 6e 74 20 62 61 63 6b 20 74 6f 20 74 68 65  oint back to the
270e0 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
270f0 20 69 73 20 74 68 65 20 77 69 6e 64 6f 77 20 66   is the window f
27100 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20  unction..**.**  
27110 20 28 33 29 20 54 68 65 20 74 65 72 6d 73 20 6f   (3) The terms o
27120 66 20 74 68 65 20 57 49 4e 44 4f 57 20 63 6c 61  f the WINDOW cla
27130 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
27140 61 72 65 20 69 6e 73 74 61 6e 63 65 73 20 6f 66  are instances of
27150 20 74 68 69 73 0a 2a 2a 20 20 20 20 20 20 20 6f   this.**       o
27160 62 6a 65 63 74 20 6f 6e 20 61 20 6c 69 6e 6b 65  bject on a linke
27170 64 20 6c 69 73 74 20 61 74 74 61 63 68 65 64 20  d list attached 
27180 74 6f 20 53 65 6c 65 63 74 2e 70 57 69 6e 44 65  to Select.pWinDe
27190 66 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 34 29 20  fn..**.**   (4) 
271a0 46 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  For an aggregate
271b0 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61   function with a
271c0 20 46 49 4c 54 45 52 20 63 6c 61 75 73 65 2c 20   FILTER clause, 
271d0 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 20  an instance.**  
271e0 20 20 20 20 20 6f 66 20 74 68 69 73 20 6f 62 6a       of this obj
271f0 65 63 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ect is stored in
27200 20 45 78 70 72 2e 79 2e 70 57 69 6e 20 77 69 74   Expr.y.pWin wit
27210 68 20 65 46 72 6d 54 79 70 65 20 73 65 74 20 74  h eFrmType set t
27220 6f 0a 2a 2a 20 20 20 20 20 20 20 54 4b 5f 46 49  o.**       TK_FI
27230 4c 54 45 52 2e 20 49 6e 20 74 68 69 73 20 63 61  LTER. In this ca
27240 73 65 20 74 68 65 20 6f 6e 6c 79 20 66 69 65 6c  se the only fiel
27250 64 20 75 73 65 64 20 69 73 20 57 69 6e 64 6f 77  d used is Window
27260 2e 70 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20  .pFilter..**.** 
27270 54 68 65 20 75 73 65 73 20 28 31 29 20 61 6e 64  The uses (1) and
27280 20 28 32 29 20 61 72 65 20 72 65 61 6c 6c 79 20   (2) are really 
27290 74 68 65 20 73 61 6d 65 20 57 69 6e 64 6f 77 20  the same Window 
272a0 6f 62 6a 65 63 74 20 74 68 61 74 20 6a 75 73 74  object that just
272b0 20 68 61 70 70 65 6e 73 0a 2a 2a 20 74 6f 20 62   happens.** to b
272c0 65 20 61 63 63 65 73 73 69 62 6c 65 20 69 6e 20  e accessible in 
272d0 74 77 6f 20 64 69 66 66 65 72 65 6e 74 20 77 61  two different wa
272e0 79 73 2e 20 20 55 73 65 20 63 61 73 65 20 28 33  ys.  Use case (3
272f0 29 20 61 72 65 20 73 65 70 61 72 61 74 65 20 6f  ) are separate o
27300 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63  bjects..*/.struc
27310 74 20 57 69 6e 64 6f 77 20 7b 0a 20 20 63 68 61  t Window {.  cha
27320 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
27330 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
27340 77 69 6e 64 6f 77 20 28 6d 61 79 20 62 65 20 4e  window (may be N
27350 55 4c 4c 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ULL) */.  char *
27360 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 20  zBase;          
27370 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 62 61 73    /* Name of bas
27380 65 20 77 69 6e 64 6f 77 20 66 6f 72 20 63 68 61  e window for cha
27390 69 6e 69 6e 67 20 28 6d 61 79 20 62 65 20 4e 55  ining (may be NU
273a0 4c 4c 29 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  LL) */.  ExprLis
273b0 74 20 2a 70 50 61 72 74 69 74 69 6f 6e 3b 20 20  t *pPartition;  
273c0 20 2f 2a 20 50 41 52 54 49 54 49 4f 4e 20 42 59   /* PARTITION BY
273d0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
273e0 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b  rList *pOrderBy;
273f0 20 20 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59       /* ORDER BY
27400 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 38 20   clause */.  u8 
27410 65 46 72 6d 54 79 70 65 3b 20 20 20 20 20 20 20  eFrmType;       
27420 20 20 20 20 20 2f 2a 20 54 4b 5f 52 41 4e 47 45       /* TK_RANGE
27430 2c 20 54 4b 5f 47 52 4f 55 50 53 2c 20 54 4b 5f  , TK_GROUPS, TK_
27440 52 4f 57 53 2c 20 6f 72 20 30 20 2a 2f 0a 20 20  ROWS, or 0 */.  
27450 75 38 20 65 53 74 61 72 74 3b 20 20 20 20 20 20  u8 eStart;      
27460 20 20 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55          /* UNBOU
27470 4e 44 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50  NDED, CURRENT, P
27480 52 45 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c  RECEDING or FOLL
27490 4f 57 49 4e 47 20 2a 2f 0a 20 20 75 38 20 65 45  OWING */.  u8 eE
274a0 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
274b0 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44 45 44 2c     /* UNBOUNDED,
274c0 20 43 55 52 52 45 4e 54 2c 20 50 52 45 43 45 44   CURRENT, PRECED
274d0 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57 49 4e 47  ING or FOLLOWING
274e0 20 2a 2f 0a 20 20 75 38 20 62 49 6d 70 6c 69 63   */.  u8 bImplic
274f0 69 74 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a  itFrame;      /*
27500 20 54 72 75 65 20 69 66 20 66 72 61 6d 65 20 77   True if frame w
27510 61 73 20 69 6d 70 6c 69 63 69 74 6c 79 20 73 70  as implicitly sp
27520 65 63 69 66 69 65 64 20 2a 2f 0a 20 20 75 38 20  ecified */.  u8 
27530 65 45 78 63 6c 75 64 65 3b 20 20 20 20 20 20 20  eExclude;       
27540 20 20 20 20 20 2f 2a 20 54 4b 5f 4e 4f 2c 20 54       /* TK_NO, T
27550 4b 5f 43 55 52 52 45 4e 54 2c 20 54 4b 5f 54 49  K_CURRENT, TK_TI
27560 45 53 2c 20 54 4b 5f 47 52 4f 55 50 2c 20 6f 72  ES, TK_GROUP, or
27570 20 30 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 53   0 */.  Expr *pS
27580 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
27590 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 66 6f  /* Expression fo
275a0 72 20 22 3c 65 78 70 72 3e 20 50 52 45 43 45 44  r "<expr> PRECED
275b0 49 4e 47 22 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ING" */.  Expr *
275c0 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  pEnd;           
275d0 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
275e0 66 6f 72 20 22 3c 65 78 70 72 3e 20 46 4f 4c 4c  for "<expr> FOLL
275f0 4f 57 49 4e 47 22 20 2a 2f 0a 20 20 57 69 6e 64  OWING" */.  Wind
27600 6f 77 20 2a 2a 70 70 54 68 69 73 3b 20 20 20 20  ow **ppThis;    
27610 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
27620 6f 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e  o this object in
27630 20 53 65 6c 65 63 74 2e 70 57 69 6e 20 6c 69 73   Select.pWin lis
27640 74 20 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 70  t */.  Window *p
27650 4e 65 78 74 57 69 6e 3b 20 20 20 20 20 20 20 2f  NextWin;       /
27660 2a 20 4e 65 78 74 20 77 69 6e 64 6f 77 20 66 75  * Next window fu
27670 6e 63 74 69 6f 6e 20 62 65 6c 6f 6e 67 69 6e 67  nction belonging
27680 20 74 6f 20 74 68 69 73 20 53 45 4c 45 43 54 20   to this SELECT 
27690 2a 2f 0a 20 20 45 78 70 72 20 2a 70 46 69 6c 74  */.  Expr *pFilt
276a0 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
276b0 54 68 65 20 46 49 4c 54 45 52 20 65 78 70 72 65  The FILTER expre
276c0 73 73 69 6f 6e 20 2a 2f 0a 20 20 46 75 6e 63 44  ssion */.  FuncD
276d0 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20  ef *pFunc;      
276e0 20 20 20 2f 2a 20 54 68 65 20 66 75 6e 63 74 69     /* The functi
276f0 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 45 70 68  on */.  int iEph
27700 43 73 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Csr;            
27710 2f 2a 20 50 61 72 74 69 74 69 6f 6e 20 62 75 66  /* Partition buf
27720 66 65 72 20 6f 72 20 50 65 65 72 20 62 75 66 66  fer or Peer buff
27730 65 72 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 41  er */.  int regA
27740 63 63 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  ccum;           
27750 2f 2a 20 41 63 63 75 6d 75 6c 61 74 6f 72 20 2a  /* Accumulator *
27760 2f 0a 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c  /.  int regResul
27770 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  t;          /* I
27780 6e 74 65 72 69 6d 20 72 65 73 75 6c 74 20 2a 2f  nterim result */
27790 0a 20 20 69 6e 74 20 63 73 72 41 70 70 3b 20 20  .  int csrApp;  
277a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75             /* Fu
277b0 6e 63 74 69 6f 6e 20 63 75 72 73 6f 72 20 28 75  nction cursor (u
277c0 73 65 64 20 62 79 20 6d 69 6e 2f 6d 61 78 29 20  sed by min/max) 
277d0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 41 70 70 3b  */.  int regApp;
277e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
277f0 46 75 6e 63 74 69 6f 6e 20 72 65 67 69 73 74 65  Function registe
27800 72 20 28 61 6c 73 6f 20 75 73 65 64 20 62 79 20  r (also used by 
27810 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e  min/max) */.  in
27820 74 20 72 65 67 50 61 72 74 3b 20 20 20 20 20 20  t regPart;      
27830 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
27840 66 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20  f registers for 
27850 50 41 52 54 49 54 49 4f 4e 20 42 59 20 76 61 6c  PARTITION BY val
27860 75 65 73 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ues */.  Expr *p
27870 4f 77 6e 65 72 3b 20 20 20 20 20 20 20 20 20 20  Owner;          
27880 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 6f   /* Expression o
27890 62 6a 65 63 74 20 74 68 69 73 20 77 69 6e 64 6f  bject this windo
278a0 77 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  w is attached to
278b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 66 66 65   */.  int nBuffe
278c0 72 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  rCol;         /*
278d0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
278e0 6e 73 20 69 6e 20 62 75 66 66 65 72 20 74 61 62  ns in buffer tab
278f0 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 41 72 67  le */.  int iArg
27900 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
27910 2f 2a 20 4f 66 66 73 65 74 20 6f 66 20 66 69 72  /* Offset of fir
27920 73 74 20 61 72 67 75 6d 65 6e 74 20 66 6f 72 20  st argument for 
27930 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  this function */
27940 0a 20 20 69 6e 74 20 72 65 67 4f 6e 65 3b 20 20  .  int regOne;  
27950 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
27960 67 69 73 74 65 72 20 63 6f 6e 74 61 69 6e 69 6e  gister containin
27970 67 20 63 6f 6e 73 74 61 6e 74 20 76 61 6c 75 65  g constant value
27980 20 31 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 53   1 */.  int regS
27990 74 61 72 74 52 6f 77 69 64 3b 0a 20 20 69 6e 74  tartRowid;.  int
279a0 20 72 65 67 45 6e 64 52 6f 77 69 64 3b 0a 20 20   regEndRowid;.  
279b0 75 38 20 62 45 78 70 72 41 72 67 73 3b 20 20 20  u8 bExprArgs;   
279c0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 65 72          /* Defer
279d0 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 77   evaluation of w
279e0 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 61  indow function a
279f0 72 67 75 6d 65 6e 74 73 0a 20 20 20 20 20 20 20  rguments.       
27a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a10 20 20 20 2a 2a 20 64 75 65 20 74 6f 20 74 68 65     ** due to the
27a20 20 53 51 4c 49 54 45 5f 53 55 42 54 59 50 45 20   SQLITE_SUBTYPE 
27a30 66 6c 61 67 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 6e  flag */.};..#ifn
27a40 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27a50 57 49 4e 44 4f 57 46 55 4e 43 0a 76 6f 69 64 20  WINDOWFUNC.void 
27a60 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 44 65 6c  sqlite3WindowDel
27a70 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 57 69  ete(sqlite3*, Wi
27a80 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndow*);.void sql
27a90 69 74 65 33 57 69 6e 64 6f 77 55 6e 6c 69 6e 6b  ite3WindowUnlink
27aa0 46 72 6f 6d 53 65 6c 65 63 74 28 57 69 6e 64 6f  FromSelect(Windo
27ab0 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  w*);.void sqlite
27ac0 33 57 69 6e 64 6f 77 4c 69 73 74 44 65 6c 65 74  3WindowListDelet
27ad0 65 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57  e(sqlite3 *db, W
27ae0 69 6e 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64 6f  indow *p);.Windo
27af0 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  w *sqlite3Window
27b00 41 6c 6c 6f 63 28 50 61 72 73 65 2a 2c 20 69 6e  Alloc(Parse*, in
27b10 74 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 69  t, int, Expr*, i
27b20 6e 74 20 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b  nt , Expr*, u8);
27b30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
27b40 64 6f 77 41 74 74 61 63 68 28 50 61 72 73 65 2a  dowAttach(Parse*
27b50 2c 20 45 78 70 72 2a 2c 20 57 69 6e 64 6f 77 2a  , Expr*, Window*
27b60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
27b70 69 6e 64 6f 77 4c 69 6e 6b 28 53 65 6c 65 63 74  indowLink(Select
27b80 20 2a 70 53 65 6c 2c 20 57 69 6e 64 6f 77 20 2a   *pSel, Window *
27b90 70 57 69 6e 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pWin);.int sqlit
27ba0 65 33 57 69 6e 64 6f 77 43 6f 6d 70 61 72 65 28  e3WindowCompare(
27bb0 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c  Parse*, Window*,
27bc0 20 57 69 6e 64 6f 77 2a 2c 20 69 6e 74 29 3b 0a   Window*, int);.
27bd0 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64  void sqlite3Wind
27be0 6f 77 43 6f 64 65 49 6e 69 74 28 50 61 72 73 65  owCodeInit(Parse
27bf0 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69  *, Window*);.voi
27c00 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43  d sqlite3WindowC
27c10 6f 64 65 53 74 65 70 28 50 61 72 73 65 2a 2c 20  odeStep(Parse*, 
27c20 53 65 6c 65 63 74 2a 2c 20 57 68 65 72 65 49 6e  Select*, WhereIn
27c30 66 6f 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  fo*, int, int);.
27c40 69 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  int sqlite3Windo
27c50 77 52 65 77 72 69 74 65 28 50 61 72 73 65 2a 2c  wRewrite(Parse*,
27c60 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
27c70 71 6c 69 74 65 33 45 78 70 61 6e 64 53 75 62 71  qlite3ExpandSubq
27c80 75 65 72 79 28 50 61 72 73 65 2a 2c 20 73 74 72  uery(Parse*, str
27c90 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
27ca0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27cb0 57 69 6e 64 6f 77 55 70 64 61 74 65 28 50 61 72  WindowUpdate(Par
27cc0 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69  se*, Window*, Wi
27cd0 6e 64 6f 77 2a 2c 20 46 75 6e 63 44 65 66 2a 29  ndow*, FuncDef*)
27ce0 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65  ;.Window *sqlite
27cf0 33 57 69 6e 64 6f 77 44 75 70 28 73 71 6c 69 74  3WindowDup(sqlit
27d00 65 33 20 2a 64 62 2c 20 45 78 70 72 20 2a 70 4f  e3 *db, Expr *pO
27d10 77 6e 65 72 2c 20 57 69 6e 64 6f 77 20 2a 70 29  wner, Window *p)
27d20 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65  ;.Window *sqlite
27d30 33 57 69 6e 64 6f 77 4c 69 73 74 44 75 70 28 73  3WindowListDup(s
27d40 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e 64  qlite3 *db, Wind
27d50 6f 77 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c  ow *p);.void sql
27d60 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69  ite3WindowFuncti
27d70 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
27d80 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 68 61  sqlite3WindowCha
27d90 69 6e 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f  in(Parse*, Windo
27da0 77 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 57 69  w*, Window*);.Wi
27db0 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e  ndow *sqlite3Win
27dc0 64 6f 77 41 73 73 65 6d 62 6c 65 28 50 61 72 73  dowAssemble(Pars
27dd0 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 45 78 70  e*, Window*, Exp
27de0 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  rList*, ExprList
27df0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 23 65 6c 73  *, Token*);.#els
27e00 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
27e10 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 61  e3WindowDelete(a
27e20 2c 62 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,b).# define sql
27e30 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69  ite3WindowFuncti
27e40 6f 6e 73 28 29 0a 23 20 64 65 66 69 6e 65 20 73  ons().# define s
27e50 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61  qlite3WindowAtta
27e60 63 68 28 61 2c 62 2c 63 29 0a 23 65 6e 64 69 66  ch(a,b,c).#endif
27e70 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67  ../*.** Assuming
27e80 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74   zIn points to t
27e90 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
27ea0 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74   a UTF-8 charact
27eb0 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a  er,.** advance z
27ec0 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  In to point to t
27ed0 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
27ee0 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20   the next UTF-8 
27ef0 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64  character..*/.#d
27f00 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49  efine SQLITE_SKI
27f10 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20  P_UTF8(zIn) {   
27f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f30 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28       \.  if( (*(
27f40 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b  zIn++))>=0xc0 ){
27f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
27f70 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e      while( (*zIn
27f80 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29   & 0xc0)==0x80 )
27f90 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20  { zIn++; }      
27fa0 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20         \.  }    
27fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27fe0 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  \.}../*.** The S
27ff0 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63  QLITE_*_BKPT mac
28000 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75  ros are substitu
28010 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f  tes for the erro
28020 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20  r codes with.** 
28030 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75  the same name bu
28040 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42  t without the _B
28050 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65  KPT suffix.  The
28060 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65  se macros invoke
28070 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61  .** routines tha
28080 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e  t report the lin
28090 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63  e-number on whic
280a0 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67  h the error orig
280b0 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  inated.** using 
280c0 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20  sqlite3_log().  
280d0 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73  The routines als
280e0 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76  o provide a conv
280f0 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20  enient place.** 
28100 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65  to set a debugge
28110 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f  r breakpoint..*/
28120 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 6f  .int sqlite3Repo
28130 72 74 45 72 72 6f 72 28 69 6e 74 20 69 45 72 72  rtError(int iErr
28140 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f  , int lineno, co
28150 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 29  nst char *zType)
28160 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  ;.int sqlite3Cor
28170 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a  ruptError(int);.
28180 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73  int sqlite3Misus
28190 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  eError(int);.int
281a0 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
281b0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66  Error(int);.#def
281c0 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
281d0 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  PT_BKPT sqlite3C
281e0 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
281f0 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
28200 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
28210 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
28220 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
28230 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e  efine SQLITE_CAN
28240 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74  TOPEN_BKPT sqlit
28250 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
28260 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66  __LINE__).#ifdef
28270 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
28280 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d  int sqlite3Nomem
28290 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e  Error(int);.  in
282a0 74 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f  t sqlite3Ioerrno
282b0 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20  memError(int);. 
282c0 20 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72   int sqlite3Corr
282d0 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74  uptPgnoError(int
282e0 2c 50 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65  ,Pgno);.# define
282f0 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
28300 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45  PT sqlite3NomemE
28310 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
28320 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
28330 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  OERR_NOMEM_BKPT 
28340 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65  sqlite3Ioerrnome
28350 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  mError(__LINE__)
28360 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
28370 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29  _CORRUPT_PGNO(P)
28380 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50   sqlite3CorruptP
28390 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  gnoError(__LINE_
283a0 5f 2c 28 50 29 29 0a 23 65 6c 73 65 0a 23 20 64  _,(P)).#else.# d
283b0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d  efine SQLITE_NOM
283c0 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e  EM_BKPT SQLITE_N
283d0 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51  OMEM.# define SQ
283e0 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
283f0 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45  _BKPT SQLITE_IOE
28400 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e  RR_NOMEM.# defin
28410 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
28420 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33  _PGNO(P) sqlite3
28430 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c  CorruptError(__L
28440 49 4e 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f  INE__).#endif../
28450 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54  *.** FTS3 and FT
28460 53 34 20 62 6f 74 68 20 72 65 71 75 69 72 65 20  S4 both require 
28470 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75  virtual table su
28480 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66  pport.*/.#if def
28490 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
284a0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23  _VIRTUALTABLE).#
284b0 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
284c0 41 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65  ABLE_FTS3.# unde
284d0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
284e0 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  FTS4.#endif../*.
284f0 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c  ** FTS4 is reall
28500 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66  y an extension f
28510 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20  or FTS3.  It is 
28520 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  enabled using th
28530 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  e.** SQLITE_ENAB
28540 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20  LE_FTS3 macro.  
28550 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e  But to avoid con
28560 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63  fusion we also c
28570 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54  all.** the SQLIT
28580 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61  E_ENABLE_FTS4 ma
28590 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20  cro to serve as 
285a0 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c  an alias for SQL
285b0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e  ITE_ENABLE_FTS3.
285c0 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
285d0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
285e0 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  S4) && !defined(
285f0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
28600 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  S3).# define SQL
28610 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
28620 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
28630 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64  The ctype.h head
28640 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72  er is needed for
28650 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65   non-ASCII syste
28660 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a  ms.  It is also.
28670 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53  ** needed by FTS
28680 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69  3 when FTS3 is i
28690 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61  ncluded in the a
286a0 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  malgamation..*/.
286b0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
286c0 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a  ITE_ASCII) || \.
286d0 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c      (defined(SQL
286e0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
286f0 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
28700 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29  TE_AMALGAMATION)
28710 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79  ).# include <cty
28720 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  pe.h>.#endif../*
28730 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
28740 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74  g macros mimic t
28750 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72  he standard libr
28760 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ary functions to
28770 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70  upper(),.** issp
28780 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29  ace(), isalnum()
28790 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20  , isdigit() and 
287a0 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70  isxdigit(), resp
287b0 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a  ectively. The.**
287c0 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73   sqlite versions
287d0 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41   only work for A
287e0 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c  SCII characters,
287f0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c   regardless of l
28800 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ocale..*/.#ifdef
28810 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20   SQLITE_ASCII.# 
28820 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
28830 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e  upper(x)  ((x)&~
28840 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
28850 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
28860 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65  (x)]&0x20)).# de
28870 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
28880 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ace(x)   (sqlite
28890 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
288a0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
288b0 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  01).# define sql
288c0 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
288d0 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
288e0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
288f0 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65  )(x)]&0x06).# de
28900 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
28910 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65  pha(x)   (sqlite
28920 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
28930 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
28940 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  02).# define sql
28950 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
28960 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
28970 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
28980 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65  )(x)]&0x04).# de
28990 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
289a0 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65  igit(x)  (sqlite
289b0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
289c0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
289d0 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  08).# define sql
289e0 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
289f0 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f   (sqlite3UpperTo
28a00 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20  Lower[(unsigned 
28a10 63 68 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66  char)(x)]).# def
28a20 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f  ine sqlite3Isquo
28a30 74 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  te(x)   (sqlite3
28a40 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
28a50 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 38  ed char)(x)]&0x8
28a60 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
28a70 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
28a80 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75  (x)   toupper((u
28a90 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
28aa0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
28ab0 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69  e3Isspace(x)   i
28ac0 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64  sspace((unsigned
28ad0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
28ae0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e  ine sqlite3Isaln
28af0 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28  um(x)   isalnum(
28b00 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
28b10 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
28b20 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20  ite3Isalpha(x)  
28b30 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e   isalpha((unsign
28b40 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
28b50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64  efine sqlite3Isd
28b60 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69  igit(x)   isdigi
28b70 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
28b80 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
28b90 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
28ba0 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73  )  isxdigit((uns
28bb0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
28bc0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28bd0 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c  Tolower(x)   tol
28be0 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  ower((unsigned c
28bf0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
28c00 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65  e sqlite3Isquote
28c10 28 78 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c  (x)   ((x)=='"'|
28c20 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d  |(x)=='\''||(x)=
28c30 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a  ='['||(x)=='`').
28c40 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
28c50 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a  e3IsIdChar(u8);.
28c60 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20  ./*.** Internal 
28c70 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79  function prototy
28c80 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  pes.*/.int sqlit
28c90 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20  e3StrICmp(const 
28ca0 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
28cb0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
28cc0 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68  trlen30(const ch
28cd0 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71  ar*);.#define sq
28ce0 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 4e 4e 28  lite3Strlen30NN(
28cf0 43 29 20 28 73 74 72 6c 65 6e 28 43 29 26 30 78  C) (strlen(C)&0x
28d00 33 66 66 66 66 66 66 66 29 0a 63 68 61 72 20 2a  3fffffff).char *
28d10 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70  sqlite3ColumnTyp
28d20 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29  e(Column*,char*)
28d30 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ;.#define sqlite
28d40 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65  3StrNICmp sqlite
28d50 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20  3_strnicmp..int 
28d60 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69  sqlite3MallocIni
28d70 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  t(void);.void sq
28d80 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76  lite3MallocEnd(v
28d90 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  oid);.void *sqli
28da0 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a  te3Malloc(u64);.
28db0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
28dc0 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f  locZero(u64);.vo
28dd0 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
28de0 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a  locZero(sqlite3*
28df0 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
28e00 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
28e10 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
28e20 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
28e30 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69  MallocRawNN(sqli
28e40 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72  te3*, u64);.char
28e50 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75   *sqlite3DbStrDu
28e60 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
28e70 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73   char*);.char *s
28e80 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28  qlite3DbStrNDup(
28e90 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
28ea0 68 61 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72  har*, u64);.char
28eb0 20 2a 73 71 6c 69 74 65 33 44 62 53 70 61 6e 44   *sqlite3DbSpanD
28ec0 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
28ed0 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
28ee0 61 72 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  ar*);.void *sqli
28ef0 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a  te3Realloc(void*
28f00 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
28f10 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72  lite3DbReallocOr
28f20 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Free(sqlite3 *, 
28f30 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f  void *, u64);.vo
28f40 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
28f50 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  lloc(sqlite3 *, 
28f60 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f  void *, u64);.vo
28f70 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  id sqlite3DbFree
28f80 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
28f90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
28fa0 62 46 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a  bFreeNN(sqlite3*
28fb0 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  , void*);.int sq
28fc0 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28  lite3MallocSize(
28fd0 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
28fe0 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28  te3DbMallocSize(
28ff0 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
29000 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  ;.void *sqlite3P
29010 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  ageMalloc(int);.
29020 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65  void sqlite3Page
29030 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
29040 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44  d sqlite3MemSetD
29050 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69  efault(void);.#i
29060 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
29070 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c  ESTABLE.void sql
29080 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  ite3BenignMalloc
29090 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76  Hooks(void (*)(v
290a0 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76  oid), void (*)(v
290b0 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  oid));.#endif.in
290c0 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61  t sqlite3HeapNea
290d0 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a  rlyFull(void);..
290e0 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73  /*.** On systems
290f0 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63   with ample stac
29100 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74  k space and that
29110 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28   support alloca(
29120 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f  ), make.** use o
29130 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62  f alloca() to ob
29140 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c  tain space for l
29150 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f  arge automatic o
29160 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61  bjects.  By defa
29170 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73  ult,.** obtain s
29180 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  pace from malloc
29190 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c  ()..**.** The al
291a0 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e  loca() routine n
291b0 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c  ever returns NUL
291c0 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  L.  This will ca
291d0 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a  use code paths.*
291e0 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68  * that deal with
291f0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
29200 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f  oc() failures to
29210 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e   be unreachable.
29220 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
29230 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64  E_USE_ALLOCA.# d
29240 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
29250 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
29260 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65    alloca(N).# de
29270 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
29280 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
29290 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e   memset(alloca(N
292a0 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e  ), 0, N).# defin
292b0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
292c0 65 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20  ee(D,P).#else.# 
292d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
292e0 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
292f0 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c     sqlite3DbMall
29300 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66  ocRaw(D,N).# def
29310 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
29320 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
29330 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
29340 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  ero(D,N).# defin
29350 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
29360 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71  ee(D,P)       sq
29370 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29  lite3DbFree(D,P)
29380 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e  .#endif../* Do n
29390 6f 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45  ot allow both ME
293a0 4d 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53  MSYS5 and MEMSYS
293b0 33 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20  3 to be defined 
293c0 74 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74 68  together.  If th
293d0 65 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62  ey.** are, disab
293e0 6c 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69  le MEMSYS3.*/.#i
293f0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
29400 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74  LE_MEMSYS5.const
29410 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
29420 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
29430 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29  GetMemsys5(void)
29440 3b 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  ;.#undef SQLITE_
29450 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23  ENABLE_MEMSYS3.#
29460 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
29470 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
29480 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S3.const sqlite3
29490 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
294a0 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
294b0 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s3(void);.#endif
294c0 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
294d0 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73  E_MUTEX_OMIT.  s
294e0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
294f0 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
29500 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28  te3DefaultMutex(
29510 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
29520 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
29530 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f  onst *sqlite3Noo
29540 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  pMutex(void);.  
29550 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
29560 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63  qlite3MutexAlloc
29570 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
29580 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f  ite3MutexInit(vo
29590 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  id);.  int sqlit
295a0 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29  e3MutexEnd(void)
295b0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ;.#endif.#if !de
295c0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
295d0 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66  EX_OMIT) && !def
295e0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
295f0 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73  X_NOOP).  void s
29600 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72  qlite3MemoryBarr
29610 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65  ier(void);.#else
29620 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29630 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29  3MemoryBarrier()
29640 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33  .#endif..sqlite3
29650 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
29660 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a  atusValue(int);.
29670 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
29680 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  usUp(int, int);.
29690 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
296a0 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29  usDown(int, int)
296b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
296c0 61 74 75 73 48 69 67 68 77 61 74 65 72 28 69 6e  atusHighwater(in
296d0 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
296e0 69 74 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65  ite3LookasideUse
296f0 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29  d(sqlite3*,int*)
29700 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20  ;../* Access to 
29710 6d 75 74 65 78 65 73 20 75 73 65 64 20 62 79 20  mutexes used by 
29720 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29  sqlite3_status()
29730 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65   */.sqlite3_mute
29740 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65  x *sqlite3Pcache
29750 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71  1Mutex(void);.sq
29760 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
29770 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28  ite3MallocMutex(
29780 76 6f 69 64 29 3b 0a 0a 23 69 66 20 64 65 66 69  void);..#if defi
29790 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
297a0 45 5f 4d 55 4c 54 49 54 48 52 45 41 44 45 44 5f  E_MULTITHREADED_
297b0 43 48 45 43 4b 53 29 20 26 26 20 21 64 65 66 69  CHECKS) && !defi
297c0 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
297d0 5f 4f 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c 69  _OMIT).void sqli
297e0 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f  te3MutexWarnOnCo
297f0 6e 74 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33  ntention(sqlite3
29800 5f 6d 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a  _mutex*);.#else.
29810 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29820 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65  MutexWarnOnConte
29830 6e 74 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a  ntion(x).#endif.
29840 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29850 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
29860 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 45 58 50  INT.# define EXP
29870 37 35 34 20 28 28 28 75 36 34 29 30 78 37 66 66  754 (((u64)0x7ff
29880 29 3c 3c 35 32 29 0a 23 20 64 65 66 69 6e 65 20  )<<52).# define 
29890 4d 41 4e 37 35 34 20 28 28 28 28 75 36 34 29 31  MAN754 ((((u64)1
298a0 29 3c 3c 35 32 29 2d 31 29 0a 23 20 64 65 66 69  )<<52)-1).# defi
298b0 6e 65 20 49 73 4e 61 4e 28 58 29 20 28 28 28 58  ne IsNaN(X) (((X
298c0 29 26 45 58 50 37 35 34 29 3d 3d 45 58 50 37 35  )&EXP754)==EXP75
298d0 34 20 26 26 20 28 28 58 29 26 4d 41 4e 37 35 34  4 && ((X)&MAN754
298e0 29 21 3d 30 29 0a 20 20 69 6e 74 20 73 71 6c 69  )!=0).  int sqli
298f0 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29  te3IsNaN(double)
29900 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
29910 20 49 73 4e 61 4e 28 58 29 20 20 20 20 20 20 20   IsNaN(X)       
29920 20 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c    0.# define sql
29930 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a  ite3IsNaN(X)  0.
29940 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
29950 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
29960 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
29970 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
29980 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c  mation about SQL
29990 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  .** functions ar
299a0 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65  guments that are
299b0 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
299c0 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20  to the printf() 
299d0 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  function..*/.str
299e0 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65  uct PrintfArgume
299f0 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67  nts {.  int nArg
29a00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
29a10 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72   /* Total number
29a20 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
29a30 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20  .  int nUsed;   
29a40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
29a50 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
29a60 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
29a70 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  /.  sqlite3_valu
29a80 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20  e **apArg;   /* 
29a90 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c  The argument val
29aa0 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72 20  ues */.};..char 
29ab0 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28  *sqlite3MPrintf(
29ac0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
29ad0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72  har*, ...);.char
29ae0 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74   *sqlite3VMPrint
29af0 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
29b00 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
29b10 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
29b20 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
29b30 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
29b40 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76  VE_OS_TRACE).  v
29b50 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67  oid sqlite3Debug
29b60 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61  Printf(const cha
29b70 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66  r*, ...);.#endif
29b80 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
29b90 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64  ITE_TEST).  void
29ba0 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78   *sqlite3TestTex
29bb0 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61  tToPtr(const cha
29bc0 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
29bd0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
29be0 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71  DEBUG).  void sq
29bf0 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70  lite3TreeViewExp
29c00 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  r(TreeView*, con
29c10 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  st Expr*, u8);. 
29c20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
29c30 65 56 69 65 77 42 61 72 65 45 78 70 72 4c 69 73  eViewBareExprLis
29c40 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
29c50 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  st ExprList*, co
29c60 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
29c70 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
29c80 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56  ewExprList(TreeV
29c90 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
29ca0 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74  List*, u8, const
29cb0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
29cc0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53  sqlite3TreeViewS
29cd0 72 63 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a  rcList(TreeView*
29ce0 2c 20 63 6f 6e 73 74 20 53 72 63 4c 69 73 74 2a  , const SrcList*
29cf0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
29d00 33 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28  3TreeViewSelect(
29d10 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
29d20 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20   Select*, u8);. 
29d30 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
29d40 65 56 69 65 77 57 69 74 68 28 54 72 65 65 56 69  eViewWith(TreeVi
29d50 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a  ew*, const With*
29d60 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53  , u8);.#ifndef S
29d70 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f  QLITE_OMIT_WINDO
29d80 57 46 55 4e 43 0a 20 20 76 6f 69 64 20 73 71 6c  WFUNC.  void sql
29d90 69 74 65 33 54 72 65 65 56 69 65 77 57 69 6e 64  ite3TreeViewWind
29da0 6f 77 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  ow(TreeView*, co
29db0 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29  nst Window*, u8)
29dc0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
29dd0 54 72 65 65 56 69 65 77 57 69 6e 46 75 6e 63 28  TreeViewWinFunc(
29de0 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
29df0 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a 23   Window*, u8);.#
29e00 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 0a 76  endif.#endif...v
29e10 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74  oid sqlite3SetSt
29e20 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71  ring(char **, sq
29e30 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
29e40 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
29e50 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65  e3ErrorMsg(Parse
29e60 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
29e70 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ...);.int sqlite
29e80 33 45 72 72 6f 72 54 6f 50 61 72 73 65 72 28 73  3ErrorToParser(s
29e90 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
29ea0 69 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74  id sqlite3Dequot
29eb0 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  e(char*);.void s
29ec0 71 6c 69 74 65 33 44 65 71 75 6f 74 65 45 78 70  qlite3DequoteExp
29ed0 72 28 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  r(Expr*);.void s
29ee0 71 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28  qlite3TokenInit(
29ef0 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69  Token*,char*);.i
29f00 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72  nt sqlite3Keywor
29f10 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69  dCode(const unsi
29f20 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29  gned char*, int)
29f30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
29f40 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63  Parser(Parse*, c
29f50 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
29f60 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
29f70 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50  e3FinishCoding(P
29f80 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
29f90 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61  te3GetTempReg(Pa
29fa0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
29fb0 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65  te3ReleaseTempRe
29fc0 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69  g(Parse*,int);.i
29fd0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
29fe0 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
29ff0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2a000 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65  ReleaseTempRange
2a010 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29  (Parse*,int,int)
2a020 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c  ;.void sqlite3Cl
2a030 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28  earTempRegCache(
2a040 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20  Parse*);.#ifdef 
2a050 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74  SQLITE_DEBUG.int
2a060 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49   sqlite3NoTempsI
2a070 6e 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  nRange(Parse*,in
2a080 74 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45  t,int);.#endif.E
2a090 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
2a0a0 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
2a0b0 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c  nt,const Token*,
2a0c0 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
2a0d0 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a  te3Expr(sqlite3*
2a0e0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
2a0f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a100 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65  xprAttachSubtree
2a110 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  s(sqlite3*,Expr*
2a120 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45  ,Expr*,Expr*);.E
2a130 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70  xpr *sqlite3PExp
2a140 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45  r(Parse*, int, E
2a150 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  xpr*, Expr*);.vo
2a160 69 64 20 73 71 6c 69 74 65 33 50 45 78 70 72 41  id sqlite3PExprA
2a170 64 64 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  ddSelect(Parse*,
2a180 20 45 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29   Expr*, Select*)
2a190 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
2a1a0 78 70 72 41 6e 64 28 50 61 72 73 65 2a 2c 45 78  xprAnd(Parse*,Ex
2a1b0 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
2a1c0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 69  r *sqlite3ExprSi
2a1d0 6d 70 6c 69 66 69 65 64 41 6e 64 4f 72 28 45 78  mplifiedAndOr(Ex
2a1e0 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
2a1f0 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28  te3ExprFunction(
2a200 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
2a210 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  , Token*, int);.
2a220 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2a230 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28  AssignVarNumber(
2a240 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75  Parse*, Expr*, u
2a250 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
2a260 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69  3ExprDelete(sqli
2a270 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  te3*, Expr*);.vo
2a280 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 55 6e  id sqlite3ExprUn
2a290 6d 61 70 41 6e 64 44 65 6c 65 74 65 28 50 61 72  mapAndDelete(Par
2a2a0 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  se*, Expr*);.Exp
2a2b0 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
2a2c0 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72  prListAppend(Par
2a2d0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  se*,ExprList*,Ex
2a2e0 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  pr*);.ExprList *
2a2f0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41  sqlite3ExprListA
2a300 70 70 65 6e 64 56 65 63 74 6f 72 28 50 61 72 73  ppendVector(Pars
2a310 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 49 64 4c  e*,ExprList*,IdL
2a320 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  ist*,Expr*);.voi
2a330 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
2a340 74 53 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78  tSetSortOrder(Ex
2a350 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 29  prList*,int,int)
2a360 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2a370 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61  prListSetName(Pa
2a380 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54  rse*,ExprList*,T
2a390 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
2a3a0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
2a3b0 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45  SetSpan(Parse*,E
2a3c0 78 70 72 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  xprList*,const c
2a3d0 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
2a3e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a3f0 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71  xprListDelete(sq
2a400 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74  lite3*, ExprList
2a410 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45  *);.u32 sqlite3E
2a420 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e  xprListFlags(con
2a430 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  st ExprList*);.i
2a440 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 48  nt sqlite3IndexH
2a450 61 73 44 75 70 6c 69 63 61 74 65 52 6f 6f 74 50  asDuplicateRootP
2a460 61 67 65 28 49 6e 64 65 78 2a 29 3b 0a 69 6e 74  age(Index*);.int
2a470 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c   sqlite3Init(sql
2a480 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  ite3*, char**);.
2a490 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43  int sqlite3InitC
2a4a0 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69  allback(void*, i
2a4b0 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72  nt, char**, char
2a4c0 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
2a4d0 49 6e 69 74 4f 6e 65 28 73 71 6c 69 74 65 33 2a  InitOne(sqlite3*
2a4e0 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 75  , int, char**, u
2a4f0 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
2a500 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54  3Pragma(Parse*,T
2a510 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
2a520 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e 64 65  en*,int);.#ifnde
2a530 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2a540 52 54 55 41 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c  RTUALTABLE.Modul
2a550 65 20 2a 73 71 6c 69 74 65 33 50 72 61 67 6d 61  e *sqlite3Pragma
2a560 56 74 61 62 52 65 67 69 73 74 65 72 28 73 71 6c  VtabRegister(sql
2a570 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
2a580 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64 69 66   *zName);.#endif
2a590 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
2a5a0 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
2a5b0 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  nnection(sqlite3
2a5c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a5d0 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73  ResetOneSchema(s
2a5e0 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
2a5f0 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70  id sqlite3Collap
2a600 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79 28  seDatabaseArray(
2a610 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
2a620 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74  sqlite3CommitInt
2a630 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c  ernalChanges(sql
2a640 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
2a650 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e  ite3DeleteColumn
2a660 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c 54  Names(sqlite3*,T
2a670 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
2a680 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78  te3ColumnsFromEx
2a690 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45 78  prList(Parse*,Ex
2a6a0 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c  prList*,i16*,Col
2a6b0 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  umn**);.void sql
2a6c0 69 74 65 33 53 65 6c 65 63 74 41 64 64 43 6f 6c  ite3SelectAddCol
2a6d0 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74  umnTypeAndCollat
2a6e0 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ion(Parse*,Table
2a6f0 2a 2c 53 65 6c 65 63 74 2a 2c 63 68 61 72 29 3b  *,Select*,char);
2a700 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52  .Table *sqlite3R
2a710 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74  esultSetOfSelect
2a720 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 2c  (Parse*,Select*,
2a730 63 68 61 72 29 3b 0a 76 6f 69 64 20 73 71 6c 69  char);.void sqli
2a740 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62  te3OpenMasterTab
2a750 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29  le(Parse *, int)
2a760 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
2a770 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28  PrimaryKeyIndex(
2a780 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c  Table*);.i16 sql
2a790 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65  ite3ColumnOfInde
2a7a0 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a  x(Index*, i16);.
2a7b0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72  void sqlite3Star
2a7c0 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  tTable(Parse*,To
2a7d0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c  ken*,Token*,int,
2a7e0 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69  int,int,int);.#i
2a7f0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2a800 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20  HIDDEN_COLUMNS. 
2a810 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c   void sqlite3Col
2a820 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f  umnPropertiesFro
2a830 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f  mName(Table*, Co
2a840 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  lumn*);.#else.# 
2a850 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2a860 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72  lumnPropertiesFr
2a870 6f 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e  omName(T,C) /* n
2a880 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76  o-op */.#endif.v
2a890 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
2a8a0 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65  lumn(Parse*,Toke
2a8b0 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  n*,Token*);.void
2a8c0 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75   sqlite3AddNotNu
2a8d0 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ll(Parse*, int);
2a8e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
2a8f0 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65  PrimaryKey(Parse
2a900 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
2a910 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
2a920 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65  id sqlite3AddChe
2a930 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ckConstraint(Par
2a940 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
2a950 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61  d sqlite3AddDefa
2a960 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c  ultValue(Parse*,
2a970 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  Expr*,const char
2a980 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
2a990 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
2a9a0 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73 65  ollateType(Parse
2a9b0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
2a9c0 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65   sqlite3EndTable
2a9d0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
2a9e0 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a  oken*,u8,Select*
2a9f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61  );.int sqlite3Pa
2aa00 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61  rseUri(const cha
2aa10 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  r*,const char*,u
2aa20 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20  nsigned int*,.  
2aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa40 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c    sqlite3_vfs**,
2aa50 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b  char**,char **);
2aa60 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48  .#ifdef SQLITE_H
2aa70 41 53 5f 43 4f 44 45 43 0a 20 20 69 6e 74 20 73  AS_CODEC.  int s
2aa80 71 6c 69 74 65 33 43 6f 64 65 63 51 75 65 72 79  qlite3CodecQuery
2aa90 50 61 72 61 6d 65 74 65 72 73 28 73 71 6c 69 74  Parameters(sqlit
2aaa0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
2aab0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
2aac0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2aad0 69 74 65 33 43 6f 64 65 63 51 75 65 72 79 50 61  ite3CodecQueryPa
2aae0 72 61 6d 65 74 65 72 73 28 41 2c 42 2c 43 29 20  rameters(A,B,C) 
2aaf0 30 0a 23 65 6e 64 69 66 0a 42 74 72 65 65 20 2a  0.#endif.Btree *
2ab00 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42  sqlite3DbNameToB
2ab10 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tree(sqlite3*,co
2ab20 6e 73 74 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66  nst char*);..#if
2ab30 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
2ab40 54 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 73  TABLE.# define s
2ab50 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58  qlite3FaultSim(X
2ab60 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73  ) SQLITE_OK.#els
2ab70 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  e.  int sqlite3F
2ab80 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65  aultSim(int);.#e
2ab90 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71  ndif..Bitvec *sq
2aba0 6c 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74  lite3BitvecCreat
2abb0 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  e(u32);.int sqli
2abc0 74 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69  te3BitvecTest(Bi
2abd0 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74  tvec*, u32);.int
2abe0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
2abf0 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63  stNotNull(Bitvec
2ac00 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  *, u32);.int sql
2ac10 69 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69  ite3BitvecSet(Bi
2ac20 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69  tvec*, u32);.voi
2ac30 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43  d sqlite3BitvecC
2ac40 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33  lear(Bitvec*, u3
2ac50 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  2, void*);.void 
2ac60 73 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73  sqlite3BitvecDes
2ac70 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75  troy(Bitvec*);.u
2ac80 33 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  32 sqlite3Bitvec
2ac90 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23  Size(Bitvec*);.#
2aca0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
2acb0 54 45 53 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c  TESTABLE.int sql
2acc0 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69  ite3BitvecBuilti
2acd0 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b  nTest(int,int*);
2ace0 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20  .#endif..RowSet 
2acf0 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e  *sqlite3RowSetIn
2ad00 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  it(sqlite3*);.vo
2ad10 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  id sqlite3RowSet
2ad20 44 65 6c 65 74 65 28 76 6f 69 64 2a 29 3b 0a 76  Delete(void*);.v
2ad30 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
2ad40 74 43 6c 65 61 72 28 76 6f 69 64 2a 29 3b 0a 76  tClear(void*);.v
2ad50 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
2ad60 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c  tInsert(RowSet*,
2ad70 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74   i64);.int sqlit
2ad80 65 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77  e3RowSetTest(Row
2ad90 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68  Set*, int iBatch
2ada0 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
2adb0 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f  te3RowSetNext(Ro
2adc0 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76  wSet*, i64*);..v
2add0 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
2ade0 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b  eView(Parse*,Tok
2adf0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
2ae00 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65  *,ExprList*,Sele
2ae10 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23  ct*,int,int);..#
2ae20 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2ae30 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c  TE_OMIT_VIEW) ||
2ae40 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2ae50 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2ae60 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  LE).  int sqlite
2ae70 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
2ae80 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  mes(Parse*,Table
2ae90 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2aea0 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  ne sqlite3ViewGe
2aeb0 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42  tColumnNames(A,B
2aec0 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ) 0.#endif..#if 
2aed0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
2aee0 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c  HED>30.  int sql
2aef0 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
2af00 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64  o(yDbMask);.#end
2af10 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
2af20 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
2af30 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
2af40 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2af50 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28  e3CodeDropTable(
2af60 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2af70 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2af80 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62  sqlite3DeleteTab
2af90 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
2afa0 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
2afb0 65 33 46 72 65 65 49 6e 64 65 78 28 73 71 6c 69  e3FreeIndex(sqli
2afc0 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23  te3*, Index*);.#
2afd0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2afe0 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
2aff0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
2b000 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
2b010 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  n(Parse *pParse)
2b020 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2b030 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
2b040 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
2b050 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2b060 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
2b070 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64  mentBegin(X).# d
2b080 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
2b090 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29  oincrementEnd(X)
2b0a0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2b0b0 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65  ite3Insert(Parse
2b0c0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c  *, SrcList*, Sel
2b0d0 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69  ect*, IdList*, i
2b0e0 6e 74 2c 20 55 70 73 65 72 74 2a 29 3b 0a 76 6f  nt, Upsert*);.vo
2b0f0 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79  id *sqlite3Array
2b100 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33  Allocate(sqlite3
2b110 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a  *,void*,int,int*
2b120 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a  ,int*);.IdList *
2b130 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70  sqlite3IdListApp
2b140 65 6e 64 28 50 61 72 73 65 2a 2c 20 49 64 4c 69  end(Parse*, IdLi
2b150 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  st*, Token*);.in
2b160 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49  t sqlite3IdListI
2b170 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e  ndex(IdList*,con
2b180 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69  st char*);.SrcLi
2b190 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
2b1a0 73 74 45 6e 6c 61 72 67 65 28 50 61 72 73 65 2a  stEnlarge(Parse*
2b1b0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c  , SrcList*, int,
2b1c0 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a   int);.SrcList *
2b1d0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
2b1e0 70 65 6e 64 28 50 61 72 73 65 2a 2c 20 53 72 63  pend(Parse*, Src
2b1f0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
2b200 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20  oken*);.SrcList 
2b210 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
2b220 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61  ppendFromTerm(Pa
2b230 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2b240 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a  Token*, Token*,.
2b250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b270 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65        Token*, Se
2b280 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64  lect*, Expr*, Id
2b290 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
2b2a0 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78  ite3SrcListIndex
2b2b0 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72  edBy(Parse *, Sr
2b2c0 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a  cList *, Token *
2b2d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2b2e0 72 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50  rcListFuncArgs(P
2b2f0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2b300 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
2b310 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42   sqlite3IndexedB
2b320 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c  yLookup(Parse *,
2b330 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
2b340 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71  item *);.void sq
2b350 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
2b360 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73  tJoinType(SrcLis
2b370 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
2b380 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75  3SrcListAssignCu
2b390 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72  rsors(Parse*, Sr
2b3a0 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
2b3b0 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74  lite3IdListDelet
2b3c0 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  e(sqlite3*, IdLi
2b3d0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
2b3e0 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28  e3SrcListDelete(
2b3f0 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
2b400 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  t*);.Index *sqli
2b410 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78  te3AllocateIndex
2b420 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c  Object(sqlite3*,
2b430 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b  i16,int,char**);
2b440 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
2b450 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
2b460 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72  Token*,Token*,Sr
2b470 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  cList*,ExprList*
2b480 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20  ,int,Token*,.   
2b490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b4a0 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e         Expr*, in
2b4b0 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69  t, int, u8);.voi
2b4c0 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64  d sqlite3DropInd
2b4d0 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  ex(Parse*, SrcLi
2b4e0 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
2b4f0 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72  qlite3Select(Par
2b500 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65  se*, Select*, Se
2b510 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65  lectDest*);.Sele
2b520 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
2b530 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72  tNew(Parse*,Expr
2b540 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  List*,SrcList*,E
2b550 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a  xpr*,ExprList*,.
2b560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b570 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45           Expr*,E
2b580 78 70 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70  xprList*,u32,Exp
2b590 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2b5a0 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71  3SelectDelete(sq
2b5b0 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29  lite3*, Select*)
2b5c0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
2b5d0 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61  SrcListLookup(Pa
2b5e0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
2b5f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65  .int sqlite3IsRe
2b600 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54  adOnly(Parse*, T
2b610 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  able*, int);.voi
2b620 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  d sqlite3OpenTab
2b630 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69  le(Parse*, int i
2b640 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61  Cur, int iDb, Ta
2b650 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20  ble*, int);.#if 
2b660 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
2b670 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
2b680 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64  ETE_LIMIT) && !d
2b690 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2b6a0 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70  IT_SUBQUERY).Exp
2b6b0 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57  r *sqlite3LimitW
2b6c0 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c  here(Parse*,SrcL
2b6d0 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
2b6e0 69 73 74 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a  ist*,Expr*,char*
2b6f0 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
2b700 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d  qlite3DeleteFrom
2b710 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2b720 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69  *, Expr*, ExprLi
2b730 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  st*, Expr*);.voi
2b740 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  d sqlite3Update(
2b750 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2b760 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  , ExprList*,Expr
2b770 2a 2c 69 6e 74 2c 45 78 70 72 4c 69 73 74 2a 2c  *,int,ExprList*,
2b780 45 78 70 72 2a 2c 0a 20 20 20 20 20 20 20 20 20  Expr*,.         
2b790 20 20 20 20 20 20 20 20 20 20 55 70 73 65 72 74            Upsert
2b7a0 2a 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73  *);.WhereInfo *s
2b7b0 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
2b7c0 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
2b7d0 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
2b7e0 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69  ,ExprList*,u16,i
2b7f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2b800 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49  3WhereEnd(WhereI
2b810 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71  nfo*);.LogEst sq
2b820 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74  lite3WhereOutput
2b830 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e  RowCount(WhereIn
2b840 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
2b850 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
2b860 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
2b870 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
2b880 4f 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66  Ordered(WhereInf
2b890 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
2b8a0 57 68 65 72 65 4f 72 64 65 72 42 79 4c 69 6d 69  WhereOrderByLimi
2b8b0 74 4f 70 74 4c 61 62 65 6c 28 57 68 65 72 65 49  tOptLabel(WhereI
2b8c0 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
2b8d0 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28  e3WhereIsSorted(
2b8e0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
2b8f0 20 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e   sqlite3WhereCon
2b900 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65  tinueLabel(Where
2b910 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
2b920 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62  te3WhereBreakLab
2b930 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
2b940 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
2b950 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49  OkOnePass(WhereI
2b960 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65  nfo*, int*);.#de
2b970 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46  fine ONEPASS_OFF
2b980 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20 2f        0        /
2b990 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50 41 53 53  * Use of ONEPASS
2b9a0 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a   not allowed */.
2b9b0 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f  #define ONEPASS_
2b9c0 53 49 4e 47 4c 45 20 20 20 31 20 20 20 20 20 20  SINGLE   1      
2b9d0 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c    /* ONEPASS val
2b9e0 69 64 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  id for a single 
2b9f0 72 6f 77 20 75 70 64 61 74 65 20 2a 2f 0a 23 64  row update */.#d
2ba00 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55  efine ONEPASS_MU
2ba10 4c 54 49 20 20 20 20 32 20 20 20 20 20 20 20 20  LTI    2        
2ba20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 76 61  /* ONEPASS is va
2ba30 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65  lid for multiple
2ba40 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71   rows */.void sq
2ba50 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4c 6f 61  lite3ExprCodeLoa
2ba60 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72  dIndexColumn(Par
2ba70 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  se*, Index*, int
2ba80 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  , int, int);.int
2ba90 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2baa0 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  GetColumn(Parse*
2bab0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
2bac0 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  nt, int, u8);.vo
2bad0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
2bae0 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62  deGetColumnOfTab
2baf0 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a  le(Vdbe*, Table*
2bb00 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
2bb10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2bb20 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65  prCodeMove(Parse
2bb30 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2bb40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2bb50 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20  xprCode(Parse*, 
2bb60 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
2bb70 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
2bb80 65 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45 78  eCopy(Parse*, Ex
2bb90 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
2bba0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46  sqlite3ExprCodeF
2bbb0 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a  actorable(Parse*
2bbc0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
2bbd0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2bbe0 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c  deAtInit(Parse*,
2bbf0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
2bc00 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
2bc10 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78  eTemp(Parse*, Ex
2bc20 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
2bc30 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54  sqlite3ExprCodeT
2bc40 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78  arget(Parse*, Ex
2bc50 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
2bc60 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41  sqlite3ExprCodeA
2bc70 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20  ndCache(Parse*, 
2bc80 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
2bc90 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2bca0 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
2bcb0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
2bcc0 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69   int, u8);.#defi
2bcd0 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44  ne SQLITE_ECEL_D
2bce0 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  UP      0x01  /*
2bcf0 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c   Deep, not shall
2bd00 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65  ow copies */.#de
2bd10 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
2bd20 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20  _FACTOR   0x02  
2bd30 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f  /* Factor out co
2bd40 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a  nstant terms */.
2bd50 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
2bd60 43 45 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30  CEL_REF      0x0
2bd70 34 20 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69  4  /* Use ExprLi
2bd80 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43  st.u.x.iOrderByC
2bd90 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ol */.#define SQ
2bda0 4c 49 54 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45  LITE_ECEL_OMITRE
2bdb0 46 20 20 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74  F  0x08  /* Omit
2bdc0 20 69 66 20 45 78 70 72 4c 69 73 74 2e 75 2e 78   if ExprList.u.x
2bdd0 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a  .iOrderByCol */.
2bde0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2bdf0 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45  IfTrue(Parse*, E
2be00 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
2be10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2be20 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c  rIfFalse(Parse*,
2be30 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
2be40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2be50 78 70 72 49 66 46 61 6c 73 65 44 75 70 28 50 61  xprIfFalseDup(Pa
2be60 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2be70 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73  , int);.Table *s
2be80 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
2be90 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
2bea0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2beb0 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41  *);.#define LOCA
2bec0 54 45 5f 56 49 45 57 20 20 20 20 30 78 30 31 0a  TE_VIEW    0x01.
2bed0 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e  #define LOCATE_N
2bee0 4f 45 52 52 20 20 20 30 78 30 32 0a 54 61 62 6c  OERR   0x02.Tabl
2bef0 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
2bf00 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 75 33 32  Table(Parse*,u32
2bf10 20 66 6c 61 67 73 2c 63 6f 6e 73 74 20 63 68 61   flags,const cha
2bf20 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
2bf30 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
2bf40 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28  LocateTableItem(
2bf50 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73  Parse*,u32 flags
2bf60 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f  ,struct SrcList_
2bf70 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a  item *);.Index *
2bf80 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78  sqlite3FindIndex
2bf90 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
2bfa0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2bfb0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2bfc0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2bfd0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69  Table(sqlite3*,i
2bfe0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
2bff0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c  .void sqlite3Unl
2c000 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65  inkAndDeleteInde
2c010 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  x(sqlite3*,int,c
2c020 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2c030 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28  d sqlite3Vacuum(
2c040 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  Parse*,Token*,Ex
2c050 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2c060 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a  3RunVacuum(char*
2c070 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  *, sqlite3*, int
2c080 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  , sqlite3_value*
2c090 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
2c0a0 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71  NameFromToken(sq
2c0b0 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
2c0c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2c0d0 43 6f 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 45  Compare(Parse*,E
2c0e0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
2c0f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2c100 70 72 43 6f 6d 70 61 72 65 53 6b 69 70 28 45 78  prCompareSkip(Ex
2c110 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
2c120 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2c130 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70  rListCompare(Exp
2c140 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  rList*, ExprList
2c150 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2c160 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45  ite3ExprImpliesE
2c170 78 70 72 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  xpr(Parse*,Expr*
2c180 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
2c190 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d  nt sqlite3ExprIm
2c1a0 70 6c 69 65 73 4e 6f 6e 4e 75 6c 6c 52 6f 77 28  pliesNonNullRow(
2c1b0 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  Expr*,int);.void
2c1c0 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
2c1d0 79 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61  yzeAggregates(Na
2c1e0 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
2c1f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c200 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69  ExprAnalyzeAggLi
2c210 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  st(NameContext*,
2c220 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
2c230 73 71 6c 69 74 65 33 45 78 70 72 43 6f 76 65 72  sqlite3ExprCover
2c240 65 64 42 79 49 6e 64 65 78 28 45 78 70 72 2a 2c  edByIndex(Expr*,
2c250 20 69 6e 74 20 69 43 75 72 2c 20 49 6e 64 65 78   int iCur, Index
2c260 20 2a 70 49 64 78 29 3b 0a 69 6e 74 20 73 71 6c   *pIdx);.int sql
2c270 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73  ite3FunctionUses
2c280 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53  ThisSrc(Expr*, S
2c290 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a  rcList*);.Vdbe *
2c2a0 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50  sqlite3GetVdbe(P
2c2b0 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20  arse*);.#ifndef 
2c2c0 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
2c2d0 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  E.void sqlite3Pr
2c2e0 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64  ngSaveState(void
2c2f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
2c300 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28  rngRestoreState(
2c310 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  void);.#endif.vo
2c320 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
2c330 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69  ckAll(sqlite3*,i
2c340 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2c350 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
2c360 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  a(Parse*, int);.
2c370 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
2c380 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d  VerifyNamedSchem
2c390 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  a(Parse*, const 
2c3a0 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64  char *zDb);.void
2c3b0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61   sqlite3BeginTra
2c3c0 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsaction(Parse*,
2c3d0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2c3e0 74 65 33 45 6e 64 54 72 61 6e 73 61 63 74 69 6f  te3EndTransactio
2c3f0 6e 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  n(Parse*,int);.v
2c400 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70  oid sqlite3Savep
2c410 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  oint(Parse*, int
2c420 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2c430 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
2c440 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a  points(sqlite3 *
2c450 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c  );.void sqlite3L
2c460 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73  eaveMutexAndClos
2c470 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a  eZombie(sqlite3*
2c480 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2c490 70 72 49 64 54 6f 54 72 75 65 46 61 6c 73 65 28  prIdToTrueFalse(
2c4a0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2c4b0 74 65 33 45 78 70 72 54 72 75 74 68 56 61 6c 75  te3ExprTruthValu
2c4c0 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a  e(const Expr*);.
2c4d0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2c4e0 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29  sConstant(Expr*)
2c4f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2c500 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f  rIsConstantNotJo
2c510 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  in(Expr*);.int s
2c520 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
2c530 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45  tantOrFunction(E
2c540 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73  xpr*, u8);.int s
2c550 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
2c560 74 61 6e 74 4f 72 47 72 6f 75 70 42 79 28 50 61  tantOrGroupBy(Pa
2c570 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  rse*, Expr*, Exp
2c580 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
2c590 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43  ite3ExprIsTableC
2c5a0 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e  onstant(Expr*,in
2c5b0 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
2c5c0 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f  E_ENABLE_CURSOR_
2c5d0 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65  HINTS.int sqlite
2c5e0 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62  3ExprContainsSub
2c5f0 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65  query(Expr*);.#e
2c600 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2c610 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78  ExprIsInteger(Ex
2c620 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
2c630 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65  sqlite3ExprCanBe
2c640 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a  Null(const Expr*
2c650 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2c660 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74  prNeedsNoAffinit
2c670 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78  yChange(const Ex
2c680 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20  pr*, char);.int 
2c690 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63  sqlite3IsRowid(c
2c6a0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2c6b0 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
2c6c0 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20  eRowDelete(.    
2c6d0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72  Parse*,Table*,Tr
2c6e0 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  igger*,int,int,i
2c6f0 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c  nt,i16,u8,u8,u8,
2c700 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2c710 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64  e3GenerateRowInd
2c720 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  exDelete(Parse*,
2c730 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
2c740 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69  t, int*, int);.i
2c750 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  nt sqlite3Genera
2c760 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65  teIndexKey(Parse
2c770 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20  *, Index*, int, 
2c780 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49  int, int, int*,I
2c790 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ndex*,int);.void
2c7a0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50   sqlite3ResolveP
2c7b0 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73  artIdxLabel(Pars
2c7c0 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  e*,int);.int sql
2c7d0 69 74 65 33 45 78 70 72 52 65 66 65 72 65 6e 63  ite3ExprReferenc
2c7e0 65 73 55 70 64 61 74 65 64 43 6f 6c 75 6d 6e 28  esUpdatedColumn(
2c7f0 45 78 70 72 2a 2c 69 6e 74 2a 2c 69 6e 74 29 3b  Expr*,int*,int);
2c800 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
2c810 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43  erateConstraintC
2c820 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62  hecks(Parse*,Tab
2c830 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74  le*,int*,int,int
2c840 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20  ,int,int,.      
2c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
2c870 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  8,u8,int,int*,in
2c880 74 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 23 69 66  t*,Upsert*);.#if
2c890 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2c8a0 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f  E_NULL_TRIM.  vo
2c8b0 69 64 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b  id sqlite3SetMak
2c8c0 65 52 65 63 6f 72 64 50 35 28 56 64 62 65 2a 2c  eRecordP5(Vdbe*,
2c8d0 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23  Table*);.#else.#
2c8e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
2c8f0 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 41  etMakeRecordP5(A
2c900 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  ,B).#endif.void 
2c910 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49  sqlite3CompleteI
2c920 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsertion(Parse*,
2c930 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69  Table*,int,int,i
2c940 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c  nt,int*,int,int,
2c950 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2c960 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64  3OpenTableAndInd
2c970 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62  ices(Parse*, Tab
2c980 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e  le*, int, u8, in
2c990 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e  t, u8*, int*, in
2c9a0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
2c9b0 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61  3BeginWriteOpera
2c9c0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
2c9d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2c9e0 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50  ite3MultiWrite(P
2c9f0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
2ca00 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72  ite3MayAbort(Par
2ca10 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
2ca20 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74  e3HaltConstraint
2ca30 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
2ca40 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38  t, char*, i8, u8
2ca50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
2ca60 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28  niqueConstraint(
2ca70 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64  Parse*, int, Ind
2ca80 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
2ca90 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e  e3RowidConstrain
2caa0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54  t(Parse*, int, T
2cab0 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71  able*);.Expr *sq
2cac0 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c  lite3ExprDup(sql
2cad0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29  ite3*,Expr*,int)
2cae0 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
2caf0 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73  te3ExprListDup(s
2cb00 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74  qlite3*,ExprList
2cb10 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  *,int);.SrcList 
2cb20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44  *sqlite3SrcListD
2cb30 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c  up(sqlite3*,SrcL
2cb40 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73  ist*,int);.IdLis
2cb50 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
2cb60 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c  Dup(sqlite3*,IdL
2cb70 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73  ist*);.Select *s
2cb80 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28  qlite3SelectDup(
2cb90 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
2cba0 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a  ,int);.FuncDef *
2cbb0 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 53  sqlite3FunctionS
2cbc0 65 61 72 63 68 28 69 6e 74 2c 63 6f 6e 73 74 20  earch(int,const 
2cbd0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
2cbe0 69 74 65 33 49 6e 73 65 72 74 42 75 69 6c 74 69  ite3InsertBuilti
2cbf0 6e 46 75 6e 63 73 28 46 75 6e 63 44 65 66 2a 2c  nFuncs(FuncDef*,
2cc00 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  int);.FuncDef *s
2cc10 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69  qlite3FindFuncti
2cc20 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  on(sqlite3*,cons
2cc30 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38 2c 75  t char*,int,u8,u
2cc40 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
2cc50 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46  RegisterBuiltinF
2cc60 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
2cc70 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
2cc80 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63  sterDateTimeFunc
2cc90 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
2cca0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
2ccb0 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e 42 75  rPerConnectionBu
2ccc0 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73  iltinFunctions(s
2ccd0 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
2cce0 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
2ccf0 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  Ok(sqlite3*);.in
2cd00 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
2cd10 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c  heckSickOrOk(sql
2cd20 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
2cd30 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65  ite3ChangeCookie
2cd40 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a  (Parse*, int);..
2cd50 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2cd60 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26  ITE_OMIT_VIEW) &
2cd70 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2cd80 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
2cd90 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65  void sqlite3Mate
2cda0 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73  rializeView(Pars
2cdb0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
2cdc0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  *, ExprList*,Exp
2cdd0 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  r*,int);.#endif.
2cde0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2cdf0 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76  OMIT_TRIGGER.  v
2ce00 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
2ce10 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
2ce20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
2ce30 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72  t,int,IdList*,Sr
2ce40 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  cList*,.        
2ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce60 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e     Expr*,int, in
2ce70 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
2ce80 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28  e3FinishTrigger(
2ce90 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53  Parse*, TriggerS
2cea0 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20  tep*, Token*);. 
2ceb0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
2cec0 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  pTrigger(Parse*,
2ced0 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
2cee0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
2cef0 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61  ropTriggerPtr(Pa
2cf00 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  rse*, Trigger*);
2cf10 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
2cf20 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
2cf30 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a  (Parse *, Table*
2cf40 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
2cf50 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20  , int *pMask);. 
2cf60 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
2cf70 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72  3TriggerList(Par
2cf80 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a  se *, Table *);.
2cf90 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
2cfa0 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72  deRowTrigger(Par
2cfb0 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  se*, Trigger *, 
2cfc0 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
2cfd0 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20  int, Table *,.  
2cfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cff0 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69            int, i
2d000 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
2d010 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
2d020 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72  riggerDirect(Par
2d030 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  se *, Trigger *,
2d040 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
2d050 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
2d060 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67   sqliteViewTrigg
2d070 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ers(Parse*, Tabl
2d080 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
2d090 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f  ExprList*);.  vo
2d0a0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
2d0b0 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69  TriggerStep(sqli
2d0c0 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65  te3*, TriggerSte
2d0d0 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  p*);.  TriggerSt
2d0e0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
2d0f0 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c  erSelectStep(sql
2d100 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 0a 20  ite3*,Select*,. 
2d110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d130 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
2d140 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2d150 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
2d160 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e  sqlite3TriggerIn
2d170 73 65 72 74 53 74 65 70 28 50 61 72 73 65 2a 2c  sertStep(Parse*,
2d180 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c  Token*, IdList*,
2d190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1b0 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a           Select*
2d1c0 2c 75 38 2c 55 70 73 65 72 74 2a 2c 0a 20 20 20  ,u8,Upsert*,.   
2d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1f0 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
2d200 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
2d210 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
2d220 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64 61  lite3TriggerUpda
2d230 74 65 53 74 65 70 28 50 61 72 73 65 2a 2c 54 6f  teStep(Parse*,To
2d240 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  ken*,ExprList*, 
2d250 45 78 70 72 2a 2c 20 75 38 2c 0a 20 20 20 20 20  Expr*, u8,.     
2d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d280 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63     const char*,c
2d290 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54  onst char*);.  T
2d2a0 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
2d2b0 74 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65  te3TriggerDelete
2d2c0 53 74 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b 65  Step(Parse*,Toke
2d2d0 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20 20 20 20 20  n*, Expr*,.     
2d2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d300 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63     const char*,c
2d310 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
2d320 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
2d330 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
2d340 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
2d350 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
2d360 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
2d370 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  er(sqlite3*,int,
2d380 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2d390 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67  u32 sqlite3Trigg
2d3a0 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a  erColmask(Parse*
2d3b0 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69  ,Trigger*,ExprLi
2d3c0 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c  st*,int,int,Tabl
2d3d0 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  e*,int);.# defin
2d3e0 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
2d3f0 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
2d400 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d  pToplevel ? (p)-
2d410 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29  >pToplevel : (p)
2d420 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2d430 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20  e3IsToplevel(p) 
2d440 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d  ((p)->pToplevel=
2d450 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
2d460 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
2d470 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c  rsExist(B,C,D,E,
2d480 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  F) 0.# define sq
2d490 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
2d4a0 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  er(A,B).# define
2d4b0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
2d4c0 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65  gerPtr(A,B).# de
2d4d0 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69  fine sqlite3Unli
2d4e0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
2d4f0 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69  er(A,B,C).# defi
2d500 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
2d510 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44  wTrigger(A,B,C,D
2d520 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65  ,E,F,G,H,I).# de
2d530 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
2d540 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
2d550 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20  (A,B,C,D,E,F).# 
2d560 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
2d570 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20  iggerList(X, Y) 
2d580 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
2d590 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
2d5a0 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71  p) p.# define sq
2d5b0 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
2d5c0 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71  p) 1.# define sq
2d5d0 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
2d5e0 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ask(A,B,C,D,E,F,
2d5f0 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  G) 0.#endif..int
2d600 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65   sqlite3JoinType
2d610 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
2d620 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
2d630 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
2d640 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50  eateForeignKey(P
2d650 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
2d660 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69  , Token*, ExprLi
2d670 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
2d680 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65  sqlite3DeferFore
2d690 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69  ignKey(Parse*, i
2d6a0 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
2d6b0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
2d6c0 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ZATION.  void sq
2d6d0 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61  lite3AuthRead(Pa
2d6e0 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d  rse*,Expr*,Schem
2d6f0 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20  a*,SrcList*);.  
2d700 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43  int sqlite3AuthC
2d710 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c  heck(Parse*,int,
2d720 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2d730 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2d740 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
2d750 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
2d760 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41  xtPush(Parse*, A
2d770 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e  uthContext*, con
2d780 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
2d790 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
2d7a0 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74  textPop(AuthCont
2d7b0 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ext*);.  int sql
2d7c0 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28  ite3AuthReadCol(
2d7d0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
2d7e0 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ar *, const char
2d7f0 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a   *, int);.#else.
2d800 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2d810 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64  AuthRead(a,b,c,d
2d820 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2d830 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c  e3AuthCheck(a,b,
2d840 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45  c,d,e)    SQLITE
2d850 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  _OK.# define sql
2d860 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
2d870 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66  ush(a,b,c).# def
2d880 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
2d890 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28  ontextPop(a)  ((
2d8a0 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66  void)(a)).#endif
2d8b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74  .void sqlite3Att
2d8c0 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
2d8d0 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  *, Expr*, Expr*)
2d8e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
2d8f0 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
2d900 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2d910 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72  3FixInit(DbFixer
2d920 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  *, Parse*, int, 
2d930 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2d940 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  st Token*);.int 
2d950 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73  sqlite3FixSrcLis
2d960 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c  t(DbFixer*, SrcL
2d970 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2d980 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69  e3FixSelect(DbFi
2d990 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xer*, Select*);.
2d9a0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
2d9b0 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  pr(DbFixer*, Exp
2d9c0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2d9d0 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69  FixExprList(DbFi
2d9e0 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  xer*, ExprList*)
2d9f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
2da00 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69  TriggerStep(DbFi
2da10 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65  xer*, TriggerSte
2da20 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  p*);.int sqlite3
2da30 52 65 61 6c 53 61 6d 65 41 73 49 6e 74 28 64 6f  RealSameAsInt(do
2da40 75 62 6c 65 2c 73 71 6c 69 74 65 33 5f 69 6e 74  uble,sqlite3_int
2da50 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
2da60 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20  AtoF(const char 
2da70 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74  *z, double*, int
2da80 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
2da90 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74  e3GetInt32(const
2daa0 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a   char *, int*);.
2dab0 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28  int sqlite3Atoi(
2dac0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 69  const char*);.#i
2dad0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2dae0 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69  T_UTF16.int sqli
2daf0 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28  te3Utf16ByteLen(
2db00 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74  const void *pDat
2db10 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 23  a, int nChar);.#
2db20 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2db30 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e  3Utf8CharLen(con
2db40 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20  st char *pData, 
2db50 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20  int nByte);.u32 
2db60 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28  sqlite3Utf8Read(
2db70 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67  const u8**);.Log
2db80 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
2db90 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73  t(u64);.LogEst s
2dba0 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28  qlite3LogEstAdd(
2dbb0 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a  LogEst,LogEst);.
2dbc0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2dbd0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2dbe0 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
2dbf0 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28  ogEstFromDouble(
2dc00 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a  double);.#endif.
2dc10 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2dc20 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
2dc30 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a  CANSTATUS) || \.
2dc40 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49      defined(SQLI
2dc50 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 29  TE_ENABLE_STAT4)
2dc60 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   || \.    define
2dc70 64 28 53 51 4c 49 54 45 5f 45 58 50 4c 41 49 4e  d(SQLITE_EXPLAIN
2dc80 5f 45 53 54 49 4d 41 54 45 44 5f 52 4f 57 53 29  _ESTIMATED_ROWS)
2dc90 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45  .u64 sqlite3LogE
2dca0 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b  stToInt(LogEst);
2dcb0 0a 23 65 6e 64 69 66 0a 56 4c 69 73 74 20 2a 73  .#endif.VList *s
2dcc0 71 6c 69 74 65 33 56 4c 69 73 74 41 64 64 28 73  qlite3VListAdd(s
2dcd0 71 6c 69 74 65 33 2a 2c 56 4c 69 73 74 2a 2c 63  qlite3*,VList*,c
2dce0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69  onst char*,int,i
2dcf0 6e 74 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  nt);.const char 
2dd00 2a 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d  *sqlite3VListNum
2dd10 54 6f 4e 61 6d 65 28 56 4c 69 73 74 2a 2c 69 6e  ToName(VList*,in
2dd20 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  t);.int sqlite3V
2dd30 4c 69 73 74 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c  ListNameToNum(VL
2dd40 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
2dd50 2c 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f  ,int);../*.** Ro
2dd60 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61  utines to read a
2dd70 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c  nd write variabl
2dd80 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
2dd90 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74  s.  These used t
2dda0 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20  o.** be defined 
2ddb0 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77  locally, but now
2ddc0 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69   we use the vari
2ddd0 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74  nt routines in t
2dde0 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c  he util.c.** fil
2ddf0 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  e..*/.int sqlite
2de00 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67  3PutVarint(unsig
2de10 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b  ned char*, u64);
2de20 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
2de30 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67  rint(const unsig
2de40 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20  ned char *, u64 
2de50 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  *);.u8 sqlite3Ge
2de60 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20  tVarint32(const 
2de70 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
2de80 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c   u32 *);.int sql
2de90 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36  ite3VarintLen(u6
2dea0 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  4 v);../*.** The
2deb0 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20   common case is 
2dec0 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20  for a varint to 
2ded0 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  be a single byte
2dee0 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e  .  They followin
2def0 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64  g.** macros hand
2df00 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  le the common ca
2df10 73 65 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f  se without a pro
2df20 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74  cedure call, but
2df30 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68   then call.** th
2df40 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20  e procedure for 
2df50 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a  larger varints..
2df60 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  */.#define getVa
2df70 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
2df80 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29   (u8)((*(A)<(u8)
2df90 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29  0x80)?((B)=(u32)
2dfa0 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47  *(A)),1:sqlite3G
2dfb0 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28  etVarint32((A),(
2dfc0 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65  u32 *)&(B))).#de
2dfd0 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32  fine putVarint32
2dfe0 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
2dff0 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30  ((u32)(B)<(u32)0
2e000 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69  x80)?(*(A)=(unsi
2e010 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31  gned char)(B)),1
2e020 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56  :\.  sqlite3PutV
2e030 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a  arint((A),(B))).
2e040 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
2e050 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56  t    sqlite3GetV
2e060 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75  arint.#define pu
2e070 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
2e080 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f  e3PutVarint...co
2e090 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2e0a0 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74  3IndexAffinitySt
2e0b0 72 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65  r(sqlite3*, Inde
2e0c0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
2e0d0 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56  3TableAffinity(V
2e0e0 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
2e0f0 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  t);.char sqlite3
2e100 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28  CompareAffinity(
2e110 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
2e120 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c  r aff2);.int sql
2e130 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
2e140 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c  yOk(Expr *pExpr,
2e150 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69   char idx_affini
2e160 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  ty);.char sqlite
2e170 33 54 61 62 6c 65 43 6f 6c 75 6d 6e 41 66 66 69  3TableColumnAffi
2e180 6e 69 74 79 28 54 61 62 6c 65 2a 2c 69 6e 74 29  nity(Table*,int)
2e190 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78  ;.char sqlite3Ex
2e1a0 70 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  prAffinity(Expr 
2e1b0 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c  *pExpr);.int sql
2e1c0 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74  ite3Atoi64(const
2e1d0 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e   char*, i64*, in
2e1e0 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
2e1f0 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34  te3DecOrHexToI64
2e200 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36  (const char*, i6
2e210 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  4*);.void sqlite
2e220 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71  3ErrorWithMsg(sq
2e230 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
2e240 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76  st char*,...);.v
2e250 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
2e260 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
2e270 76 6f 69 64 20 73 71 6c 69 74 65 33 53 79 73 74  void sqlite3Syst
2e280 65 6d 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a  emError(sqlite3*
2e290 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  ,int);.void *sql
2e2a0 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71  ite3HexToBlob(sq
2e2b0 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
2e2c0 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75  ar *z, int n);.u
2e2d0 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e  8 sqlite3HexToIn
2e2e0 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71  t(int h);.int sq
2e2f0 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65  lite3TwoPartName
2e300 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
2e310 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
2e320 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69  n **);..#if defi
2e330 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f  ned(SQLITE_NEED_
2e340 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20  ERR_NAME).const 
2e350 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
2e360 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69  Name(int);.#endi
2e370 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
2e380 5f 45 4e 41 42 4c 45 5f 44 45 53 45 52 49 41 4c  _ENABLE_DESERIAL
2e390 49 5a 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  IZE.int sqlite3M
2e3a0 65 6d 64 62 49 6e 69 74 28 76 6f 69 64 29 3b 0a  emdbInit(void);.
2e3b0 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68  #endif..const ch
2e3c0 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74  ar *sqlite3ErrSt
2e3d0 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
2e3e0 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61  te3ReadSchema(Pa
2e3f0 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f  rse *pParse);.Co
2e400 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69  llSeq *sqlite3Fi
2e410 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65  ndCollSeq(sqlite
2e420 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74  3*,u8 enc, const
2e430 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74   char*,int);.int
2e440 20 73 71 6c 69 74 65 33 49 73 42 69 6e 61 72 79   sqlite3IsBinary
2e450 28 63 6f 6e 73 74 20 43 6f 6c 6c 53 65 71 2a 29  (const CollSeq*)
2e460 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2e470 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28  e3LocateCollSeq(
2e480 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63  Parse *pParse, c
2e490 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29  onst char*zName)
2e4a0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2e4b0 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61  e3ExprCollSeq(Pa
2e4c0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
2e4d0 72 20 2a 70 45 78 70 72 29 3b 0a 43 6f 6c 6c 53  r *pExpr);.CollS
2e4e0 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4e  eq *sqlite3ExprN
2e4f0 4e 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  NCollSeq(Parse *
2e500 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45  pParse, Expr *pE
2e510 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
2e520 33 45 78 70 72 43 6f 6c 6c 53 65 71 4d 61 74 63  3ExprCollSeqMatc
2e530 68 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 45  h(Parse*,Expr*,E
2e540 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
2e550 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61  ite3ExprAddColla
2e560 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70  teToken(Parse *p
2e570 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f  Parse, Expr*, co
2e580 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  nst Token*, int)
2e590 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
2e5a0 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72  xprAddCollateStr
2e5b0 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ing(Parse*,Expr*
2e5c0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45  ,const char*);.E
2e5d0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
2e5e0 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72  SkipCollate(Expr
2e5f0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
2e600 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65  3ExprSkipCollate
2e610 41 6e 64 4c 69 6b 65 6c 79 28 45 78 70 72 2a 29  AndLikely(Expr*)
2e620 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
2e630 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  ckCollSeq(Parse 
2e640 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69  *, CollSeq *);.i
2e650 6e 74 20 73 71 6c 69 74 65 33 57 72 69 74 61 62  nt sqlite3Writab
2e660 6c 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33  leSchema(sqlite3
2e670 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
2e680 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50  heckObjectName(P
2e690 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
2e6a0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
2e6b0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2e6c0 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74  d sqlite3VdbeSet
2e6d0 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20  Changes(sqlite3 
2e6e0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2e6f0 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36 34  ite3AddInt64(i64
2e700 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
2e710 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a  te3SubInt64(i64*
2e720 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
2e730 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c  e3MulInt64(i64*,
2e740 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
2e750 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a  3AbsInt32(int);.
2e760 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2e770 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76  ABLE_8_3_NAMES.v
2e780 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53  oid sqlite3FileS
2e790 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61  uffix3(const cha
2e7a0 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  r*, char*);.#els
2e7b0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2e7c0 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c  e3FileSuffix3(X,
2e7d0 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c  Y).#endif.u8 sql
2e7e0 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63  ite3GetBoolean(c
2e7f0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29  onst char *z,u8)
2e800 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  ;..const void *s
2e810 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28  qlite3ValueText(
2e820 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2e830 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
2e840 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74  ValueBytes(sqlit
2e850 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a  e3_value*, u8);.
2e860 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2e870 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f  eSetStr(sqlite3_
2e880 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  value*, int, con
2e890 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20 20  st void *,u8,.  
2e8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8b0 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f        void(*)(vo
2e8c0 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
2e8d0 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28  te3ValueSetNull(
2e8e0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
2e8f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2e900 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76  ueFree(sqlite3_v
2e910 61 6c 75 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20  alue*);.#ifndef 
2e920 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
2e930 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  E.void sqlite3Re
2e940 73 75 6c 74 49 6e 74 52 65 61 6c 28 73 71 6c 69  sultIntReal(sqli
2e950 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 23  te3_context*);.#
2e960 65 6e 64 69 66 0a 73 71 6c 69 74 65 33 5f 76 61  endif.sqlite3_va
2e970 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  lue *sqlite3Valu
2e980 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b  eNew(sqlite3 *);
2e990 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2e9a0 4f 4d 49 54 5f 55 54 46 31 36 0a 63 68 61 72 20  OMIT_UTF16.char 
2e9b0 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38  *sqlite3Utf16to8
2e9c0 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
2e9d0 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38  t void*, int, u8
2e9e0 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
2e9f0 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78  lite3ValueFromEx
2ea00 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78  pr(sqlite3 *, Ex
2ea10 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71  pr *, u8, u8, sq
2ea20 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b  lite3_value **);
2ea30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2ea40 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28  ueApplyAffinity(
2ea50 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c  sqlite3_value *,
2ea60 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65   u8, u8);.#ifnde
2ea70 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
2ea80 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e  ATION.extern con
2ea90 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2eaa0 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72   sqlite3OpcodePr
2eab0 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e  operty[];.extern
2eac0 20 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69   const char sqli
2ead0 74 65 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a  te3StrBINARY[];.
2eae0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
2eaf0 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
2eb00 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d  e3UpperToLower[]
2eb10 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  ;.extern const u
2eb20 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
2eb30 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a  ite3CtypeMap[];.
2eb40 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
2eb50 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  D struct Sqlite3
2eb60 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
2eb70 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e  nfig;.extern Fun
2eb80 63 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33  cDefHash sqlite3
2eb90 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
2eba0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2ebb0 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e  _OMIT_WSD.extern
2ebc0 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64   int sqlite3Pend
2ebd0 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a  ingByte;.#endif.
2ebe0 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 56 44  #endif.#ifdef VD
2ebf0 42 45 5f 50 52 4f 46 49 4c 45 0a 65 78 74 65 72  BE_PROFILE.exter
2ec00 6e 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34  n sqlite3_uint64
2ec10 20 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65   sqlite3NProfile
2ec20 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  Cnt;.#endif.void
2ec30 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65   sqlite3RootPage
2ec40 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20  Moved(sqlite3*, 
2ec50 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
2ec60 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e  void sqlite3Rein
2ec70 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  dex(Parse*, Toke
2ec80 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
2ec90 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75  d sqlite3AlterFu
2eca0 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
2ecb0 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
2ecc0 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73  RenameTable(Pars
2ecd0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
2ece0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2ecf0 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 43 6f  te3AlterRenameCo
2ed00 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 53 72 63  lumn(Parse*, Src
2ed10 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
2ed20 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2ed30 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73  te3GetToken(cons
2ed40 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2ed50 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20  *, int *);.void 
2ed60 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72  sqlite3NestedPar
2ed70 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  se(Parse*, const
2ed80 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
2ed90 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65  id sqlite3Expire
2eda0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
2edb0 74 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ts(sqlite3*, int
2edc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2edd0 6f 64 65 52 68 73 4f 66 49 4e 28 50 61 72 73 65  odeRhsOfIN(Parse
2ede0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2edf0 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53  int sqlite3CodeS
2ee00 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  ubselect(Parse*,
2ee10 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
2ee20 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28  lite3SelectPrep(
2ee30 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
2ee40 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
2ee50 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
2ee60 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45  ctWrongNumTermsE
2ee70 72 72 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72  rror(Parse *pPar
2ee80 73 65 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a  se, Select *p);.
2ee90 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68  int sqlite3Match
2eea0 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63  SpanName(const c
2eeb0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2eec0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2eed0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
2eee0 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
2eef0 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f  ExprNames(NameCo
2ef00 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  ntext*, Expr*);.
2ef10 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
2ef20 76 65 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28  veExprListNames(
2ef30 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
2ef40 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  prList*);.void s
2ef50 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c  qlite3ResolveSel
2ef60 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  ectNames(Parse*,
2ef70 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
2ef80 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
2ef90 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52  ite3ResolveSelfR
2efa0 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c  eference(Parse*,
2efb0 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a  Table*,int,Expr*
2efc0 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
2efd0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f   sqlite3ResolveO
2efe0 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73  rderGroupBy(Pars
2eff0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  e*, Select*, Exp
2f000 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
2f010 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2f020 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28  e3ColumnDefault(
2f030 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  Vdbe *, Table *,
2f040 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2f050 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e   sqlite3AlterFin
2f060 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ishAddColumn(Par
2f070 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  se *, Token *);.
2f080 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2f090 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28  rBeginAddColumn(
2f0a0 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
2f0b0 20 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74   *);.void *sqlit
2f0c0 65 33 52 65 6e 61 6d 65 54 6f 6b 65 6e 4d 61 70  e3RenameTokenMap
2f0d0 28 50 61 72 73 65 2a 2c 20 76 6f 69 64 2a 2c 20  (Parse*, void*, 
2f0e0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
2f0f0 6c 69 74 65 33 52 65 6e 61 6d 65 54 6f 6b 65 6e  lite3RenameToken
2f100 52 65 6d 61 70 28 50 61 72 73 65 2a 2c 20 76 6f  Remap(Parse*, vo
2f110 69 64 20 2a 70 54 6f 2c 20 76 6f 69 64 20 2a 70  id *pTo, void *p
2f120 46 72 6f 6d 29 3b 0a 76 6f 69 64 20 73 71 6c 69  From);.void sqli
2f130 74 65 33 52 65 6e 61 6d 65 45 78 70 72 55 6e 6d  te3RenameExprUnm
2f140 61 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ap(Parse*, Expr*
2f150 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2f160 65 6e 61 6d 65 45 78 70 72 6c 69 73 74 55 6e 6d  enameExprlistUnm
2f170 61 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ap(Parse*, ExprL
2f180 69 73 74 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  ist*);.CollSeq *
2f190 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65  sqlite3GetCollSe
2f1a0 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f  q(Parse*, u8, Co
2f1b0 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63  llSeq *, const c
2f1c0 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69  har*);.char sqli
2f1d0 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65 28  te3AffinityType(
2f1e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 43 6f 6c  const char*, Col
2f1f0 75 6d 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  umn*);.void sqli
2f200 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65  te3Analyze(Parse
2f210 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2f220 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
2f230 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72  nvokeBusyHandler
2f240 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 2c 20 73  (BusyHandler*, s
2f250 71 6c 69 74 65 33 5f 66 69 6c 65 2a 29 3b 0a 69  qlite3_file*);.i
2f260 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
2f270 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
2f280 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2f290 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65  indDbName(sqlite
2f2a0 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
2f2b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
2f2c0 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69  nalysisLoad(sqli
2f2d0 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76  te3*,int iDB);.v
2f2e0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
2f2f0 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71  eIndexSamples(sq
2f300 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a  lite3*,Index*);.
2f310 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61  void sqlite3Defa
2f320 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a  ultRowEst(Index*
2f330 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2f340 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74  egisterLikeFunct
2f350 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69  ions(sqlite3*, i
2f360 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2f370 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73  IsLikeFunction(s
2f380 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
2f390 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  t*,char*);.void 
2f3a0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65  sqlite3SchemaCle
2f3b0 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65  ar(void *);.Sche
2f3c0 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d  ma *sqlite3Schem
2f3d0 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  aGet(sqlite3 *, 
2f3e0 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71  Btree *);.int sq
2f3f0 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64  lite3SchemaToInd
2f400 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ex(sqlite3 *db, 
2f410 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e  Schema *);.KeyIn
2f420 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
2f430 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  foAlloc(sqlite3*
2f440 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
2f450 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e  sqlite3KeyInfoUn
2f460 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b  ref(KeyInfo*);.K
2f470 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
2f480 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66  eyInfoRef(KeyInf
2f490 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  o*);.KeyInfo *sq
2f4a0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e  lite3KeyInfoOfIn
2f4b0 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  dex(Parse*, Inde
2f4c0 78 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  x*);.KeyInfo *sq
2f4d0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 46 72 6f 6d  lite3KeyInfoFrom
2f4e0 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
2f4f0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
2f500 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2f510 65 33 48 61 73 45 78 70 6c 69 63 69 74 4e 75 6c  e3HasExplicitNul
2f520 6c 73 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ls(Parse*, ExprL
2f530 69 73 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53  ist*);..#ifdef S
2f540 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20  QLITE_DEBUG.int 
2f550 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73  sqlite3KeyInfoIs
2f560 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66  Writeable(KeyInf
2f570 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  o*);.#endif.int 
2f580 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e  sqlite3CreateFun
2f590 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  c(sqlite3 *, con
2f5a0 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20  st char *, int, 
2f5b0 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76  int, void *,.  v
2f5c0 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
2f5d0 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
2f5e0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a  ite3_value **),.
2f5f0 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
2f600 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
2f610 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
2f620 29 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  ), .  void (*)(s
2f630 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
2f640 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  ,.  void (*)(sql
2f650 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a  ite3_context*),.
2f660 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
2f670 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
2f680 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
2f690 29 2c 20 0a 20 20 46 75 6e 63 44 65 73 74 72 75  ), .  FuncDestru
2f6a0 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f  ctor *pDestructo
2f6b0 72 0a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r.);.void sqlite
2f6c0 33 4e 6f 6f 70 44 65 73 74 72 75 63 74 6f 72 28  3NoopDestructor(
2f6d0 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
2f6e0 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c  ite3OomFault(sql
2f6f0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
2f700 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c  ite3OomClear(sql
2f710 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
2f720 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74  te3ApiExit(sqlit
2f730 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e  e3 *db, int);.in
2f740 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d  t sqlite3OpenTem
2f750 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20  pDatabase(Parse 
2f760 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
2f770 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74  3StrAccumInit(St
2f780 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33  rAccum*, sqlite3
2f790 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69  *, char*, int, i
2f7a0 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  nt);.char *sqlit
2f7b0 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68  e3StrAccumFinish
2f7c0 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
2f7d0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
2f7e0 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65  estInit(SelectDe
2f7f0 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78  st*,int,int);.Ex
2f800 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  pr *sqlite3Creat
2f810 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69  eColumnExpr(sqli
2f820 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  te3 *, SrcList *
2f830 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f  , int, int);..vo
2f840 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
2f850 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f  Restart(sqlite3_
2f860 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20  backup *);.void 
2f870 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64  sqlite3BackupUpd
2f880 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  ate(sqlite3_back
2f890 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73  up *, Pgno, cons
2f8a0 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65  t u8 *);..#ifnde
2f8b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55  f SQLITE_OMIT_SU
2f8c0 42 51 55 45 52 59 0a 69 6e 74 20 73 71 6c 69 74  BQUERY.int sqlit
2f8d0 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 50 61  e3ExprCheckIN(Pa
2f8e0 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65  rse*, Expr*);.#e
2f8f0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2f900 69 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28  ite3ExprCheckIN(
2f910 78 2c 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  x,y) SQLITE_OK.#
2f920 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2f930 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
2f940 34 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  4.int sqlite3Sta
2f950 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28  t4ProbeSetValue(
2f960 0a 20 20 20 20 50 61 72 73 65 2a 2c 49 6e 64 65  .    Parse*,Inde
2f970 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  x*,UnpackedRecor
2f980 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 69 6e  d**,Expr*,int,in
2f990 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  t,int*);.int sql
2f9a0 69 74 65 33 53 74 61 74 34 56 61 6c 75 65 46 72  ite3Stat4ValueFr
2f9b0 6f 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45  omExpr(Parse*, E
2f9c0 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65  xpr*, u8, sqlite
2f9d0 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64  3_value**);.void
2f9e0 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f   sqlite3Stat4Pro
2f9f0 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52  beFree(UnpackedR
2fa00 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  ecord*);.int sql
2fa10 69 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28  ite3Stat4Column(
2fa20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
2fa30 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  void*, int, int,
2fa40 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a   sqlite3_value**
2fa50 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 49  );.char sqlite3I
2fa60 6e 64 65 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69  ndexColumnAffini
2fa70 74 79 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64  ty(sqlite3*, Ind
2fa80 65 78 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69  ex*, int);.#endi
2fa90 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  f../*.** The int
2faa0 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45  erface to the LE
2fab0 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61  MON-generated pa
2fac0 72 73 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  rser.*/.#ifndef 
2fad0 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
2fae0 49 4f 4e 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  ION.  void *sqli
2faf0 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76  te3ParserAlloc(v
2fb00 6f 69 64 2a 28 2a 29 28 75 36 34 29 2c 20 50 61  oid*(*)(u64), Pa
2fb10 72 73 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  rse*);.  void sq
2fb20 6c 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28  lite3ParserFree(
2fb30 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76  void*, void(*)(v
2fb40 6f 69 64 2a 29 29 3b 0a 23 65 6e 64 69 66 0a 76  oid*));.#endif.v
2fb50 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
2fb60 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f  r(void*, int, To
2fb70 6b 65 6e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ken);.int sqlite
2fb80 33 50 61 72 73 65 72 46 61 6c 6c 62 61 63 6b 28  3ParserFallback(
2fb90 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 59 59 54  int);.#ifdef YYT
2fba0 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54  RACKMAXSTACKDEPT
2fbb0 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50  H.  int sqlite3P
2fbc0 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76  arserStackPeak(v
2fbd0 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76  oid*);.#endif..v
2fbe0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c  oid sqlite3AutoL
2fbf0 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oadExtensions(sq
2fc00 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66  lite3*);.#ifndef
2fc10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
2fc20 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f  D_EXTENSION.  vo
2fc30 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  id sqlite3CloseE
2fc40 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
2fc50 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  3*);.#else.# def
2fc60 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  ine sqlite3Close
2fc70 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65  Extensions(X).#e
2fc80 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
2fc90 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
2fca0 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71  _CACHE.  void sq
2fcb0 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50  lite3TableLock(P
2fcc0 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  arse *, int, int
2fcd0 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72  , u8, const char
2fce0 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
2fcf0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c  fine sqlite3Tabl
2fd00 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29  eLock(v,w,x,y,z)
2fd10 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2fd20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e  SQLITE_TEST.  in
2fd30 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38  t sqlite3Utf8To8
2fd40 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29  (unsigned char*)
2fd50 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
2fd60 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2fd70 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
2fd80 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
2fd90 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e  lear(Y).#  defin
2fda0 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  e sqlite3VtabSyn
2fdb0 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b  c(X,Y) SQLITE_OK
2fdc0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2fdd0 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58  e3VtabRollback(X
2fde0 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2fdf0 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29  te3VtabCommit(X)
2fe00 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2fe10 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
2fe20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c   0.#  define sql
2fe30 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a  ite3VtabLock(X).
2fe40 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2fe50 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23  3VtabUnlock(X).#
2fe60 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2fe70 56 74 61 62 4d 6f 64 75 6c 65 55 6e 72 65 66 28  VtabModuleUnref(
2fe80 44 2c 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  D,X).#  define s
2fe90 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2fea0 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e  List(X).#  defin
2feb0 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  e sqlite3VtabSav
2fec0 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20  epoint(X, Y, Z) 
2fed0 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66  SQLITE_OK.#  def
2fee0 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54  ine sqlite3GetVT
2fef0 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61  able(X,Y)  ((VTa
2ff00 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20  ble*)0).#else.  
2ff10 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2ff20 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a  bClear(sqlite3 *
2ff30 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20  db, Table*);.   
2ff40 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2ff50 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74  Disconnect(sqlit
2ff60 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70  e3 *db, Table *p
2ff70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
2ff80 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65  3VtabSync(sqlite
2ff90 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20  3 *db, Vdbe*);. 
2ffa0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2ffb0 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65  bRollback(sqlite
2ffc0 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73  3 *db);.   int s
2ffd0 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
2ffe0 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
2fff0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
30000 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  abLock(VTable *)
30010 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
30020 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62  3VtabUnlock(VTab
30030 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
30040 71 6c 69 74 65 33 56 74 61 62 4d 6f 64 75 6c 65  qlite3VtabModule
30050 55 6e 72 65 66 28 73 71 6c 69 74 65 33 2a 2c 4d  Unref(sqlite3*,M
30060 6f 64 75 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64  odule*);.   void
30070 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
30080 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29  ckList(sqlite3*)
30090 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
300a0 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71  VtabSavepoint(sq
300b0 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e  lite3 *, int, in
300c0 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  t);.   void sqli
300d0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
300e0 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74  msg(Vdbe*, sqlit
300f0 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54  e3_vtab*);.   VT
30100 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74  able *sqlite3Get
30110 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  VTable(sqlite3*,
30120 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64   Table*);.   Mod
30130 75 6c 65 20 2a 73 71 6c 69 74 65 33 56 74 61 62  ule *sqlite3Vtab
30140 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 0a 20 20  CreateModule(.  
30150 20 20 20 73 71 6c 69 74 65 33 2a 2c 0a 20 20 20     sqlite3*,.   
30160 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20    const char*,. 
30170 20 20 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65      const sqlite
30180 33 5f 6d 6f 64 75 6c 65 2a 2c 0a 20 20 20 20 20  3_module*,.     
30190 76 6f 69 64 2a 2c 0a 20 20 20 20 20 76 6f 69 64  void*,.     void
301a0 28 2a 29 28 76 6f 69 64 2a 29 0a 20 20 20 29 3b  (*)(void*).   );
301b0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
301c0 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
301d0 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e   ((db)->nVTrans>
301e0 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61  0 && (db)->aVTra
301f0 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e  ns==0).#endif.in
30200 74 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f  t sqlite3VtabEpo
30210 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74 28  nymousTableInit(
30220 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b  Parse*,Module*);
30230 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
30240 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43  bEponymousTableC
30250 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f  lear(sqlite3*,Mo
30260 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  dule*);.void sql
30270 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74  ite3VtabMakeWrit
30280 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  able(Parse*,Tabl
30290 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
302a0 33 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28  3VtabBeginParse(
302b0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
302c0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
302d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
302e0 65 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73  e3VtabFinishPars
302f0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
30300 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
30310 74 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65  tabArgInit(Parse
30320 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
30330 56 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61  VtabArgExtend(Pa
30340 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  rse*, Token*);.i
30350 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
30360 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  llCreate(sqlite3
30370 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
30380 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  ar *, char **);.
30390 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
303a0 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65  allConnect(Parse
303b0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20  *, Table*);.int 
303c0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
303d0 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c  estroy(sqlite3*,
303e0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
303f0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
30400 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65  VtabBegin(sqlite
30410 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a  3 *, VTable *);.
30420 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
30430 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63  VtabOverloadFunc
30440 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46  tion(sqlite3 *,F
30450 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72  uncDef*, int nAr
30460 67 2c 20 45 78 70 72 2a 29 3b 0a 73 71 6c 69 74  g, Expr*);.sqlit
30470 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33  e3_int64 sqlite3
30480 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28  StmtCurrentTime(
30490 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
304a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
304b0 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78  beParameterIndex
304c0 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68  (Vdbe*, const ch
304d0 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
304e0 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69  qlite3TransferBi
304f0 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73  ndings(sqlite3_s
30500 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73  tmt *, sqlite3_s
30510 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tmt *);.void sql
30520 69 74 65 33 50 61 72 73 65 72 52 65 73 65 74 28  ite3ParserReset(
30530 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20  Parse*);.#ifdef 
30540 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 4f  SQLITE_ENABLE_NO
30550 52 4d 41 4c 49 5a 45 0a 63 68 61 72 20 2a 73 71  RMALIZE.char *sq
30560 6c 69 74 65 33 4e 6f 72 6d 61 6c 69 7a 65 28 56  lite3Normalize(V
30570 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
30580 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  *);.#endif.int s
30590 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28  qlite3Reprepare(
305a0 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Vdbe*);.void sql
305b0 69 74 65 33 45 78 70 72 4c 69 73 74 43 68 65 63  ite3ExprListChec
305c0 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20  kLength(Parse*, 
305d0 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
305e0 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71   char*);.CollSeq
305f0 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43   *sqlite3BinaryC
30600 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61  ompareCollSeq(Pa
30610 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45  rse *, Expr *, E
30620 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  xpr *);.int sqli
30630 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28  te3TempInMemory(
30640 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b  const sqlite3*);
30650 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
30660 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e  ite3JournalModen
30670 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65  ame(int);.#ifnde
30680 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
30690 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43  L.  int sqlite3C
306a0 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65  heckpoint(sqlite
306b0 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  3*, int, int, in
306c0 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74  t*, int*);.  int
306d0 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75   sqlite3WalDefau
306e0 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c  ltHook(void*,sql
306f0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
30700 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23  *,int);.#endif.#
30710 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30720 49 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73  IT_CTE.  With *s
30730 71 6c 69 74 65 33 57 69 74 68 41 64 64 28 50 61  qlite3WithAdd(Pa
30740 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e  rse*,With*,Token
30750 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65  *,ExprList*,Sele
30760 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ct*);.  void sql
30770 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 73  ite3WithDelete(s
30780 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a  qlite3*,With*);.
30790 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69    void sqlite3Wi
307a0 74 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57  thPush(Parse*, W
307b0 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65  ith*, u8);.#else
307c0 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
307d0 57 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a  WithPush(x,y,z).
307e0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57  #define sqlite3W
307f0 69 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23  ithDelete(x,y).#
30800 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
30810 4c 49 54 45 5f 4f 4d 49 54 5f 55 50 53 45 52 54  LITE_OMIT_UPSERT
30820 0a 20 20 55 70 73 65 72 74 20 2a 73 71 6c 69 74  .  Upsert *sqlit
30830 65 33 55 70 73 65 72 74 4e 65 77 28 73 71 6c 69  e3UpsertNew(sqli
30840 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  te3*,ExprList*,E
30850 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
30860 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  xpr*);.  void sq
30870 6c 69 74 65 33 55 70 73 65 72 74 44 65 6c 65 74  lite3UpsertDelet
30880 65 28 73 71 6c 69 74 65 33 2a 2c 55 70 73 65 72  e(sqlite3*,Upser
30890 74 2a 29 3b 0a 20 20 55 70 73 65 72 74 20 2a 73  t*);.  Upsert *s
308a0 71 6c 69 74 65 33 55 70 73 65 72 74 44 75 70 28  qlite3UpsertDup(
308b0 73 71 6c 69 74 65 33 2a 2c 55 70 73 65 72 74 2a  sqlite3*,Upsert*
308c0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
308d0 55 70 73 65 72 74 41 6e 61 6c 79 7a 65 54 61 72  UpsertAnalyzeTar
308e0 67 65 74 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  get(Parse*,SrcLi
308f0 73 74 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20  st*,Upsert*);.  
30900 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 73 65  void sqlite3Upse
30910 72 74 44 6f 55 70 64 61 74 65 28 50 61 72 73 65  rtDoUpdate(Parse
30920 2a 2c 55 70 73 65 72 74 2a 2c 54 61 62 6c 65 2a  *,Upsert*,Table*
30930 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 23 65  ,Index*,int);.#e
30940 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  lse.#define sqli
30950 74 65 33 55 70 73 65 72 74 4e 65 77 28 76 2c 77  te3UpsertNew(v,w
30960 2c 78 2c 79 2c 7a 29 20 28 28 55 70 73 65 72 74  ,x,y,z) ((Upsert
30970 2a 29 30 29 0a 23 64 65 66 69 6e 65 20 73 71 6c  *)0).#define sql
30980 69 74 65 33 55 70 73 65 72 74 44 65 6c 65 74 65  ite3UpsertDelete
30990 28 78 2c 79 29 0a 23 64 65 66 69 6e 65 20 73 71  (x,y).#define sq
309a0 6c 69 74 65 33 55 70 73 65 72 74 44 75 70 28 78  lite3UpsertDup(x
309b0 2c 79 29 20 20 20 20 20 20 20 28 28 55 70 73 65  ,y)       ((Upse
309c0 72 74 2a 29 30 29 0a 23 65 6e 64 69 66 0a 0a 0a  rt*)0).#endif...
309d0 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20  /* Declarations 
309e0 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e  for functions in
309f0 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20   fkey.c. All of 
30a00 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63  these are replac
30a10 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d  ed by.** no-op m
30a20 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f  acros if OMIT_FO
30a30 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66  REIGN_KEY is def
30a40 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ined. In this ca
30a50 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a  se no foreign.**
30a60 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69   key functionali
30a70 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  ty is available.
30a80 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52   If OMIT_TRIGGER
30a90 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a   is defined but.
30aa0 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  ** OMIT_FOREIGN_
30ab0 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79  KEY is not, only
30ac0 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   some of the fun
30ad0 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70  ctions are no-op
30ae0 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63  ed. In.** this c
30af0 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ase foreign keys
30b00 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74   are parsed, but
30b10 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69   no other functi
30b20 6f 6e 61 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72  onality is.** pr
30b30 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d  ovided (enforcem
30b40 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72  ent of FK constr
30b50 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20 74  aints requires t
30b60 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62 2d  he triggers sub-
30b70 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20  system)..*/.#if 
30b80 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
30b90 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
30ba0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
30bb0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
30bc0 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  R).  void sqlite
30bd0 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  3FkCheck(Parse*,
30be0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
30bf0 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
30c00 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
30c10 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
30c20 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c   SrcList *, Tabl
30c30 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
30c40 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72  te3FkActions(Par
30c50 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
30c60 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
30c70 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  *, int);.  int s
30c80 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
30c90 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
30ca0 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75   int*, int);.  u
30cb0 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  32 sqlite3FkOldm
30cc0 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ask(Parse*, Tabl
30cd0 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c  e*);.  FKey *sql
30ce0 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
30cf0 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65  (Table *);.#else
30d00 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
30d10 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c  e3FkActions(a,b,
30d20 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69  c,d,e,f).  #defi
30d30 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63  ne sqlite3FkChec
30d40 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  k(a,b,c,d,e,f). 
30d50 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
30d60 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c  FkDropTable(a,b,
30d70 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  c).  #define sql
30d80 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c  ite3FkOldmask(a,
30d90 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20 23  b)         0.  #
30da0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
30db0 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64  Required(a,b,c,d
30dc0 29 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65  )    0.  #define
30dd0 20 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65   sqlite3FkRefere
30de0 6e 63 65 73 28 61 29 20 20 20 20 20 20 20 20 30  nces(a)        0
30df0 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
30e00 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
30e10 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73  IGN_KEY.  void s
30e20 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73  qlite3FkDelete(s
30e30 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a  qlite3 *, Table*
30e40 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
30e50 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61  FkLocateIndex(Pa
30e60 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79  rse*,Table*,FKey
30e70 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29  *,Index**,int**)
30e80 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
30e90 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74  e sqlite3FkDelet
30ea0 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65  e(a,b).  #define
30eb0 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65   sqlite3FkLocate
30ec0 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29  Index(a,b,c,d,e)
30ed0 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20  .#endif.../*.** 
30ee0 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20  Available fault 
30ef0 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75  injectors.  Shou
30f00 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62  ld be numbered b
30f10 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e  eginning with 0.
30f20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
30f30 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52  TE_FAULTINJECTOR
30f40 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64  _MALLOC     0.#d
30f50 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55  efine SQLITE_FAU
30f60 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54  LTINJECTOR_COUNT
30f70 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54        1../*.** T
30f80 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  he interface to 
30f90 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c  the code in faul
30fa0 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64 65  t.c used for ide
30fb0 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e  ntifying "benign
30fc0 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  ".** malloc fail
30fd0 75 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e  ures. This is on
30fe0 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20 53 51  ly present if SQ
30ff0 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
31000 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65  ** is not define
31010 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
31020 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
31030 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
31040 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
31050 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71  void);.  void sq
31060 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
31070 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73  lloc(void);.#els
31080 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
31090 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
310a0 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65  lloc().  #define
310b0 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
310c0 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66  nMalloc().#endif
310d0 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
310e0 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
310f0 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  om sqlite3FindIn
31100 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69  Index().*/.#defi
31110 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49  ne IN_INDEX_ROWI
31120 44 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20  D        1   /* 
31130 53 65 61 72 63 68 20 74 68 65 20 72 6f 77 69 64  Search the rowid
31140 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
31150 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
31160 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 32  X_EPH          2
31170 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e 20     /* Search an 
31180 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65 65  ephemeral b-tree
31190 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
311a0 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20  NDEX_INDEX_ASC  
311b0 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69 6e    3   /* Existin
311c0 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49 4e  g index ASCENDIN
311d0 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  G */.#define IN_
311e0 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43  INDEX_INDEX_DESC
311f0 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74 69     4   /* Existi
31200 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e 44  ng index DESCEND
31210 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ING */.#define I
31220 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20  N_INDEX_NOOP    
31230 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74       5   /* No t
31240 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e 20  able available. 
31250 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20  Use comparisons 
31260 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  */./*.** Allowed
31270 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 33   flags for the 3
31280 72 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  rd parameter to 
31290 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
312a0 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ex()..*/.#define
312b0 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f   IN_INDEX_NOOP_O
312c0 4b 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a  K     0x0001  /*
312d0 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49 4e   OK to return IN
312e0 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23  _INDEX_NOOP */.#
312f0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
31300 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78 30 30  MEMBERSHIP  0x00
31310 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74  02  /* IN operat
31320 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d 62  or used for memb
31330 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a 23  ership test */.#
31340 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
31350 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30 30  LOOP        0x00
31360 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74  04  /* IN operat
31370 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f 6f  or used as a loo
31380 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  p */.int sqlite3
31390 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73  FindInIndex(Pars
313a0 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33 32  e *, Expr *, u32
313b0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 2c 20 69 6e  , int*, int*, in
313c0 74 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65  t*);..int sqlite
313d0 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  3JournalOpen(sql
313e0 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73  ite3_vfs *, cons
313f0 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65  t char *, sqlite
31400 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69  3_file *, int, i
31410 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
31420 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69  JournalSize(sqli
31430 74 65 33 5f 76 66 73 20 2a 29 3b 0a 23 69 66 20  te3_vfs *);.#if 
31440 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
31450 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49  NABLE_ATOMIC_WRI
31460 54 45 29 20 5c 0a 20 7c 7c 20 64 65 66 69 6e 65  TE) \. || define
31470 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
31480 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49  BATCH_ATOMIC_WRI
31490 54 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  TE).  int sqlite
314a0 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73  3JournalCreate(s
314b0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
314c0 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69  #endif..int sqli
314d0 74 65 33 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65  te3JournalIsInMe
314e0 6d 6f 72 79 28 73 71 6c 69 74 65 33 5f 66 69 6c  mory(sqlite3_fil
314f0 65 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e *p);.void sqli
31500 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65  te3MemJournalOpe
31510 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  n(sqlite3_file *
31520 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
31530 45 78 70 72 53 65 74 48 65 69 67 68 74 41 6e 64  ExprSetHeightAnd
31540 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50 61  Flags(Parse *pPa
31550 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23  rse, Expr *p);.#
31560 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
31570 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
31580 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
31590 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20  prHeight(Select 
315a0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
315b0 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
315c0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
315d0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
315e0 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
315f0 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64  Height(x) 0.  #d
31600 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
31610 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79  rCheckHeight(x,y
31620 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71  ).#endif..u32 sq
31630 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f  lite3Get4byte(co
31640 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73  nst u8*);.void s
31650 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75  qlite3Put4byte(u
31660 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65  8*, u32);..#ifde
31670 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
31680 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
31690 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
316a0 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71  ectionBlocked(sq
316b0 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33  lite3 *, sqlite3
316c0 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
316d0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
316e0 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64  ocked(sqlite3 *d
316f0 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  b);.  void sqlit
31700 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73  e3ConnectionClos
31710 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ed(sqlite3 *db);
31720 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
31730 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
31740 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20  onBlocked(x,y). 
31750 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
31760 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b  ConnectionUnlock
31770 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20  ed(x).  #define 
31780 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
31790 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69  nClosed(x).#endi
317a0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
317b0 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  _DEBUG.  void sq
317c0 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65  lite3ParserTrace
317d0 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b  (FILE*, char *);
317e0 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
317f0 6e 65 64 28 59 59 43 4f 56 45 52 41 47 45 29 0a  ned(YYCOVERAGE).
31800 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72    int sqlite3Par
31810 73 65 72 43 6f 76 65 72 61 67 65 28 46 49 4c 45  serCoverage(FILE
31820 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  *);.#endif../*.*
31830 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
31840 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65  ENABLE IOTRACE e
31850 78 69 73 74 73 20 74 68 65 6e 20 74 68 65 20 67  xists then the g
31860 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a  lobal variable.*
31870 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  * sqlite3IoTrace
31880 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
31890 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72   a printf-like r
318a0 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a  outine used to.*
318b0 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63  * print I/O trac
318c0 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f  ing messages..*/
318d0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
318e0 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20  NABLE_IOTRACE.# 
318f0 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
31900 29 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f  )  if( sqlite3Io
31910 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33  Trace ){ sqlite3
31920 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76  IoTrace A; }.  v
31930 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49  oid sqlite3VdbeI
31940 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29  OTraceSql(Vdbe*)
31950 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c  ;.SQLITE_API SQL
31960 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20  ITE_EXTERN void 
31970 28 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73  (SQLITE_CDECL *s
31980 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63  qlite3IoTrace)(c
31990 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
319a0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
319b0 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66  IOTRACE(A).# def
319c0 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49  ine sqlite3VdbeI
319d0 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e  OTraceSql(X).#en
319e0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  dif../*.** These
319f0 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76   routines are av
31a00 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ailable for the 
31a10 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67  mem2.c debugging
31a20 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
31a30 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79  r.** only.  They
31a40 20 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72   are used to ver
31a50 69 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65  ify that differe
31a60 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65  nt "types" of me
31a70 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69  mory.** allocati
31a80 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79  ons are properly
31a90 20 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20   tracked by the 
31aa0 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71  system..**.** sq
31ab0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
31ac0 54 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20  Type() sets the 
31ad0 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c  "type" of an all
31ae0 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f  ocation to one o
31af0 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45  f.** the MEMTYPE
31b00 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  _* macros define
31b10 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79  d below.  The ty
31b20 70 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74  pe must be a bit
31b30 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73  mask with.** a s
31b40 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a  ingle bit set..*
31b50 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
31b60 65 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65  ebugHasType() re
31b70 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e  turns true if an
31b80 79 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  y of the bits in
31b90 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
31ba0 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
31bb0 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
31bc0 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
31bd0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
31be0 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  e()..** sqlite3M
31bf0 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
31c00 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
31c10 20 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65   use inside asse
31c20 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e  rt() statements.
31c30 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
31c40 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72  mdebugNoType() r
31c50 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e  eturns true if n
31c60 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20  one of the bits 
31c70 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
31c80 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
31c90 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
31ca0 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
31cb0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
31cc0 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72  ype()..**.** Per
31cd0 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d  haps the most im
31ce0 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73  portant point is
31cf0 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
31d00 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f  between MEMTYPE_
31d10 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54  HEAP.** and MEMT
31d20 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20  YPE_LOOKASIDE.  
31d30 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  If an allocation
31d40 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b   is MEMTYPE_LOOK
31d50 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e  ASIDE, that mean
31d60 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61  s.** it might ha
31d70 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65  ve been allocate
31d80 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20  d by lookaside, 
31d90 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63  except the alloc
31da0 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f  ation was.** too
31db0 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73   large or lookas
31dc0 69 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20  ide was already 
31dd0 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70  full.  It is imp
31de0 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79  ortant to verify
31df0 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74  .** that allocat
31e00 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
31e10 68 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66  have been satisf
31e20 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ied by lookaside
31e30 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73   are not.** pass
31e40 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c  ed back to non-l
31e50 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
31e60 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72  routines.  Asser
31e70 74 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a  ts such as the.*
31e80 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20  * example above 
31e90 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68  are placed on th
31ea0 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  e non-lookaside 
31eb0 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20  free() routines 
31ec0 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69  to verify.** thi
31ed0 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a  s constraint..**
31ee0 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20  .** All of this 
31ef0 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70  is no-op for a p
31f00 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e  roduction build.
31f10 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20    It only comes 
31f20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65  into.** play whe
31f30 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d  n the SQLITE_MEM
31f40 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69  DEBUG compile-ti
31f50 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65  me option is use
31f60 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
31f70 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76  ITE_MEMDEBUG.  v
31f80 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  oid sqlite3Memde
31f90 62 75 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a  bugSetType(void*
31fa0 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  ,u8);.  int sqli
31fb0 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
31fc0 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20  pe(void*,u8);.  
31fd0 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  int sqlite3Memde
31fe0 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c  bugNoType(void*,
31ff0 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  u8);.#else.# def
32000 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
32010 62 75 67 53 65 74 54 79 70 65 28 58 2c 59 29 20  bugSetType(X,Y) 
32020 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64   /* no-op */.# d
32030 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
32040 64 65 62 75 67 48 61 73 54 79 70 65 28 58 2c 59  debugHasType(X,Y
32050 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71  )  1.# define sq
32060 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
32070 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e  ype(X,Y)   1.#en
32080 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54  dif.#define MEMT
32090 59 50 45 5f 48 45 41 50 20 20 20 20 20 20 20 30  YPE_HEAP       0
320a0 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20  x01  /* General 
320b0 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  heap allocations
320c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
320d0 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30  YPE_LOOKASIDE  0
320e0 78 30 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61  x02  /* Heap tha
320f0 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
32100 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23  n lookaside */.#
32110 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50  define MEMTYPE_P
32120 43 41 43 48 45 20 20 20 20 20 30 78 30 34 20 20  CACHE     0x04  
32130 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 61 6c  /* Page cache al
32140 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a  locations */../*
32150 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e  .** Threading in
32160 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53  terface.*/.#if S
32170 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
32180 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73  _THREADS>0.int s
32190 71 6c 69 74 65 33 54 68 72 65 61 64 43 72 65 61  qlite3ThreadCrea
321a0 74 65 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a  te(SQLiteThread*
321b0 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a  *,void*(*)(void*
321c0 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  ),void*);.int sq
321d0 6c 69 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28  lite3ThreadJoin(
321e0 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76  SQLiteThread*, v
321f0 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  oid**);.#endif..
32200 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
32210 54 45 5f 45 4e 41 42 4c 45 5f 44 42 50 41 47 45  TE_ENABLE_DBPAGE
32220 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65  _VTAB) || define
32230 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69  d(SQLITE_TEST).i
32240 6e 74 20 73 71 6c 69 74 65 33 44 62 70 61 67 65  nt sqlite3Dbpage
32250 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33  Register(sqlite3
32260 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  *);.#endif.#if d
32270 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
32280 41 42 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42  ABLE_DBSTAT_VTAB
32290 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
322a0 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71  ITE_TEST).int sq
322b0 6c 69 74 65 33 44 62 73 74 61 74 52 65 67 69 73  lite3DbstatRegis
322c0 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ter(sqlite3*);.#
322d0 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
322e0 65 33 45 78 70 72 56 65 63 74 6f 72 53 69 7a 65  e3ExprVectorSize
322f0 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69  (Expr *pExpr);.i
32300 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
32310 56 65 63 74 6f 72 28 45 78 70 72 20 2a 70 45 78  Vector(Expr *pEx
32320 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  pr);.Expr *sqlit
32330 65 33 56 65 63 74 6f 72 46 69 65 6c 64 53 75 62  e3VectorFieldSub
32340 65 78 70 72 28 45 78 70 72 2a 2c 20 69 6e 74 29  expr(Expr*, int)
32350 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
32360 78 70 72 46 6f 72 56 65 63 74 6f 72 46 69 65 6c  xprForVectorFiel
32370 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 69  d(Parse*,Expr*,i
32380 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
32390 33 56 65 63 74 6f 72 45 72 72 6f 72 4d 73 67 28  3VectorErrorMsg(
323a0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
323b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
323c0 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49  OMIT_COMPILEOPTI
323d0 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e 73 74 20 63  ON_DIAGS.const c
323e0 68 61 72 20 2a 2a 73 71 6c 69 74 65 33 43 6f 6d  har **sqlite3Com
323f0 70 69 6c 65 4f 70 74 69 6f 6e 73 28 69 6e 74 20  pileOptions(int 
32400 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e 64 69 66 0a  *pnOpt);.#endif.
32410 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
32420 45 49 4e 54 5f 48 20 2a 2f 0a                    EINT_H */.