/ Hex Artifact Content
Login

Artifact 9eaaf4229ec897200e411c7aaba977f02619b7efd2056a251f3544ec17a42bf2:


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 61 73 74 50 72 6e 67 20 46 61  ruct FastPrng Fa
8cd0: 73 74 50 72 6e 67 3b 0a 74 79 70 65 64 65 66 20  stPrng;.typedef 
8ce0: 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79  struct FKey FKey
8cf0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8d00: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
8d10: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a  FuncDestructor;.
8d20: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
8d30: 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a  uncDef FuncDef;.
8d40: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
8d50: 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44  uncDefHash FuncD
8d60: 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20  efHash;.typedef 
8d70: 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64  struct IdList Id
8d80: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
8d90: 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78  ruct Index Index
8da0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8db0: 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64   IndexSample Ind
8dc0: 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65  exSample;.typede
8dd0: 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73  f struct KeyClas
8de0: 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65  s KeyClass;.type
8df0: 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e  def struct KeyIn
8e00: 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65  fo KeyInfo;.type
8e10: 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61  def struct Looka
8e20: 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a  side Lookaside;.
8e30: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
8e40: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f  ookasideSlot Loo
8e50: 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65  kasideSlot;.type
8e60: 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c  def struct Modul
8e70: 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65  e Module;.typede
8e80: 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  f struct NameCon
8e90: 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  text NameContext
8ea0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8eb0: 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79   Parse Parse;.ty
8ec0: 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72 65  pedef struct Pre
8ed0: 55 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65  Update PreUpdate
8ee0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8ef0: 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
8f00: 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
8f10: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8f20: 20 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e   RenameToken Ren
8f30: 61 6d 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65  ameToken;.typede
8f40: 66 20 73 74 72 75 63 74 20 52 6f 77 53 65 74 20  f struct RowSet 
8f50: 52 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20  RowSet;.typedef 
8f60: 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74  struct Savepoint
8f70: 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65   Savepoint;.type
8f80: 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63  def struct Selec
8f90: 74 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65  t Select;.typede
8fa0: 66 20 73 74 72 75 63 74 20 53 51 4c 69 74 65 54  f struct SQLiteT
8fb0: 68 72 65 61 64 20 53 51 4c 69 74 65 54 68 72 65  hread SQLiteThre
8fc0: 61 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ad;.typedef stru
8fd0: 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65  ct SelectDest Se
8fe0: 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65  lectDest;.typede
8ff0: 66 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  f struct SrcList
9000: 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65   SrcList;.typede
9010: 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  f struct sqlite3
9020: 5f 73 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f  _str StrAccum; /
9030: 2a 20 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73  * Internal alias
9040: 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72   for sqlite3_str
9050: 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75   */.typedef stru
9060: 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a  ct Table Table;.
9070: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
9080: 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f  ableLock TableLo
9090: 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ck;.typedef stru
90a0: 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a  ct Token Token;.
90b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
90c0: 72 65 65 56 69 65 77 20 54 72 65 65 56 69 65 77  reeView TreeView
90d0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
90e0: 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72   Trigger Trigger
90f0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
9100: 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67   TriggerPrg Trig
9110: 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20  gerPrg;.typedef 
9120: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
9130: 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a  ep TriggerStep;.
9140: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55  typedef struct U
9150: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e  npackedRecord Un
9160: 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79  packedRecord;.ty
9170: 70 65 64 65 66 20 73 74 72 75 63 74 20 55 70 73  pedef struct Ups
9180: 65 72 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65  ert Upsert;.type
9190: 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c  def struct VTabl
91a0: 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65  e VTable;.typede
91b0: 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78  f struct VtabCtx
91c0: 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65   VtabCtx;.typede
91d0: 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20  f struct Walker 
91e0: 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20  Walker;.typedef 
91f0: 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f  struct WhereInfo
9200: 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65   WhereInfo;.type
9210: 64 65 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f  def struct Windo
9220: 77 20 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65  w Window;.typede
9230: 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69  f struct With Wi
9240: 74 68 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  th;.../*.** The 
9250: 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65  bitmask datatype
9260: 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69   defined below i
9270: 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f  s used for vario
9280: 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
9290: 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67  ..**.** Changing
92a0: 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d   this from a 64-
92b0: 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20  bit to a 32-bit 
92c0: 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20  type limits the 
92d0: 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62  number of.** tab
92e0: 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f  les in a join to
92f0: 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36   32 instead of 6
9300: 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20  4.  But it also 
9310: 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65  reduces the size
9320: 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61  .** of the libra
9330: 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20  ry by 738 bytes 
9340: 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64  on ix86..*/.#ifd
9350: 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53  ef SQLITE_BITMAS
9360: 4b 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65 66  K_TYPE.  typedef
9370: 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f   SQLITE_BITMASK_
9380: 54 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65  TYPE Bitmask;.#e
9390: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36  lse.  typedef u6
93a0: 34 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69  4 Bitmask;.#endi
93b0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d  f../*.** The num
93c0: 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61  ber of bits in a
93d0: 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22   Bitmask.  "BMS"
93e0: 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20   means "BitMask 
93f0: 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Size"..*/.#defin
9400: 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69  e BMS  ((int)(si
9410: 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29  zeof(Bitmask)*8)
9420: 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69  )../*.** A bit i
9430: 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23  n a Bitmask.*/.#
9440: 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e  define MASKBIT(n
9450: 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31  )   (((Bitmask)1
9460: 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20  )<<(n)).#define 
9470: 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28  MASKBIT32(n) (((
9480: 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c  unsigned int)1)<
9490: 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c  <(n)).#define AL
94a0: 4c 42 49 54 53 20 20 20 20 20 20 28 28 42 69 74  LBITS      ((Bit
94b0: 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56  mask)-1)../* A V
94c0: 4c 69 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f  List object reco
94d0: 72 64 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65  rds a mapping be
94e0: 74 77 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73  tween parameters
94f0: 2f 76 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63  /variables/wildc
9500: 61 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53  ards.** in the S
9510: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75  QL statement (su
9520: 63 68 20 61 73 20 24 61 62 63 2c 20 40 70 71 72  ch as $abc, @pqr
9530: 2c 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74  , or :xyz) and t
9540: 68 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61  he integer.** va
9550: 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73  riable number as
9560: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
9570: 61 74 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53  at parameter.  S
9580: 65 65 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65  ee the format de
9590: 73 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20  scription.** on 
95a0: 74 68 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74  the sqlite3VList
95b0: 41 64 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f  Add() routine fo
95c0: 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69  r more informati
95d0: 6f 6e 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20  on.  A VList is 
95e0: 72 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61  really.** just a
95f0: 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67  n array of integ
9600: 65 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ers..*/.typedef 
9610: 69 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a  int VList;../*.*
9620: 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67  * Defer sourcing
9630: 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65   vdbe.h and btre
9640: 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20  e.h until after 
9650: 74 68 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20  the "u8" and.** 
9660: 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79  "BusyHandler" ty
9670: 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61  pedefs. vdbe.h a
9680: 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66  lso requires a f
9690: 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65  ew of the opaque
96a0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65  .** pointer type
96b0: 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29  s (i.e. FuncDef)
96c0: 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a   defined above..
96d0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72  */.#include "btr
96e0: 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  ee.h".#include "
96f0: 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  vdbe.h".#include
9700: 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c   "pager.h".#incl
9710: 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23  ude "pcache.h".#
9720: 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23  include "os.h".#
9730: 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68  include "mutex.h
9740: 22 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45  "../* The SQLITE
9750: 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63  _EXTRA_DURABLE c
9760: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
9770: 6f 6e 20 75 73 65 64 20 74 6f 20 73 65 74 20 74  on used to set t
9780: 68 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79  he default.** sy
9790: 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e  nchronous settin
97a0: 67 20 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20  g to EXTRA.  It 
97b0: 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70  is no longer sup
97c0: 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  ported..*/.#ifde
97d0: 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  f SQLITE_EXTRA_D
97e0: 55 52 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67  URABLE.# warning
97f0: 20 55 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41   Use SQLITE_DEFA
9800: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d  ULT_SYNCHRONOUS=
9810: 33 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c  3 instead of SQL
9820: 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c  ITE_EXTRA_DURABL
9830: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
9840: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
9850: 4f 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a  ONOUS 3.#endif..
9860: 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79  /*.** Default sy
9870: 6e 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73  nchronous levels
9880: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  ..**.** Note tha
9890: 74 20 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c  t (for historcal
98a0: 20 72 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41   reasons) the PA
98b0: 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f  GER_SYNCHRONOUS_
98c0: 2a 20 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a  * macros differ.
98d0: 2a 2a 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49  ** from the SQLI
98e0: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
98f0: 52 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20  RONOUS value by 
9900: 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20  1..**.**        
9910: 20 20 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f     PAGER_SYNCHRO
9920: 4e 4f 55 53 20 20 20 20 20 20 20 44 45 46 41 55  NOUS       DEFAU
9930: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a  LT_SYNCHRONOUS.*
9940: 2a 20 20 20 4f 46 46 20 20 20 20 20 20 20 20 20  *   OFF         
9950: 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20    1             
9960: 20 20 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a              0.**
9970: 20 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20     NORMAL       
9980: 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20   2              
9990: 20 20 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20             1.** 
99a0: 20 20 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20    FULL          
99b0: 33 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  3               
99c0: 20 20 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20            2.**  
99d0: 20 45 58 54 52 41 20 20 20 20 20 20 20 20 20 34   EXTRA         4
99e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99f0: 20 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a           3.**.**
9a00: 20 54 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e   The "PRAGMA syn
9a10: 63 68 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d  chronous" statem
9a20: 65 6e 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68  ent also uses th
9a30: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d  e zero-based num
9a40: 62 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  bers..** In othe
9a50: 72 20 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72  r words, the zer
9a60: 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20  o-based numbers 
9a70: 61 72 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c  are used for all
9a80: 20 65 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66   external interf
9a90: 61 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20  aces.** and the 
9aa0: 6f 6e 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73  one-based values
9ab0: 20 61 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e   are used intern
9ac0: 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ally..*/.#ifndef
9ad0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9ae0: 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65  SYNCHRONOUS.# de
9af0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
9b00: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  ULT_SYNCHRONOUS 
9b10: 32 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  2.#endif.#ifndef
9b20: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9b30: 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a  WAL_SYNCHRONOUS.
9b40: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
9b50: 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43  DEFAULT_WAL_SYNC
9b60: 48 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44  HRONOUS SQLITE_D
9b70: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
9b80: 55 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  US.#endif../*.**
9b90: 20 53 74 61 74 65 20 6f 66 20 61 20 73 69 6d 70   State of a simp
9ba0: 6c 65 20 50 52 4e 47 20 75 73 65 64 20 66 6f 72  le PRNG used for
9bb0: 20 74 68 65 20 70 65 72 2d 63 6f 6e 6e 65 63 74   the per-connect
9bc0: 69 6f 6e 20 61 6e 64 20 70 65 72 2d 70 61 67 65  ion and per-page
9bd0: 72 0a 2a 2a 20 70 73 65 75 64 6f 2d 72 61 6e 64  r.** pseudo-rand
9be0: 6f 6d 20 6e 75 6d 62 65 72 20 67 65 6e 65 72 61  om number genera
9bf0: 74 6f 72 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tors..*/.struct 
9c00: 46 61 73 74 50 72 6e 67 20 7b 0a 20 20 75 6e 73  FastPrng {.  uns
9c10: 69 67 6e 65 64 20 69 6e 74 20 78 2c 20 79 3b 0a  igned int x, y;.
9c20: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  };../*.** Each d
9c30: 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to 
9c40: 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74  be accessed by t
9c50: 68 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20  he system is an 
9c60: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
9c70: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
9c80: 75 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61  ucture.  There a
9c90: 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20  re normally two 
9ca0: 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75  of these structu
9cb0: 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71  res.** in the sq
9cc0: 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79  lite.aDb[] array
9cd0: 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65  .  aDb[0] is the
9ce0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
9cf0: 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31  ile and.** aDb[1
9d00: 5d 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  ] is the databas
9d10: 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68  e file used to h
9d20: 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61  old temporary ta
9d30: 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61  bles.  Additiona
9d40: 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d  l.** databases m
9d50: 61 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a  ay be attached..
9d60: 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20  */.struct Db {. 
9d70: 20 63 68 61 72 20 2a 7a 44 62 53 4e 61 6d 65 3b   char *zDbSName;
9d80: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
9d90: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 2e 20   this database. 
9da0: 28 73 63 68 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f  (schema name, no
9db0: 74 20 66 69 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20  t filename) */. 
9dc0: 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
9dd0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54        /* The B*T
9de0: 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  ree structure fo
9df0: 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  r this database 
9e00: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66  file */.  u8 saf
9e10: 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f  ety_level;     /
9e20: 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65  * How aggressive
9e30: 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61   at syncing data
9e40: 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75 38   to disk */.  u8
9e50: 20 62 53 79 6e 63 53 65 74 3b 20 20 20 20 20 20   bSyncSet;      
9e60: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22 50     /* True if "P
9e70: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
9e80: 73 3d 4e 22 20 68 61 73 20 62 65 65 6e 20 72 75  s=N" has been ru
9e90: 6e 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  n */.  Schema *p
9ea0: 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50  Schema;     /* P
9eb0: 6f 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61  ointer to databa
9ec0: 73 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69  se schema (possi
9ed0: 62 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d  bly shared) */.}
9ee0: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
9ef0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
9f00: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
9f10: 73 74 6f 72 65 73 20 61 20 64 61 74 61 62 61 73  stores a databas
9f20: 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20  e schema..**.** 
9f30: 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65  Most Schema obje
9f40: 63 74 73 20 61 72 65 20 61 73 73 6f 63 69 61 74  cts are associat
9f50: 65 64 20 77 69 74 68 20 61 20 42 74 72 65 65 2e  ed with a Btree.
9f60: 20 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20    The exception 
9f70: 69 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61  is.** the Schema
9f80: 20 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61   for the TEMP da
9f90: 74 61 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e  tabaes (sqlite3.
9fa0: 61 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73  aDb[1]) which is
9fb0: 20 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a   free-standing..
9fc0: 2a 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61 63  ** In shared cac
9fd0: 68 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c  he mode, a singl
9fe0: 65 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  e Schema object 
9ff0: 63 61 6e 20 62 65 20 73 68 61 72 65 64 20 62 79  can be shared by
a000: 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72   multiple.** Btr
a010: 65 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74  ees that refer t
a020: 6f 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72  o the same under
a030: 6c 79 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f  lying BtShared o
a040: 62 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68  bject..**.** Sch
a050: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
a060: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
a070: 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74  allocated when t
a080: 68 65 20 6c 61 73 74 20 42 74 72 65 65 20 74 68  he last Btree th
a090: 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73  at.** references
a0a0: 20 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79   them is destroy
a0b0: 65 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53  ed.   The TEMP S
a0c0: 63 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c  chema is manuall
a0d0: 79 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71  y freed by.** sq
a0e0: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a  lite3_close()..*
a0f0: 0a 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73  .** A thread mus
a100: 74 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d  t be holding a m
a110: 75 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72  utex on the corr
a120: 65 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20  esponding Btree 
a130: 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61  in order.** to a
a140: 63 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e  ccess Schema con
a150: 74 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c  tent.  This impl
a160: 69 65 73 20 74 68 61 74 20 74 68 65 20 74 68 72  ies that the thr
a170: 65 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65  ead must also be
a180: 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75  .** holding a mu
a190: 74 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74  tex on the sqlit
a1a0: 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f  e3 connection po
a1b0: 69 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20  inter that owns 
a1c0: 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f  the Btree..** Fo
a1d0: 72 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c  r a TEMP Schema,
a1e0: 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63   only the connec
a1f0: 74 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65  tion mutex is re
a200: 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  quired..*/.struc
a210: 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74  t Schema {.  int
a220: 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20   schema_cookie; 
a230: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63    /* Database sc
a240: 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
a250: 62 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ber for this fil
a260: 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65  e */.  int iGene
a270: 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47  ration;     /* G
a280: 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
a290: 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20  r.  Incremented 
a2a0: 77 69 74 68 20 65 61 63 68 20 63 68 61 6e 67 65  with each change
a2b0: 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61   */.  Hash tblHa
a2c0: 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  sh;        /* Al
a2d0: 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64  l tables indexed
a2e0: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
a2f0: 73 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20  sh idxHash;     
a300: 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64     /* All (named
a310: 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65  ) indices indexe
a320: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
a330: 61 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20  ash trigHash;   
a340: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67      /* All trigg
a350: 65 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ers indexed by n
a360: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b  ame */.  Hash fk
a370: 65 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a  eyHash;       /*
a380: 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   All foreign key
a390: 73 20 62 79 20 72 65 66 65 72 65 6e 63 65 64 20  s by referenced 
a3a0: 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
a3b0: 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20  Table *pSeqTab; 
a3c0: 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69       /* The sqli
a3d0: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
a3e0: 65 20 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e  e used by AUTOIN
a3f0: 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20  CREMENT */.  u8 
a400: 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20  file_format;    
a410: 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d    /* Schema form
a420: 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74  at version for t
a430: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38  his file */.  u8
a440: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
a450: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
a460: 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 69 73  ing used by this
a470: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75   database */.  u
a480: 31 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20  16 schemaFlags; 
a490: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73      /* Flags ass
a4a0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
a4b0: 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e  s schema */.  in
a4c0: 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20  t cache_size;   
a4d0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a4e0: 70 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20  pages to use in 
a4f0: 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a  the cache */.};.
a500: 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
a510: 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
a520: 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
a530: 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
a540: 68 65 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61  he.** Db.pSchema
a550: 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ->flags field..*
a560: 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50  /.#define DbHasP
a570: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
a580: 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d     (((D)->aDb[I]
a590: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
a5a0: 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  Flags&(P))==(P))
a5b0: 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e  .#define DbHasAn
a5c0: 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  yProperty(D,I,P)
a5d0: 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e    (((D)->aDb[I].
a5e0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a5f0: 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
a600: 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65  efine DbSetPrope
a610: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
a620: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
a630: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c  ma->schemaFlags|
a640: 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43  =(P).#define DbC
a650: 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49  learProperty(D,I
a660: 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49  ,P)   (D)->aDb[I
a670: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
a680: 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  aFlags&=~(P)../*
a690: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
a6a0: 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53  es for the DB.pS
a6b0: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
a6c0: 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42  ld..**.** The DB
a6d0: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c  _SchemaLoaded fl
a6e0: 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20  ag is set after 
a6f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
a700: 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ema has been.** 
a710: 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e  read into intern
a720: 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a  al hash tables..
a730: 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74  **.** DB_Unreset
a740: 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74  Views means that
a750: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65   one or more vie
a760: 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e  ws have column n
a770: 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76  ames that.** hav
a780: 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75  e been filled ou
a790: 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d  t.  If the schem
a7a0: 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65  a changes, these
a7b0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69   column names mi
a7c0: 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61  ght.** changes a
a7d0: 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77  nd so the view w
a7e0: 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72  ill need to be r
a7f0: 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eset..*/.#define
a800: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
a810: 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54      0x0001  /* T
a820: 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  he schema has be
a830: 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65  en loaded */.#de
a840: 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56  fine DB_UnresetV
a850: 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20  iews    0x0002  
a860: 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61  /* Some views ha
a870: 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d  ve defined colum
a880: 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  n names */.#defi
a890: 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20  ne DB_Empty     
a8a0: 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
a8b0: 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70   The file is emp
a8c0: 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74  ty (length 0 byt
a8d0: 65 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  es) */.#define D
a8e0: 42 5f 52 65 73 65 74 57 61 6e 74 65 64 20 20 20  B_ResetWanted   
a8f0: 20 20 30 78 30 30 30 38 20 20 2f 2a 20 52 65 73    0x0008  /* Res
a900: 65 74 20 74 68 65 20 73 63 68 65 6d 61 20 77 68  et the schema wh
a910: 65 6e 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3d 3d  en nSchemaLock==
a920: 30 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  0 */../*.** The 
a930: 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72  number of differ
a940: 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69  ent kinds of thi
a950: 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ngs that can be 
a960: 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67  limited.** using
a970: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d   the sqlite3_lim
a980: 69 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a  it() interface..
a990: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a9a0: 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54  E_N_LIMIT (SQLIT
a9b0: 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54  E_LIMIT_WORKER_T
a9c0: 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a  HREADS+1)../*.**
a9d0: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
a9e0: 63 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69  c is a set of fi
a9f0: 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73  xed-size buffers
aa00: 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
aa10: 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20  d.** to satisfy 
aa20: 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20  small transient 
aa30: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
aa40: 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f  n requests for o
aa50: 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69  bjects.** associ
aa60: 61 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74  ated with a part
aa70: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
aa80: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
aa90: 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61   use of.** looka
aaa0: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76  side malloc prov
aab0: 69 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61  ides a significa
aac0: 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65  nt performance e
aad0: 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61  nhancement.** (a
aae0: 70 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76  pprox 10%) by av
aaf0: 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20  oiding numerous 
ab00: 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75  malloc/free requ
ab10: 65 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69  ests while parsi
ab20: 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d  ng.** SQL statem
ab30: 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ents..**.** The 
ab40: 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74  Lookaside struct
ab50: 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67  ure holds config
ab60: 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  uration informat
ab70: 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a  ion about the.**
ab80: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
ab90: 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61  c subsystem.  Ea
aba0: 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d  ch available mem
abb0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
abc0: 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69  n.** the lookasi
abd0: 64 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20  de subsystem is 
abe0: 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b  stored on a link
abf0: 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61  ed list of Looka
ac00: 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65  sideSlot.** obje
ac10: 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61  cts..**.** Looka
ac20: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
ac30: 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65   are only allowe
ac40: 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68  d for objects th
ac50: 61 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65  at are associate
ac60: 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74  d.** with a part
ac70: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
ac80: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e  connection.  Hen
ac90: 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  ce, schema infor
aca0: 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a  mation cannot.**
acb0: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f   be stored in lo
acc0: 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20  okaside because 
acd0: 69 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20  in shared cache 
ace0: 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20  mode the schema 
acf0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69  information.** i
ad00: 73 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74  s shared by mult
ad10: 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f  iple database co
ad20: 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72  nnections.  Ther
ad30: 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72  efore, while par
ad40: 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69  sing.** schema i
ad50: 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20  nformation, the 
ad60: 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c  Lookaside.bEnabl
ad70: 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  ed flag is clear
ad80: 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f  ed so that.** lo
ad90: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
ada0: 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64  ons are not used
adb0: 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68   to construct th
adc0: 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  e schema objects
add0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  ..*/.struct Look
ade0: 61 73 69 64 65 20 7b 0a 20 20 75 33 32 20 62 44  aside {.  u32 bD
adf0: 69 73 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  isable;         
ae00: 20 20 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74    /* Only operat
ae10: 65 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20  e the lookaside 
ae20: 77 68 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75  when zero */.  u
ae30: 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20  16 sz;          
ae40: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
ae50: 66 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e  f each buffer in
ae60: 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62   bytes */.  u8 b
ae70: 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20  Malloced;       
ae80: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70      /* True if p
ae90: 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66  Start obtained f
aea0: 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  rom sqlite3_mall
aeb0: 6f 63 28 29 20 2a 2f 0a 20 20 75 33 32 20 6e 53  oc() */.  u32 nS
aec0: 6c 6f 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  lot;            
aed0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
aee0: 6f 6f 6b 61 73 69 64 65 20 73 6c 6f 74 73 20 61  ookaside slots a
aef0: 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 75 33  llocated */.  u3
af00: 32 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20  2 anStat[3];    
af10: 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73        /* 0: hits
af20: 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65  .  1: size misse
af30: 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73  s.  2: full miss
af40: 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64  es */.  Lookasid
af50: 65 53 6c 6f 74 20 2a 70 49 6e 69 74 3b 20 20 20  eSlot *pInit;   
af60: 2f 2a 20 4c 69 73 74 20 6f 66 20 62 75 66 66 65  /* List of buffe
af70: 72 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  rs not previousl
af80: 79 20 75 73 65 64 20 2a 2f 0a 20 20 4c 6f 6f 6b  y used */.  Look
af90: 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65  asideSlot *pFree
afa0: 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61  ;   /* List of a
afb0: 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73  vailable buffers
afc0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61   */.  void *pSta
afd0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rt;           /*
afe0: 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   First byte of a
aff0: 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20  vailable memory 
b000: 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  space */.  void 
b010: 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
b020: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
b030: 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61   past end of ava
b040: 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a  ilable space */.
b050: 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  };.struct Lookas
b060: 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b  ideSlot {.  Look
b070: 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74  asideSlot *pNext
b080: 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66  ;    /* Next buf
b090: 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20  fer in the list 
b0a0: 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73 20  of free buffers 
b0b0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68  */.};../*.** A h
b0c0: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 62 75  ash table for bu
b0d0: 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 20  ilt-in function 
b0e0: 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20 20 28 41  definitions.  (A
b0f0: 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e  pplication-defin
b100: 65 64 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  ed.** functions 
b110: 75 73 65 20 61 20 72 65 67 75 6c 61 72 20 74 61  use a regular ta
b120: 62 6c 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 68  ble table from h
b130: 61 73 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61  ash.h.).**.** Ha
b140: 73 68 20 65 61 63 68 20 46 75 6e 63 44 65 66 20  sh each FuncDef 
b150: 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f  structure into o
b160: 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65  ne of the FuncDe
b170: 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e  fHash.a[] slots.
b180: 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61  .** Collisions a
b190: 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65  re on the FuncDe
b1a0: 66 2e 75 2e 70 48 61 73 68 20 63 68 61 69 6e 2e  f.u.pHash chain.
b1b0: 20 20 55 73 65 20 74 68 65 20 53 51 4c 49 54 45    Use the SQLITE
b1c0: 5f 46 55 4e 43 5f 48 41 53 48 28 29 0a 2a 2a 20  _FUNC_HASH().** 
b1d0: 6d 61 63 72 6f 20 74 6f 20 63 6f 6d 70 75 74 65  macro to compute
b1e0: 20 61 20 68 61 73 68 20 6f 6e 20 74 68 65 20 66   a hash on the f
b1f0: 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 2e 0a 2a 2f  unction name..*/
b200: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b210: 46 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a  FUNC_HASH_SZ 23.
b220: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61  struct FuncDefHa
b230: 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a  sh {.  FuncDef *
b240: 61 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41  a[SQLITE_FUNC_HA
b250: 53 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a  SH_SZ];       /*
b260: 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20   Hash table for 
b270: 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a  functions */.};.
b280: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
b290: 55 4e 43 5f 48 41 53 48 28 43 2c 4c 29 20 28 28  UNC_HASH(C,L) ((
b2a0: 28 43 29 2b 28 4c 29 29 25 53 51 4c 49 54 45 5f  (C)+(L))%SQLITE_
b2b0: 46 55 4e 43 5f 48 41 53 48 5f 53 5a 29 0a 0a 23  FUNC_HASH_SZ)..#
b2c0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
b2d0: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
b2e0: 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69  ./*.** Informati
b2f0: 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22  on held in the "
b300: 73 71 6c 69 74 65 33 22 20 64 61 74 61 62 61 73  sqlite3" databas
b310: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a  e connection obj
b320: 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ect and used.** 
b330: 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61  to manage user a
b340: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a  uthentication..*
b350: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
b360: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
b370: 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  h sqlite3_userau
b380: 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74  th;.struct sqlit
b390: 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20  e3_userauth {.  
b3a0: 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20  u8 authLevel;   
b3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b3c0: 20 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74   Current authent
b3d0: 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f  ication level */
b3e0: 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20  .  int nAuthPW; 
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b400: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
b410: 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74 65 73  zAuthPW in bytes
b420: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74   */.  char *zAut
b430: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
b440: 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20      /* Password 
b450: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
b460: 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cate */.  char *
b470: 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20 20 20  zAuthUser;      
b480: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
b490: 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74  name used to aut
b4a0: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a  henticate */.};.
b4b0: 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
b4c0: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75  es for sqlite3_u
b4d0: 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65  serauth.authLeve
b4e0: 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  l */.#define UAU
b4f0: 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30  TH_Unknown     0
b500: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
b510: 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63  cation not yet c
b520: 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e  hecked */.#defin
b530: 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20  e UAUTH_Fail    
b540: 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65      1     /* Use
b550: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
b560: 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69   failed */.#defi
b570: 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20 20 20  ne UAUTH_User   
b580: 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75       2     /* Au
b590: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
b5a0: 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a   normal user */.
b5b0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64  #define UAUTH_Ad
b5c0: 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20 20 20  min       3     
b5d0: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
b5e0: 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72   as an administr
b5f0: 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63  ator */../* Func
b600: 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20  tions used only 
b610: 62 79 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a  by user authoriz
b620: 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69  ation logic */.i
b630: 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  nt sqlite3UserAu
b640: 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68  thTable(const ch
b650: 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
b660: 33 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f  3UserAuthCheckLo
b670: 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  gin(sqlite3*,con
b680: 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76  st char*,u8*);.v
b690: 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65 72 41  oid sqlite3UserA
b6a0: 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  uthInit(sqlite3*
b6b0: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
b6c0: 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33  ryptFunc(sqlite3
b6d0: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
b6e0: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
b6f0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
b700: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b710: 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ATION */../*.** 
b720: 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 65 20  typedef for the 
b730: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61  authorization ca
b740: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e  llback function.
b750: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
b760: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b770: 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20  ATION.  typedef 
b780: 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61  int (*sqlite3_xa
b790: 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  uth)(void*,int,c
b7a0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b7b0: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
b7c0: 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*,.            
b7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7e0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20     const char*, 
b7f0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
b800: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e  lse.  typedef in
b810: 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74  t (*sqlite3_xaut
b820: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
b830: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
b840: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
b850: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
b860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b870: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
b880: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
b890: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
b8a0: 43 41 54 45 44 0a 2f 2a 20 54 68 69 73 20 69 73  CATED./* This is
b8b0: 20 61 6e 20 65 78 74 72 61 20 53 51 4c 49 54 45   an extra SQLITE
b8c0: 5f 54 52 41 43 45 20 6d 61 63 72 6f 20 74 68 61  _TRACE macro tha
b8d0: 74 20 69 6e 64 69 63 61 74 65 73 20 22 6c 65 67  t indicates "leg
b8e0: 61 63 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a 20  acy" tracing.** 
b8f0: 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20  in the style of 
b900: 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 0a  sqlite3_trace().
b910: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b920: 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20  E_TRACE_LEGACY  
b930: 20 20 20 20 20 20 20 20 30 78 34 30 20 20 20 20          0x40    
b940: 20 2f 2a 20 55 73 65 20 74 68 65 20 6c 65 67 61   /* Use the lega
b950: 63 79 20 78 54 72 61 63 65 20 2a 2f 0a 23 64 65  cy xTrace */.#de
b960: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43  fine SQLITE_TRAC
b970: 45 5f 58 50 52 4f 46 49 4c 45 20 20 20 20 20 20  E_XPROFILE      
b980: 20 20 30 78 38 30 20 20 20 20 20 2f 2a 20 55 73    0x80     /* Us
b990: 65 20 74 68 65 20 6c 65 67 61 63 79 20 78 50 72  e the legacy xPr
b9a0: 6f 66 69 6c 65 20 2a 2f 0a 23 65 6c 73 65 0a 23  ofile */.#else.#
b9b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52  define SQLITE_TR
b9c0: 41 43 45 5f 4c 45 47 41 43 59 20 20 20 20 20 20  ACE_LEGACY      
b9d0: 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51      0.#define SQ
b9e0: 4c 49 54 45 5f 54 52 41 43 45 5f 58 50 52 4f 46  LITE_TRACE_XPROF
b9f0: 49 4c 45 20 20 20 20 20 20 20 20 30 0a 23 65 6e  ILE        0.#en
ba00: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
ba10: 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f  IT_DEPRECATED */
ba20: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ba30: 54 52 41 43 45 5f 4e 4f 4e 4c 45 47 41 43 59 5f  TRACE_NONLEGACY_
ba40: 4d 41 53 4b 20 20 30 78 30 66 20 20 20 20 20 2f  MASK  0x0f     /
ba50: 2a 20 4e 6f 72 6d 61 6c 20 66 6c 61 67 73 20 2a  * Normal flags *
ba60: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  /.../*.** Each d
ba70: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
ba80: 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  on is an instanc
ba90: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
baa0: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
bab0: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20  .struct sqlite3 
bac0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20  {.  sqlite3_vfs 
bad0: 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20  *pVfs;          
bae0: 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63    /* OS Interfac
baf0: 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64  e */.  struct Vd
bb00: 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
bb10: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
bb20: 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d  active virtual m
bb30: 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c  achines */.  Col
bb40: 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b  lSeq *pDfltColl;
bb50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
bb60: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
bb70: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49  ing sequence (BI
bb80: 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74  NARY) */.  sqlit
bb90: 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b  e3_mutex *mutex;
bba0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
bbb0: 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a  ection mutex */.
bbc0: 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20    Db *aDb;      
bbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbe0: 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20  /* All backends 
bbf0: 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20  */.  int nDb;   
bc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc10: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
bc20: 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74  backends current
bc30: 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 75  ly in use */.  u
bc40: 33 32 20 6d 44 62 46 6c 61 67 73 3b 20 20 20 20  32 mDbFlags;    
bc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bc60: 66 6c 61 67 73 20 72 65 63 6f 72 64 69 6e 67 20  flags recording 
bc70: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 65 20 2a  internal state *
bc80: 2f 0a 20 20 75 36 34 20 66 6c 61 67 73 3b 20 20  /.  u64 flags;  
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bca0: 20 20 2f 2a 20 66 6c 61 67 73 20 73 65 74 74 61    /* flags setta
bcb0: 62 6c 65 20 62 79 20 70 72 61 67 6d 61 73 2e 20  ble by pragmas. 
bcc0: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
bcd0: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
bce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bcf0: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
bd00: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
bd10: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34   above) */.  i64
bd20: 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
bd30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
bd40: 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20  fault mmap_size 
bd50: 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 33 32  setting */.  u32
bd60: 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3b 20 20 20   nSchemaLock;   
bd70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
bd80: 20 6e 6f 74 20 72 65 73 65 74 20 74 68 65 20 73   not reset the s
bd90: 63 68 65 6d 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a  chema when non-z
bda0: 65 72 6f 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ero */.  unsigne
bdb0: 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b  d int openFlags;
bdc0: 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20         /* Flags 
bdd0: 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65  passed to sqlite
bde0: 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f  3_vfs.xOpen() */
bdf0: 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20  .  int errCode; 
be00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be10: 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20   /* Most recent 
be20: 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49  error code (SQLI
be30: 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65  TE_*) */.  int e
be40: 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  rrMask;         
be50: 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65           /* & re
be60: 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20  sult codes with 
be70: 74 68 69 73 20 62 65 66 6f 72 65 20 72 65 74 75  this before retu
be80: 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  rning */.  int i
be90: 53 79 73 45 72 72 6e 6f 3b 20 20 20 20 20 20 20  SysErrno;       
bea0: 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6e           /* Errn
beb0: 6f 20 76 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73  o value from las
bec0: 74 20 73 79 73 74 65 6d 20 65 72 72 6f 72 20 2a  t system error *
bed0: 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61  /.  u16 dbOptFla
bee0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
bef0: 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e    /* Flags to en
bf00: 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74  able/disable opt
bf10: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  imizations */.  
bf20: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
bf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bf40: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   Text encoding *
bf50: 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69  /.  u8 autoCommi
bf60: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
bf70: 20 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f    /* The auto-co
bf80: 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20  mmit flag. */.  
bf90: 75 38 20 62 43 6f 6e 63 75 72 72 65 6e 74 3b 20  u8 bConcurrent; 
bfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bfb0: 20 43 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   Current transac
bfc0: 74 69 6f 6e 20 69 73 20 22 43 4f 4e 43 55 52 52  tion is "CONCURR
bfd0: 45 4e 54 22 20 2a 2f 0a 20 20 75 38 20 74 65 6d  ENT" */.  u8 tem
bfe0: 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20  p_store;        
bff0: 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69          /* 1: fi
c000: 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20  le 2: memory 0: 
c010: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
c020: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20  mallocFailed;   
c030: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
c040: 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65  ue if we have se
c050: 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  en a malloc fail
c060: 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 42 65 6e  ure */.  u8 bBen
c070: 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20  ignMalloc;      
c080: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
c090: 20 72 65 71 75 69 72 65 20 4f 4f 4d 73 20 69 66   require OOMs if
c0a0: 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 64 66   true */.  u8 df
c0b0: 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20  ltLockMode;     
c0c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
c0d0: 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  ult locking-mode
c0e0: 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62   for attached db
c0f0: 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68  s */.  signed ch
c100: 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20  ar nextAutovac; 
c110: 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20       /* Autovac 
c120: 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41  setting after VA
c130: 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20  CUUM if >=0 */. 
c140: 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b   u8 suppressErr;
c150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c160: 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65  * Do not issue e
c170: 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66  rror messages if
c180: 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74   true */.  u8 vt
c190: 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20  abOnConflict;   
c1a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
c1b0: 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20  e to return for 
c1c0: 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c  s3_vtab_on_confl
c1d0: 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73  ict() */.  u8 is
c1e0: 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
c1f0: 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65  oint;    /* True
c200: 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73   if the outermos
c210: 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61  t savepoint is a
c220: 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d 54 72 61   TS */.  u8 mTra
c230: 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ce;             
c240: 20 20 20 20 20 20 20 2f 2a 20 7a 65 72 6f 20 6f         /* zero o
c250: 72 20 6d 6f 72 65 20 53 51 4c 49 54 45 5f 54 52  r more SQLITE_TR
c260: 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a 20 20 75  ACE flags */.  u
c270: 38 20 6e 6f 53 68 61 72 65 64 43 61 63 68 65 3b  8 noSharedCache;
c280: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c290: 54 72 75 65 20 69 66 20 6e 6f 20 73 68 61 72 65  True if no share
c2a0: 64 2d 63 61 63 68 65 20 62 61 63 6b 65 6e 64 73  d-cache backends
c2b0: 20 2a 2f 0a 20 20 75 38 20 6e 53 71 6c 45 78 65   */.  u8 nSqlExe
c2c0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
c2d0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c2e0: 20 70 65 6e 64 69 6e 67 20 4f 50 5f 53 71 6c 45   pending OP_SqlE
c2f0: 78 65 63 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 20  xec opcodes */. 
c300: 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a   int nextPagesiz
c310: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
c320: 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65 72  * Pagesize after
c330: 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f   VACUUM if >0 */
c340: 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20  .  u32 magic;   
c350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c360: 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72   /* Magic number
c370: 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72   for detect libr
c380: 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20  ary misuse */.  
c390: 46 61 73 74 50 72 6e 67 20 73 50 72 6e 67 3b 20  FastPrng sPrng; 
c3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c3b0: 20 53 74 61 74 65 20 6f 66 20 74 68 65 20 70 65   State of the pe
c3c0: 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 50 52 4e  r-connection PRN
c3d0: 47 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e  G */.  int nChan
c3e0: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
c3f0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
c400: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
c410: 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  3_changes() */. 
c420: 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67   int nTotalChang
c430: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
c440: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
c450: 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61   by sqlite3_tota
c460: 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  l_changes() */. 
c470: 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49   int aLimit[SQLI
c480: 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f  TE_N_LIMIT];   /
c490: 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e  * Limits */.  in
c4a0: 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70  t nMaxSorterMmap
c4b0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
c4c0: 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72  aximum size of r
c4d0: 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79  egions mapped by
c4e0: 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72   sorter */.  str
c4f0: 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49  uct sqlite3InitI
c500: 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e  nfo {      /* In
c510: 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64  formation used d
c520: 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61  uring initializa
c530: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
c540: 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20  newTnum;        
c550: 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70          /* Rootp
c560: 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69  age of table bei
c570: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
c580: 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20  /.    u8 iDb;   
c590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5a0: 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69    /* Which db fi
c5b0: 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74  le is being init
c5c0: 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75  ialized */.    u
c5d0: 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20  8 busy;         
c5e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52             /* TR
c5f0: 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  UE if currently 
c600: 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a  initializing */.
c610: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6f 72 70      unsigned orp
c620: 68 61 6e 54 72 69 67 67 65 72 20 3a 20 31 3b 20  hanTrigger : 1; 
c630: 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e  /* Last statemen
c640: 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45  t is orphaned TE
c650: 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  MP trigger */.  
c660: 20 20 75 6e 73 69 67 6e 65 64 20 69 6d 70 6f 73    unsigned impos
c670: 74 65 72 54 61 62 6c 65 20 3a 20 31 3b 20 2f 2a  terTable : 1; /*
c680: 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70   Building an imp
c690: 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20  oster table */. 
c6a0: 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 6f 70     unsigned reop
c6b0: 65 6e 4d 65 6d 64 62 20 3a 20 31 3b 20 20 20 2f  enMemdb : 1;   /
c6c0: 2a 20 41 54 54 41 43 48 20 69 73 20 72 65 61 6c  * ATTACH is real
c6d0: 6c 79 20 61 20 72 65 6f 70 65 6e 20 75 73 69 6e  ly a reopen usin
c6e0: 67 20 4d 65 6d 44 42 20 2a 2f 0a 20 20 20 20 63  g MemDB */.    c
c6f0: 68 61 72 20 2a 2a 61 7a 49 6e 69 74 3b 20 20 20  har **azInit;   
c700: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 22 74             /* "t
c710: 79 70 65 22 2c 20 22 6e 61 6d 65 22 2c 20 61 6e  ype", "name", an
c720: 64 20 22 74 62 6c 5f 6e 61 6d 65 22 20 63 6f 6c  d "tbl_name" col
c730: 75 6d 6e 73 20 2a 2f 0a 20 20 7d 20 69 6e 69 74  umns */.  } init
c740: 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74  ;.  int nVdbeAct
c750: 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ive;            
c760: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56    /* Number of V
c770: 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72  DBEs currently r
c780: 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  unning */.  int 
c790: 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20  nVdbeRead;      
c7a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c7b0: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
c7c0: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72  BEs that read or
c7d0: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
c7e0: 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20  nVdbeWrite;     
c7f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c800: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
c810: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e  BEs that read an
c820: 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  d write */.  int
c830: 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20   nVdbeExec;     
c840: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c850: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
c860: 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63  alls to VdbeExec
c870: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65  () */.  int nVDe
c880: 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20  stroy;          
c890: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c8a0: 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65  of active OP_VDe
c8b0: 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73  stroy operations
c8c0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e   */.  int nExten
c8d0: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
c8e0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c8f0: 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f   loaded extensio
c900: 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61  ns */.  void **a
c910: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
c920: 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
c930: 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79  f shared library
c940: 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69 6e   handles */.  in
c950: 74 20 28 2a 78 54 72 61 63 65 29 28 75 33 32 2c  t (*xTrace)(u32,
c960: 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64  void*,void*,void
c970: 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61 63 65  *);     /* Trace
c980: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
c990: 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20  oid *pTraceArg; 
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
c9c0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63  ment to the trac
c9d0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 69  e function */.#i
c9e0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
c9f0: 54 5f 44 45 50 52 45 43 41 54 45 44 0a 20 20 76  T_DEPRECATED.  v
ca00: 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28  oid (*xProfile)(
ca10: 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72  void*,const char
ca20: 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66  *,u64);  /* Prof
ca30: 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a  iling function *
ca40: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69  /.  void *pProfi
ca50: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
ca60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ca70: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f   Argument to pro
ca80: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  file function */
ca90: 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 20 2a  .#endif.  void *
caa0: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
cab0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
cac0: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
cad0: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a  itCallback() */.
cae0: 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43    int (*xCommitC
caf0: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
cb00: 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61      /* Invoked a
cb10: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
cb20: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c  */.  void *pRoll
cb30: 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  backArg;        
cb40: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
cb50: 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43  nt to xRollbackC
cb60: 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 76  allback() */.  v
cb70: 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43  oid (*xRollbackC
cb80: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
cb90: 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65   /* Invoked at e
cba0: 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a  very commit. */.
cbb0: 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41    void *pUpdateA
cbc0: 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70  rg;.  void (*xUp
cbd0: 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f  dateCallback)(vo
cbe0: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  id*,int, const c
cbf0: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
cc00: 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a  ,sqlite_int64);.
cc10: 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
cc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc30: 2f 2a 20 43 75 72 72 65 6e 74 20 70 61 72 73 65  /* Current parse
cc40: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
cc50: 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
cc60: 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a  TE_HOOK.  void *
cc70: 70 50 72 65 55 70 64 61 74 65 41 72 67 3b 20 20  pPreUpdateArg;  
cc80: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
cc90: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 50 72   argument to xPr
cca0: 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  eUpdateCallback 
ccb0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 65  */.  void (*xPre
ccc0: 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28  UpdateCallback)(
ccd0: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 65 64     /* Registered
cce0: 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70   using sqlite3_p
ccf0: 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b 28 29 20  reupdate_hook() 
cd00: 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c 73 71 6c  */.    void*,sql
cd10: 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61 72 20 63  ite3*,int,char c
cd20: 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f 6e 73 74  onst*,char const
cd30: 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 2c  *,sqlite3_int64,
cd40: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 0a 20 20  sqlite3_int64.  
cd50: 29 3b 0a 20 20 50 72 65 55 70 64 61 74 65 20 2a  );.  PreUpdate *
cd60: 70 50 72 65 55 70 64 61 74 65 3b 20 20 20 20 20  pPreUpdate;     
cd70: 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f     /* Context fo
cd80: 72 20 61 63 74 69 76 65 20 70 72 65 2d 75 70 64  r active pre-upd
cd90: 61 74 65 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ate callback */.
cda0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
cdb0: 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54  _ENABLE_PREUPDAT
cdc0: 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65  E_HOOK */.#ifnde
cdd0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
cde0: 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61  L.  int (*xWalCa
cdf0: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20  llback)(void *, 
ce00: 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
ce10: 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20   char *, int);. 
ce20: 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a   void *pWalArg;.
ce30: 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78  #endif.  void(*x
ce40: 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64  CollNeeded)(void
ce50: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
ce60: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68  TextRep,const ch
ce70: 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43  ar*);.  void(*xC
ce80: 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69  ollNeeded16)(voi
ce90: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
cea0: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76  eTextRep,const v
ceb0: 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  oid*);.  void *p
cec0: 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20  CollNeededArg;. 
ced0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
cee0: 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f  pErr;          /
cef0: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
cf00: 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
cf10: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c   union {.    vol
cf20: 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65  atile int isInte
cf30: 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65  rrupted; /* True
cf40: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
cf50: 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63  rrupt has been c
cf60: 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75  alled */.    dou
cf70: 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20  ble notUsed1;   
cf80: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
cf90: 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20  er */.  } u1;.  
cfa0: 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73  Lookaside lookas
cfb0: 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ide;          /*
cfc0: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
cfd0: 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  c configuration 
cfe0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
cff0: 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
d000: 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78  TION.  sqlite3_x
d010: 61 75 74 68 20 78 41 75 74 68 3b 20 20 20 20 20  auth xAuth;     
d020: 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61       /* Access a
d030: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e  uthorization fun
d040: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
d050: 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20  *pAuthArg;      
d060: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
d070: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
d080: 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63  access auth func
d090: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tion */.#endif.#
d0a0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
d0b0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
d0c0: 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72  BACK.  int (*xPr
d0d0: 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b  ogress)(void *);
d0e0: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
d0f0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
d100: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65  .  void *pProgre
d110: 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ssArg;          
d120: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
d130: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
d140: 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67  lback */.  unsig
d150: 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  ned nProgressOps
d160: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
d170: 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f  er of opcodes fo
d180: 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  r progress callb
d190: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ack */.#endif.#i
d1a0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
d1b0: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
d1c0: 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20   int nVTrans;   
d1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d1e0: 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65  * Allocated size
d1f0: 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20   of aVTrans */. 
d200: 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20   Hash aModule;  
d210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d220: 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73  * populated by s
d230: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
d240: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62  dule() */.  Vtab
d250: 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20  Ctx *pVtabCtx;  
d260: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
d270: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
d280: 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65  vtab connect/cre
d290: 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ate */.  VTable 
d2a0: 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20  **aVTrans;      
d2b0: 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61         /* Virtua
d2c0: 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70  l tables with op
d2d0: 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  en transactions 
d2e0: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69  */.  VTable *pDi
d2f0: 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 20 20 20  sconnect;       
d300: 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74     /* Disconnect
d310: 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73   these in next s
d320: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
d330: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48 61 73   */.#endif.  Has
d340: 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20  h aFunc;        
d350: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
d360: 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e  sh table of conn
d370: 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ection functions
d380: 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c   */.  Hash aColl
d390: 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Seq;            
d3a0: 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61      /* All colla
d3b0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
d3c0: 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20  /.  BusyHandler 
d3d0: 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20  busyHandler;    
d3e0: 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61    /* Busy callba
d3f0: 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74  ck */.  Db aDbSt
d400: 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20  atic[2];        
d410: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20        /* Static 
d420: 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20  space for the 2 
d430: 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73  default backends
d440: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
d450: 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  *pSavepoint;    
d460: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
d470: 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73  ctive savepoints
d480: 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69   */.  int busyTi
d490: 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20  meout;          
d4a0: 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64      /* Busy hand
d4b0: 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20  ler timeout, in 
d4c0: 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  msec */.  int nS
d4d0: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
d4e0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
d4f0: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
d500: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
d510: 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d  */.  int nStatem
d520: 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ent;            
d530: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
d540: 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74  nested statement
d550: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a  -transactions  *
d560: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
d570: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
d580: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
d590: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
d5a0: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
d5b0: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
d5c0: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
d5d0: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
d5e0: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e  ed immediate con
d5f0: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
d600: 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b  t *pnBytesFreed;
d610: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
d620: 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72  f not NULL, incr
d630: 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62  ement this in Db
d640: 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66  Free() */.#ifdef
d650: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
d660: 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f  NLOCK_NOTIFY.  /
d670: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
d680: 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c  variables are al
d690: 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74  l protected by t
d6a0: 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52  he STATIC_MASTER
d6b0: 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74  .  ** mutex, not
d6c0: 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65   by sqlite3.mute
d6d0: 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65 64  x. They are used
d6e0: 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69   by code in noti
d6f0: 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  fy.c..  **.  ** 
d700: 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f  When X.pUnlockCo
d710: 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61  nnection==Y, tha
d720: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69  t means that X i
d730: 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20  s waiting for Y 
d740: 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73  to.  ** unlock s
d750: 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 70 72  o that it can pr
d760: 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  oceed..  **.  **
d770: 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e   When X.pBlockin
d780: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20  gConnection==Y, 
d790: 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  that means that 
d7a0: 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58  something that X
d7b0: 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65   tried.  ** trie
d7c0: 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79  d to do recently
d7d0: 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20   failed with an 
d7e0: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72  SQLITE_LOCKED er
d7f0: 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73  ror due to locks
d800: 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e  .  ** held by Y.
d810: 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  .  */.  sqlite3 
d820: 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63  *pBlockingConnec
d830: 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74  tion; /* Connect
d840: 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64 20  ion that caused 
d850: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f  SQLITE_LOCKED */
d860: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c  .  sqlite3 *pUnl
d870: 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20  ockConnection;  
d880: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
d890: 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20  ection to watch 
d8a0: 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20  for unlock */.  
d8b0: 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67  void *pUnlockArg
d8c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d8d0: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
d8e0: 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69  t to xUnlockNoti
d8f0: 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  fy */.  void (*x
d900: 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f  UnlockNotify)(vo
d910: 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a  id **, int);  /*
d920: 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63   Unlock notify c
d930: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c  allback */.  sql
d940: 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b  ite3 *pNextBlock
d950: 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  ed;        /* Ne
d960: 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c  xt in list of al
d970: 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63  l blocked connec
d980: 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  tions */.#endif.
d990: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
d9a0: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
d9b0: 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65 72  N.  sqlite3_user
d9c0: 61 75 74 68 20 61 75 74 68 3b 20 20 20 20 20 20  auth auth;      
d9d0: 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e    /* User authen
d9e0: 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61  tication informa
d9f0: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d  tion */.#endif.}
da00: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f  ;../*.** A macro
da10: 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65   to discover the
da20: 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64   encoding of a d
da30: 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66  atabase..*/.#def
da40: 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28 64  ine SCHEMA_ENC(d
da50: 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d  b) ((db)->aDb[0]
da60: 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 23  .pSchema->enc).#
da70: 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20 20  define ENC(db)  
da80: 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e 63        ((db)->enc
da90: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
daa0: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
dab0: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a   sqlite3.flags..
dac0: 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
dad0: 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
dae0: 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
daf0: 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  .**      SQLITE_
db00: 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 3d 3d  FullFSync     ==
db10: 20 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43   PAGER_FULLFSYNC
db20: 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  .**      SQLITE_
db30: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 3d 3d  CkptFullFSync ==
db40: 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c   PAGER_CKPT_FULL
db50: 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51  FSYNC.**      SQ
db60: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20  LITE_CacheSpill 
db70: 20 20 20 3d 3d 20 50 41 47 45 52 5f 43 41 43 48     == PAGER_CACH
db80: 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65 66 69  E_SPILL.*/.#defi
db90: 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53  ne SQLITE_WriteS
dba0: 63 68 65 6d 61 20 20 20 20 30 78 30 30 30 30 30  chema    0x00000
dbb0: 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70  001  /* OK to up
dbc0: 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54  date SQLITE_MAST
dbd0: 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ER */.#define SQ
dbe0: 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46  LITE_LegacyFileF
dbf0: 6d 74 20 20 30 78 30 30 30 30 30 30 30 32 20 20  mt  0x00000002  
dc00: 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61  /* Create new da
dc10: 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61  tabases in forma
dc20: 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  t 1 */.#define S
dc30: 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d  QLITE_FullColNam
dc40: 65 73 20 20 20 30 78 30 30 30 30 30 30 30 34 20  es   0x00000004 
dc50: 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f   /* Show full co
dc60: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45  lumn names on SE
dc70: 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LECT */.#define 
dc80: 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63  SQLITE_FullFSync
dc90: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30 38        0x00000008
dca0: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
dcb0: 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65  ync on the backe
dcc0: 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nd */.#define SQ
dcd0: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
dce0: 6e 63 20 20 30 78 30 30 30 30 30 30 31 30 20 20  nc  0x00000010  
dcf0: 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e  /* Use full fsyn
dd00: 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74  c for checkpoint
dd10: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dd20: 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20  TE_CacheSpill   
dd30: 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a    0x00000020  /*
dd40: 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67   OK to spill pag
dd50: 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  er cache */.#def
dd60: 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74  ine SQLITE_Short
dd70: 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30  ColNames  0x0000
dd80: 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68  0040  /* Show sh
dd90: 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65  ort columns name
dda0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
ddb0: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20  ITE_CountRows   
ddc0: 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f     0x00000080  /
ddd0: 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61  * Count rows cha
dde0: 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20  nged by INSERT, 
ddf0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
de00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
de20: 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44    DELETE, or UPD
de30: 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a  ATE and return *
de40: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
de50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
de70: 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67   the count using
de80: 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a   a callback. */.
de90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
dea0: 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78  ullCallback   0x
deb0: 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76  00000100  /* Inv
dec0: 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  oke the callback
ded0: 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a   once if the */.
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 2f 2a 20 20 20 72            /*   r
df10: 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
df20: 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ty */.#define SQ
df30: 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b  LITE_IgnoreCheck
df40: 73 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20  s   0x00000200  
df50: 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63  /* Do not enforc
df60: 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  e check constrai
df70: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
df80: 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d  QLITE_ReadUncomm
df90: 69 74 20 20 20 30 78 30 30 30 30 30 34 30 30 20  it   0x00000400 
dfa0: 20 2f 2a 20 52 45 41 44 20 55 4e 43 4f 4d 4d 49   /* READ UNCOMMI
dfb0: 54 54 45 44 20 69 6e 20 73 68 61 72 65 64 2d 63  TTED in shared-c
dfc0: 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ache */.#define 
dfd0: 53 51 4c 49 54 45 5f 4e 6f 43 6b 70 74 4f 6e 43  SQLITE_NoCkptOnC
dfe0: 6c 6f 73 65 20 20 30 78 30 30 30 30 30 38 30 30  lose  0x00000800
dff0: 20 20 2f 2a 20 4e 6f 20 63 68 65 63 6b 70 6f 69    /* No checkpoi
e000: 6e 74 20 6f 6e 20 63 6c 6f 73 65 28 29 2f 44 45  nt on close()/DE
e010: 54 41 43 48 20 2a 2f 0a 23 64 65 66 69 6e 65 20  TACH */.#define 
e020: 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72  SQLITE_ReverseOr
e030: 64 65 72 20 20 20 30 78 30 30 30 30 31 30 30 30  der   0x00001000
e040: 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f    /* Reverse uno
e050: 72 64 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a  rdered SELECTs *
e060: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e070: 5f 52 65 63 54 72 69 67 67 65 72 73 20 20 20 20  _RecTriggers    
e080: 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 45  0x00002000  /* E
e090: 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76 65 20  nable recursive 
e0a0: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
e0b0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69  ine SQLITE_Forei
e0c0: 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30 30 30  gnKeys    0x0000
e0d0: 34 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65  4000  /* Enforce
e0e0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
e0f0: 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65  straints  */.#de
e100: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f  fine SQLITE_Auto
e110: 49 6e 64 65 78 20 20 20 20 20 20 30 78 30 30 30  Index      0x000
e120: 30 38 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  08000  /* Enable
e130: 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78   automatic index
e140: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
e150: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69  LITE_LoadExtensi
e160: 6f 6e 20 20 30 78 30 30 30 31 30 30 30 30 20 20  on  0x00010000  
e170: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
e180: 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66  xtension */.#def
e190: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45  ine SQLITE_LoadE
e1a0: 78 74 46 75 6e 63 20 20 20 20 30 78 30 30 30 32  xtFunc    0x0002
e1b0: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
e1c0: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
e1d0: 20 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23 64 65   SQL func */.#de
e1e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62  fine SQLITE_Enab
e1f0: 6c 65 54 72 69 67 67 65 72 20 20 30 78 30 30 30  leTrigger  0x000
e200: 34 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74  40000  /* True t
e210: 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72  o enable trigger
e220: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e230: 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20  ITE_DeferFKs    
e240: 20 20 20 30 78 30 30 30 38 30 30 30 30 20 20 2f     0x00080000  /
e250: 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63  * Defer all FK c
e260: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
e270: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
e280: 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 30  ryOnly      0x00
e290: 31 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62  100000  /* Disab
e2a0: 6c 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e  le database chan
e2b0: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
e2c0: 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b  QLITE_CellSizeCk
e2d0: 20 20 20 20 20 30 78 30 30 32 30 30 30 30 30 20       0x00200000 
e2e0: 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20   /* Check btree 
e2f0: 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f  cell sizes on lo
e300: 61 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ad */.#define SQ
e310: 4c 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69 7a  LITE_Fts3Tokeniz
e320: 65 72 20 20 30 78 30 30 34 30 30 30 30 30 20 20  er  0x00400000  
e330: 2f 2a 20 45 6e 61 62 6c 65 20 66 74 73 33 5f 74  /* Enable fts3_t
e340: 6f 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a 23  okenizer(2) */.#
e350: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
e360: 61 62 6c 65 51 50 53 47 20 20 20 20 20 30 78 30  ableQPSG     0x0
e370: 30 38 30 30 30 30 30 20 20 2f 2a 20 51 75 65 72  0800000  /* Quer
e380: 79 20 50 6c 61 6e 6e 65 72 20 53 74 61 62 69 6c  y Planner Stabil
e390: 69 74 79 20 47 75 61 72 61 6e 74 65 65 2a 2f 0a  ity Guarantee*/.
e3a0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
e3b0: 72 69 67 67 65 72 45 51 50 20 20 20 20 20 30 78  riggerEQP     0x
e3c0: 30 31 30 30 30 30 30 30 20 20 2f 2a 20 53 68 6f  01000000  /* Sho
e3d0: 77 20 74 72 69 67 67 65 72 20 45 58 50 4c 41 49  w trigger EXPLAI
e3e0: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a  N QUERY PLAN */.
e3f0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
e400: 65 73 65 74 44 61 74 61 62 61 73 65 20 20 30 78  esetDatabase  0x
e410: 30 32 30 30 30 30 30 30 20 20 2f 2a 20 52 65 73  02000000  /* Res
e420: 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
e430: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e440: 45 5f 4c 65 67 61 63 79 41 6c 74 65 72 20 20 20  E_LegacyAlter   
e450: 20 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20   0x04000000  /* 
e460: 4c 65 67 61 63 79 20 41 4c 54 45 52 20 54 41 42  Legacy ALTER TAB
e470: 4c 45 20 62 65 68 61 76 69 6f 75 72 20 2a 2f 0a  LE behaviour */.
e480: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
e490: 6f 53 63 68 65 6d 61 45 72 72 6f 72 20 20 30 78  oSchemaError  0x
e4a0: 30 38 30 30 30 30 30 30 20 20 2f 2a 20 44 6f 20  08000000  /* Do 
e4b0: 6e 6f 74 20 72 65 70 6f 72 74 20 73 63 68 65 6d  not report schem
e4c0: 61 20 70 61 72 73 65 20 65 72 72 6f 72 73 2a 2f  a parse errors*/
e4d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e4e0: 44 65 66 65 6e 73 69 76 65 20 20 20 20 20 20 30  Defensive      0
e4f0: 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 49 6e  x10000000  /* In
e500: 70 75 74 20 53 51 4c 20 69 73 20 6c 69 6b 65 6c  put SQL is likel
e510: 79 20 68 6f 73 74 69 6c 65 20 2a 2f 0a 23 64 65  y hostile */.#de
e520: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 71 73 44  fine SQLITE_DqsD
e530: 44 4c 20 20 20 20 20 20 20 20 20 30 78 32 30 30  DL         0x200
e540: 30 30 30 30 30 20 20 2f 2a 20 64 62 6c 2d 71 75  00000  /* dbl-qu
e550: 6f 74 65 64 20 73 74 72 69 6e 67 73 20 61 6c 6c  oted strings all
e560: 6f 77 65 64 20 69 6e 20 44 44 4c 2a 2f 0a 23 64  owed in DDL*/.#d
e570: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 71 73  efine SQLITE_Dqs
e580: 44 4d 4c 20 20 20 20 20 20 20 20 20 30 78 34 30  DML         0x40
e590: 30 30 30 30 30 30 20 20 2f 2a 20 64 62 6c 2d 71  000000  /* dbl-q
e5a0: 75 6f 74 65 64 20 73 74 72 69 6e 67 73 20 61 6c  uoted strings al
e5b0: 6c 6f 77 65 64 20 69 6e 20 44 4d 4c 2a 2f 0a 23  lowed in DML*/.#
e5c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
e5d0: 61 62 6c 65 56 69 65 77 20 20 20 20 20 30 78 38  ableView     0x8
e5e0: 30 30 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0000000  /* Enab
e5f0: 6c 65 20 74 68 65 20 75 73 65 20 6f 66 20 76 69  le the use of vi
e600: 65 77 73 20 2a 2f 0a 0a 2f 2a 20 46 6c 61 67 73  ews */../* Flags
e610: 20 75 73 65 64 20 6f 6e 6c 79 20 69 66 20 64 65   used only if de
e620: 62 75 67 67 69 6e 67 20 2a 2f 0a 23 64 65 66 69  bugging */.#defi
e630: 6e 65 20 48 49 28 58 29 20 20 28 28 75 36 34 29  ne HI(X)  ((u64)
e640: 28 58 29 3c 3c 33 32 29 0a 23 69 66 64 65 66 20  (X)<<32).#ifdef 
e650: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 64 65  SQLITE_DEBUG.#de
e660: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54  fine SQLITE_SqlT
e670: 72 61 63 65 20 20 20 20 20 20 20 48 49 28 30 78  race       HI(0x
e680: 30 31 30 30 30 30 30 29 20 2f 2a 20 44 65 62 75  0100000) /* Debu
e690: 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69  g print SQL as i
e6a0: 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64  t executes */.#d
e6b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
e6c0: 65 4c 69 73 74 69 6e 67 20 20 20 20 48 49 28 30  eListing    HI(0
e6d0: 78 30 32 30 30 30 30 30 29 20 2f 2a 20 44 65 62  x0200000) /* Deb
e6e0: 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56  ug listings of V
e6f0: 44 42 45 20 70 72 6f 67 73 20 2a 2f 0a 23 64 65  DBE progs */.#de
e700: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
e710: 54 72 61 63 65 20 20 20 20 20 20 48 49 28 30 78  Trace      HI(0x
e720: 30 34 30 30 30 30 30 29 20 2f 2a 20 54 72 75 65  0400000) /* True
e730: 20 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65   to trace VDBE e
e740: 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  xecution */.#def
e750: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41  ine SQLITE_VdbeA
e760: 64 64 6f 70 54 72 61 63 65 20 48 49 28 30 78 30  ddopTrace HI(0x0
e770: 38 30 30 30 30 30 29 20 2f 2a 20 54 72 61 63 65  800000) /* Trace
e780: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e790: 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65  p() calls */.#de
e7a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
e7b0: 45 51 50 20 20 20 20 20 20 20 20 48 49 28 30 78  EQP        HI(0x
e7c0: 31 30 30 30 30 30 30 29 20 2f 2a 20 44 65 62 75  1000000) /* Debu
e7d0: 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  g EXPLAIN QUERY 
e7e0: 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  PLAN */.#define 
e7f0: 53 51 4c 49 54 45 5f 50 61 72 73 65 72 54 72 61  SQLITE_ParserTra
e800: 63 65 20 20 20 20 48 49 28 30 78 32 30 30 30 30  ce    HI(0x20000
e810: 30 30 29 20 2f 2a 20 50 52 41 47 4d 41 20 70 61  00) /* PRAGMA pa
e820: 72 73 65 72 5f 74 72 61 63 65 3d 4f 4e 20 2a 2f  rser_trace=ON */
e830: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
e840: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
e850: 72 20 73 71 6c 69 74 65 33 2e 6d 44 62 46 6c 61  r sqlite3.mDbFla
e860: 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  gs.*/.#define DB
e870: 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67  FLAG_SchemaChang
e880: 65 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55  e   0x0001  /* U
e890: 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20  ncommitted Hash 
e8a0: 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f  table changes */
e8b0: 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f  .#define DBFLAG_
e8c0: 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30  PreferBuiltin  0
e8d0: 78 30 30 30 32 20 20 2f 2a 20 50 72 65 66 65 72  x0002  /* Prefer
e8e0: 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e  ence to built-in
e8f0: 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e   funcs */.#defin
e900: 65 20 44 42 46 4c 41 47 5f 56 61 63 75 75 6d 20  e DBFLAG_Vacuum 
e910: 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
e920: 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20 69 6e 20  /* Currently in 
e930: 61 20 56 41 43 55 55 4d 20 2a 2f 0a 23 64 65 66  a VACUUM */.#def
e940: 69 6e 65 20 44 42 46 4c 41 47 5f 56 61 63 75 75  ine DBFLAG_Vacuu
e950: 6d 49 6e 74 6f 20 20 20 20 20 30 78 30 30 30 38  mInto     0x0008
e960: 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20 72    /* Currently r
e970: 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20 49 4e  unning VACUUM IN
e980: 54 4f 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  TO */.#define DB
e990: 46 4c 41 47 5f 53 63 68 65 6d 61 4b 6e 6f 77 6e  FLAG_SchemaKnown
e9a0: 4f 6b 20 20 30 78 30 30 31 30 20 20 2f 2a 20 53  Ok  0x0010  /* S
e9b0: 63 68 65 6d 61 20 69 73 20 6b 6e 6f 77 6e 20 74  chema is known t
e9c0: 6f 20 62 65 20 76 61 6c 69 64 20 2a 2f 0a 0a 2f  o be valid */../
e9d0: 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65  *.** Bits of the
e9e0: 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c   sqlite3.dbOptFl
e9f0: 61 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61  ags field that a
ea00: 72 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a  re used by the.*
ea10: 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
ea20: 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45  ontrol(SQLITE_TE
ea30: 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54  STCTRL_OPTIMIZAT
ea40: 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66  IONS,...) interf
ea50: 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74  ace to.** select
ea60: 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61  ively disable va
ea70: 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69  rious optimizati
ea80: 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ons..*/.#define 
ea90: 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74  SQLITE_QueryFlat
eaa0: 74 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f  tener 0x0001   /
eab0: 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69  * Query flatteni
eac0: 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ng */.#define SQ
ead0: 4c 49 54 45 5f 57 69 6e 64 6f 77 46 75 6e 63 20  LITE_WindowFunc 
eae0: 20 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20      0x0002   /* 
eaf0: 55 73 65 20 78 49 6e 76 65 72 73 65 20 66 6f 72  Use xInverse for
eb00: 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
eb10: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
eb20: 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72  ITE_GroupByOrder
eb30: 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47     0x0004   /* G
eb40: 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20  ROUPBY cover of 
eb50: 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69  ORDERBY */.#defi
eb60: 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72  ne SQLITE_Factor
eb70: 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20  OutConst 0x0008 
eb80: 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61    /* Constant fa
eb90: 63 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ctoring */.#defi
eba0: 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e  ne SQLITE_Distin
ebb0: 63 74 4f 70 74 20 20 20 20 30 78 30 30 31 30 20  ctOpt    0x0010 
ebc0: 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73    /* DISTINCT us
ebd0: 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  ing indexes */.#
ebe0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
ebf0: 76 65 72 49 64 78 53 63 61 6e 20 20 20 30 78 30  verIdxScan   0x0
ec00: 30 32 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e  020   /* Coverin
ec10: 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f  g index scans */
ec20: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ec30: 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30  OrderByIdxJoin 0
ec40: 78 30 30 34 30 20 20 20 2f 2a 20 4f 52 44 45 52  x0040   /* ORDER
ec50: 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61   BY of joins via
ec60: 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
ec70: 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74  e SQLITE_Transit
ec80: 69 76 65 20 20 20 20 20 30 78 30 30 38 30 20 20  ive     0x0080  
ec90: 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63   /* Transitive c
eca0: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
ecb0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69  efine SQLITE_Omi
ecc0: 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 31  tNoopJoin   0x01
ecd0: 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75  00   /* Omit unu
ece0: 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f  sed tables in jo
ecf0: 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ins */.#define S
ed00: 51 4c 49 54 45 5f 43 6f 75 6e 74 4f 66 56 69 65  QLITE_CountOfVie
ed10: 77 20 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a  w    0x0200   /*
ed20: 20 54 68 65 20 63 6f 75 6e 74 2d 6f 66 2d 76 69   The count-of-vi
ed30: 65 77 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  ew optimization 
ed40: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ed50: 45 5f 43 75 72 73 6f 72 48 69 6e 74 73 20 20 20  E_CursorHints   
ed60: 20 30 78 30 34 30 30 20 20 20 2f 2a 20 41 64 64   0x0400   /* Add
ed70: 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74 20 6f   OP_CursorHint o
ed80: 70 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66 69 6e  pcodes */.#defin
ed90: 65 20 53 51 4c 49 54 45 5f 53 74 61 74 34 20 20  e SQLITE_Stat4  
eda0: 20 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20          0x0800  
edb0: 20 2f 2a 20 55 73 65 20 53 54 41 54 34 20 64 61   /* Use STAT4 da
edc0: 74 61 20 2a 2f 0a 20 20 20 2f 2a 20 54 48 33 20  ta */.   /* TH3 
edd0: 65 78 70 65 63 74 73 20 74 68 65 20 53 74 61 74  expects the Stat
ede0: 34 20 20 20 5e 5e 5e 5e 5e 5e 20 76 61 6c 75 65  4   ^^^^^^ value
edf0: 20 74 6f 20 62 65 20 30 78 30 38 30 30 2e 20 20   to be 0x0800.  
ee00: 44 6f 6e 27 74 20 63 68 61 6e 67 65 20 69 74 20  Don't change it 
ee10: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ee20: 45 5f 50 75 73 68 44 6f 77 6e 20 20 20 20 20 20  E_PushDown      
ee30: 20 30 78 31 30 30 30 20 20 20 2f 2a 20 54 68 65   0x1000   /* The
ee40: 20 70 75 73 68 2d 64 6f 77 6e 20 6f 70 74 69 6d   push-down optim
ee50: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ization */.#defi
ee60: 6e 65 20 53 51 4c 49 54 45 5f 53 69 6d 70 6c 69  ne SQLITE_Simpli
ee70: 66 79 4a 6f 69 6e 20 20 20 30 78 32 30 30 30 20  fyJoin   0x2000 
ee80: 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 4c 45 46    /* Convert LEF
ee90: 54 20 4a 4f 49 4e 20 74 6f 20 4a 4f 49 4e 20 2a  T JOIN to JOIN *
eea0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
eeb0: 5f 53 6b 69 70 53 63 61 6e 20 20 20 20 20 20 20  _SkipScan       
eec0: 30 78 34 30 30 30 20 20 20 2f 2a 20 53 6b 69 70  0x4000   /* Skip
eed0: 2d 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  -scans */.#defin
eee0: 65 20 53 51 4c 49 54 45 5f 50 72 6f 70 61 67 61  e SQLITE_Propaga
eef0: 74 65 43 6f 6e 73 74 20 30 78 38 30 30 30 20 20  teConst 0x8000  
ef00: 20 2f 2a 20 54 68 65 20 63 6f 6e 73 74 61 6e 74   /* The constant
ef10: 20 70 72 6f 70 61 67 61 74 69 6f 6e 20 6f 70 74   propagation opt
ef20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ef30: 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20  TE_AllOpts      
ef40: 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c    0xffff   /* Al
ef50: 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  l optimizations 
ef60: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  */../*.** Macros
ef70: 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65   for testing whe
ef80: 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69  ther or not opti
ef90: 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e  mizations are en
efa0: 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65  abled or disable
efb0: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 70  d..*/.#define Op
efc0: 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c  timizationDisabl
efd0: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28  ed(db, mask)  ((
efe0: 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73  (db)->dbOptFlags
eff0: 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65  &(mask))!=0).#de
f000: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
f010: 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  nEnabled(db, mas
f020: 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  k)   (((db)->dbO
f030: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d  ptFlags&(mask))=
f040: 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  =0)../*.** Retur
f050: 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20  n true if it OK 
f060: 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61  to factor consta
f070: 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  nt expressions i
f080: 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  nto the initiali
f090: 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20  zation.** code. 
f0a0: 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  The argument is 
f0b0: 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66  a Parse object f
f0c0: 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  or the code gene
f0d0: 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rator..*/.#defin
f0e0: 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28  e ConstFactorOk(
f0f0: 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74  P) ((P)->okConst
f100: 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50  Factor)../*.** P
f110: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
f120: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61  or the sqlite.ma
f130: 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68  gic field..** Th
f140: 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62  e numbers are ob
f150: 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d  tained at random
f160: 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65   and have no spe
f170: 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74  cial meaning, ot
f180: 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e  her.** than bein
f190: 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20  g distinct from 
f1a0: 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a  one another..*/.
f1b0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
f1c0: 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78  AGIC_OPEN     0x
f1d0: 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74  a029a697  /* Dat
f1e0: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f  abase is open */
f1f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f200: 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30  MAGIC_CLOSED   0
f210: 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61  x9f3c2d33  /* Da
f220: 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
f230: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f240: 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20  TE_MAGIC_SICK   
f250: 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a    0x4b771290  /*
f260: 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74   Error and await
f270: 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65  ing close */.#de
f280: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
f290: 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30 33  C_BUSY     0xf03
f2a0: 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61  b7906  /* Databa
f2b0: 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  se currently in 
f2c0: 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
f2d0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f  QLITE_MAGIC_ERRO
f2e0: 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30 20  R    0xb5357930 
f2f0: 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49   /* An SQLITE_MI
f300: 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72  SUSE error occur
f310: 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  red */.#define S
f320: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42  QLITE_MAGIC_ZOMB
f330: 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66 20  IE   0x64cffc7f 
f340: 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c   /* Close with l
f350: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c  ast statement cl
f360: 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61  ose */../*.** Ea
f370: 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  ch SQL function 
f380: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
f390: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
f3a0: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
f3b0: 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 67 6c  ructure.  For gl
f3c0: 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75  obal built-in fu
f3d0: 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20 73 75 62  nctions (ex: sub
f3e0: 73 74 72 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f  str(), max(), co
f3f0: 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e  unt()).** a poin
f400: 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
f410: 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e  cture is held in
f420: 20 74 68 65 20 73 71 6c 69 74 65 33 42 75 69 6c   the sqlite3Buil
f430: 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a  tinFunctions obj
f440: 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d  ect..** For per-
f450: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69  connection appli
f460: 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66  cation-defined f
f470: 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e  unctions, a poin
f480: 74 65 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73  ter to this.** s
f490: 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c 64  tructure is held
f4a0: 20 69 6e 20 74 68 65 20 64 62 2d 3e 61 48 61 73   in the db->aHas
f4b0: 68 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a  h hash table..**
f4c0: 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61 73 68 20  .** The u.pHash 
f4d0: 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62 79  field is used by
f4e0: 20 74 68 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c   the global buil
f4f0: 74 2d 69 6e 73 2e 20 20 54 68 65 20 75 2e 70 44  t-ins.  The u.pD
f500: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65  estructor.** fie
f510: 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 70 65  ld is used by pe
f520: 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70  r-connection app
f530: 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  -def functions..
f540: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
f550: 66 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20 20  f {.  i8 nArg;  
f560: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
f570: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
f580: 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c  s.  -1 means unl
f590: 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 33 32 20  imited */.  u32 
f5a0: 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  funcFlags;      
f5b0: 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61   /* Some combina
f5c0: 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46  tion of SQLITE_F
f5d0: 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20  UNC_* */.  void 
f5e0: 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20  *pUserData;     
f5f0: 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72  /* User data par
f600: 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63  ameter */.  Func
f610: 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  Def *pNext;     
f620: 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f   /* Next functio
f630: 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65  n with same name
f640: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 46   */.  void (*xSF
f650: 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  unc)(sqlite3_con
f660: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
f670: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66  3_value**); /* f
f680: 75 6e 63 20 6f 72 20 61 67 67 2d 73 74 65 70 20  unc or agg-step 
f690: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e  */.  void (*xFin
f6a0: 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63  alize)(sqlite3_c
f6b0: 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20  ontext*);       
f6c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67             /* Ag
f6d0: 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20  g finalizer */. 
f6e0: 20 76 6f 69 64 20 28 2a 78 56 61 6c 75 65 29 28   void (*xValue)(
f6f0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
f700: 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  );              
f710: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
f720: 74 20 61 67 67 20 76 61 6c 75 65 20 2a 2f 0a 20  t agg value */. 
f730: 20 76 6f 69 64 20 28 2a 78 49 6e 76 65 72 73 65   void (*xInverse
f740: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
f750: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
f760: 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 69 6e 76 65  alue**); /* inve
f770: 72 73 65 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a  rse agg-step */.
f780: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
f790: 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61  ame;   /* SQL na
f7a0: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
f7b0: 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  on. */.  union {
f7c0: 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 48  .    FuncDef *pH
f7d0: 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ash;      /* Nex
f7e0: 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65  t with a differe
f7f0: 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20  nt name but the 
f800: 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 20  same hash */.   
f810: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
f820: 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20  *pDestructor;   
f830: 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75  /* Reference cou
f840: 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20  nted destructor 
f850: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20  function */.  } 
f860: 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  u;.};../*.** Thi
f870: 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61  s structure enca
f880: 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d  psulates a user-
f890: 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63  function destruc
f8a0: 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73  tor callback (as
f8b0: 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75  .** configured u
f8c0: 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63  sing create_func
f8d0: 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61  tion_v2()) and a
f8e0: 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74   reference count
f8f0: 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61  er. When.** crea
f900: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29  te_function_v2()
f910: 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72   is called to cr
f920: 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20  eate a function 
f930: 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f  with a destructo
f940: 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f  r,.** a single o
f950: 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
f960: 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e  pe is allocated.
f970: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
f980: 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 0a 2a  nRef is set to.*
f990: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
f9a0: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
f9b0: 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72 20  created (either 
f9c0: 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e  1 or 3, dependin
f9d0: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
f9e0: 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69  or not the speci
f9f0: 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73  fied encoding is
fa00: 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68   SQLITE_ANY). Th
fa10: 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72  e FuncDef.pDestr
fa20: 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20  uctor.** member 
fa30: 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e  of each of the n
fa40: 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  ew FuncDef objec
fa50: 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69  ts is set to poi
fa60: 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61  nt to the alloca
fa70: 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72  ted.** FuncDestr
fa80: 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  uctor..**.** The
fa90: 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e  reafter, when on
faa0: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
fab0: 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65   objects is dele
fac0: 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e  ted, the referen
fad0: 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74  ce.** count on t
fae0: 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65  his object is de
faf0: 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20  cremented. When 
fb00: 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74 68  it reaches 0, th
fb10: 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  e destructor.** 
fb20: 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74  is invoked and t
fb30: 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  he FuncDestructo
fb40: 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65 65  r structure free
fb50: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  d..*/.struct Fun
fb60: 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20  cDestructor {.  
fb70: 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64  int nRef;.  void
fb80: 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
fb90: 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55  d *);.  void *pU
fba0: 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a  serData;.};../*.
fbb0: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
fbc0: 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66  es for FuncDef.f
fbd0: 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74  lags.  Note that
fbe0: 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64   the _LENGTH and
fbf0: 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75   _TYPEOF.** valu
fc00: 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f  es must correspo
fc10: 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e  nd to OPFLAG_LEN
fc20: 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41  GTHARG and OPFLA
fc30: 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 41 6e  G_TYPEOFARG.  An
fc40: 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43  d.** SQLITE_FUNC
fc50: 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20 62  _CONSTANT must b
fc60: 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 53 51  e the same as SQ
fc70: 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54  LITE_DETERMINIST
fc80: 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72  IC.  There.** ar
fc90: 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
fca0: 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64  ments in the cod
fcb0: 65 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73  e to verify this
fcc0: 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
fcd0: 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
fce0: 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
fcf0: 29 3a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  ):.**     SQLITE
fd00: 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20  _FUNC_MINMAX    
fd10: 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67  ==  NC_MinMaxAgg
fd20: 20 20 20 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d        == SF_MinM
fd30: 61 78 41 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c  axAgg.**     SQL
fd40: 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20  ITE_FUNC_LENGTH 
fd50: 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45     ==  OPFLAG_LE
fd60: 4e 47 54 48 41 52 47 0a 2a 2a 20 20 20 20 20 53  NGTHARG.**     S
fd70: 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f  QLITE_FUNC_TYPEO
fd80: 46 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f  F    ==  OPFLAG_
fd90: 54 59 50 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20  TYPEOFARG.**    
fda0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
fdb0: 53 54 41 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54  STANT  ==  SQLIT
fdc0: 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 20  E_DETERMINISTIC 
fdd0: 66 72 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20  from the API.** 
fde0: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
fdf0: 44 49 52 45 43 54 20 20 20 20 3d 3d 20 20 53 51  DIRECT    ==  SQ
fe00: 4c 49 54 45 5f 44 49 52 45 43 54 4f 4e 4c 59 20  LITE_DIRECTONLY 
fe10: 66 72 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20  from the API.** 
fe20: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
fe30: 45 4e 43 4d 41 53 4b 20 20 20 64 65 70 65 6e 64  ENCMASK   depend
fe40: 73 20 6f 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a  s on SQLITE_UTF*
fe50: 20 6d 61 63 72 6f 73 20 69 6e 20 74 68 65 20 41   macros in the A
fe60: 50 49 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  PI.*/.#define SQ
fe70: 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53  LITE_FUNC_ENCMAS
fe80: 4b 20 20 30 78 30 30 30 33 20 2f 2a 20 53 51 4c  K  0x0003 /* SQL
fe90: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
fea0: 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31  _UTF16BE or UTF1
feb0: 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  6LE */.#define S
fec0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20  QLITE_FUNC_LIKE 
fed0: 20 20 20 20 30 78 30 30 30 34 20 2f 2a 20 43 61      0x0004 /* Ca
fee0: 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20  ndidate for the 
fef0: 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f  LIKE optimizatio
ff00: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
ff10: 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20  ITE_FUNC_CASE   
ff20: 20 20 30 78 30 30 30 38 20 2f 2a 20 43 61 73 65    0x0008 /* Case
ff30: 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d  -sensitive LIKE-
ff40: 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  type function */
ff50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ff60: 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78  FUNC_EPHEM    0x
ff70: 30 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61  0010 /* Ephemera
ff80: 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20  l.  Delete with 
ff90: 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  VDBE */.#define 
ffa0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
ffb0: 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20 73  COLL 0x0020 /* s
ffc0: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
ffd0: 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20  lSeq() might be 
ffe0: 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65  called*/.#define
fff0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
10000 47 54 48 20 20 20 30 78 30 30 34 30 20 2f 2a 20  GTH   0x0040 /* 
10010 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28  Built-in length(
10020 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
10030 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
10040 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 30 38  C_TYPEOF   0x008
10050 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79  0 /* Built-in ty
10060 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20  peof() function 
10070 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
10080 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20  E_FUNC_COUNT    
10090 30 78 30 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0100 /* Built-
100a0 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72  in count(*) aggr
100b0 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  egate */.#define
100c0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41   SQLITE_FUNC_COA
100d0 4c 45 53 43 45 20 30 78 30 32 30 30 20 2f 2a 20  LESCE 0x0200 /* 
100e0 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63  Built-in coalesc
100f0 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20  e() or ifnull() 
10100 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
10110 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20  E_FUNC_UNLIKELY 
10120 30 78 30 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0400 /* Built-
10130 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75  in unlikely() fu
10140 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
10150 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
10160 4e 53 54 41 4e 54 20 30 78 30 38 30 30 20 2f 2a  NSTANT 0x0800 /*
10170 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73   Constant inputs
10180 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74   give a constant
10190 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69   output */.#defi
101a0 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  ne SQLITE_FUNC_M
101b0 49 4e 4d 41 58 20 20 20 30 78 31 30 30 30 20 2f  INMAX   0x1000 /
101c0 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29  * True for min()
101d0 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65   and max() aggre
101e0 67 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  gates */.#define
101f0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
10200 43 48 4e 47 20 20 30 78 32 30 30 30 20 2f 2a 20  CHNG  0x2000 /* 
10210 22 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20 56  "Slow Change". V
10220 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20 64 75  alue constant du
10230 72 69 6e 67 20 61 0a 20 20 20 20 20 20 20 20 20  ring a.         
10240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10250 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 73 69             ** si
10260 6e 67 6c 65 20 71 75 65 72 79 20 2d 20 6d 69 67  ngle query - mig
10270 68 74 20 63 68 61 6e 67 65 20 6f 76 65 72 20 74  ht change over t
10280 69 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ime */.#define S
10290 51 4c 49 54 45 5f 46 55 4e 43 5f 41 46 46 49 4e  QLITE_FUNC_AFFIN
102a0 49 54 59 20 30 78 34 30 30 30 20 2f 2a 20 42 75  ITY 0x4000 /* Bu
102b0 69 6c 74 2d 69 6e 20 61 66 66 69 6e 69 74 79 28  ilt-in affinity(
102c0 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
102d0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
102e0 43 5f 4f 46 46 53 45 54 20 20 20 30 78 38 30 30  C_OFFSET   0x800
102f0 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 73 71  0 /* Built-in sq
10300 6c 69 74 65 5f 6f 66 66 73 65 74 28 29 20 66 75  lite_offset() fu
10310 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
10320 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 57 49  e SQLITE_FUNC_WI
10330 4e 44 4f 57 20 20 20 30 78 30 30 30 31 30 30 30  NDOW   0x0001000
10340 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 77 69  0 /* Built-in wi
10350 6e 64 6f 77 2d 6f 6e 6c 79 20 66 75 6e 63 74 69  ndow-only functi
10360 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
10370 4c 49 54 45 5f 46 55 4e 43 5f 49 4e 54 45 52 4e  LITE_FUNC_INTERN
10380 41 4c 20 30 78 30 30 30 34 30 30 30 30 20 2f 2a  AL 0x00040000 /*
10390 20 46 6f 72 20 75 73 65 20 62 79 20 4e 65 73 74   For use by Nest
103a0 65 64 50 61 72 73 65 28 29 20 6f 6e 6c 79 20 2a  edParse() only *
103b0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
103c0 5f 46 55 4e 43 5f 44 49 52 45 43 54 20 20 20 30  _FUNC_DIRECT   0
103d0 78 30 30 30 38 30 30 30 30 20 2f 2a 20 4e 6f 74  x00080000 /* Not
103e0 20 66 6f 72 20 75 73 65 20 69 6e 20 54 52 49 47   for use in TRIG
103f0 47 45 52 73 20 6f 72 20 56 49 45 57 73 20 2a 2f  GERs or VIEWs */
10400 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10410 46 55 4e 43 5f 53 55 42 54 59 50 45 20 20 30 78  FUNC_SUBTYPE  0x
10420 30 30 31 30 30 30 30 30 20 2f 2a 20 52 65 73 75  00100000 /* Resu
10430 6c 74 20 6c 69 6b 65 6c 79 20 74 6f 20 68 61 76  lt likely to hav
10440 65 20 73 75 62 2d 74 79 70 65 20 2a 2f 0a 0a 2f  e sub-type */../
10450 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
10460 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c  ng three macros,
10470 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b   FUNCTION(), LIK
10480 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52  EFUNC() and AGGR
10490 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75  EGATE() are.** u
104a0 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68  sed to create th
104b0 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66  e initializers f
104c0 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73  or the FuncDef s
104d0 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a  tructures..**.**
104e0 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d     FUNCTION(zNam
104f0 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
10500 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
10510 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
10520 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
10530 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
10540 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
10550 65 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65  e.**     impleme
10560 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69  nted by C functi
10570 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63  on xFunc that ac
10580 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
10590 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20  ents. The.**    
105a0 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
105b0 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   iArg is cast to
105c0 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d   a (void*) and m
105d0 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  ade available.**
105e0 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72       as the user
105f0 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
10600 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20  ser_data()) for 
10610 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66  the function. If
10620 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74  .**     argument
10630 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68   bNC is true, th
10640 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  en the SQLITE_FU
10650 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67  NC_NEEDCOLL flag
10660 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20   is set..**.**  
10670 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   VFUNCTION(zName
10680 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
10690 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
106a0 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65   Like FUNCTION e
106b0 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74  xcept it omits t
106c0 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  he SQLITE_FUNC_C
106d0 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a  ONSTANT flag..**
106e0 0a 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28  .**   DFUNCTION(
106f0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10700 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
10710 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54  *     Like FUNCT
10720 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d  ION except it om
10730 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46  its the SQLITE_F
10740 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61  UNC_CONSTANT fla
10750 67 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64  g and.**     add
10760 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  s the SQLITE_FUN
10770 43 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20  C_SLOCHNG flag. 
10780 20 55 73 65 64 20 66 6f 72 20 64 61 74 65 20 26   Used for date &
10790 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a   time functions.
107a0 2a 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74  **     and funct
107b0 69 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65  ions like sqlite
107c0 5f 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20  _version() that 
107d0 63 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20  can change, but 
107e0 6e 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20  not during.**   
107f0 20 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79    a single query
10800 2e 20 20 54 68 65 20 69 41 72 67 20 69 73 20 69  .  The iArg is i
10810 67 6e 6f 72 65 64 2e 20 20 54 68 65 20 75 73 65  gnored.  The use
10820 72 2d 64 61 74 61 20 69 73 20 61 6c 77 61 79 73  r-data is always
10830 20 73 65 74 0a 2a 2a 20 20 20 20 20 74 6f 20 61   set.**     to a
10840 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20   NULL pointer.  
10850 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65  The bNC paramete
10860 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  r is not used..*
10870 2a 0a 2a 2a 20 20 20 50 55 52 45 5f 44 41 54 45  *.**   PURE_DATE
10880 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
10890 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
108a0 2a 2a 20 20 20 20 20 55 73 65 64 20 66 6f 72 20  **     Used for 
108b0 22 70 75 72 65 22 20 64 61 74 65 2f 74 69 6d 65  "pure" date/time
108c0 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 69 73   functions, this
108d0 20 6d 61 63 72 6f 20 69 73 20 6c 69 6b 65 20 44   macro is like D
108e0 46 55 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20 20 20  FUNCTION.**     
108f0 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 64  except that it d
10900 6f 65 73 20 73 65 74 20 74 68 65 20 53 51 4c 49  oes set the SQLI
10910 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
10920 20 66 6c 61 67 73 2e 20 20 69 41 72 67 20 69 73   flags.  iArg is
10930 0a 2a 2a 20 20 20 20 20 69 67 6e 6f 72 65 64 20  .**     ignored 
10940 61 6e 64 20 74 68 65 20 75 73 65 72 2d 64 61 74  and the user-dat
10950 61 20 66 6f 72 20 74 68 65 73 65 20 66 75 6e 63  a for these func
10960 74 69 6f 6e 73 20 69 73 20 73 65 74 20 74 6f 20  tions is set to 
10970 61 6e 20 0a 2a 2a 20 20 20 20 20 61 72 62 69 74  an .**     arbit
10980 72 61 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f  rary non-NULL po
10990 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20  inter.  The bNC 
109a0 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
109b0 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41   used..**.**   A
109c0 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
109d0 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
109e0 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a   xStep, xFinal).
109f0 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
10a00 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61  reate an aggrega
10a10 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  te function defi
10a20 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nition implement
10a30 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65  ed by.**     the
10a40 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74   C functions xSt
10a50 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54  ep and xFinal. T
10a60 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61  he first four pa
10a70 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20  rameters.**     
10a80 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20  are interpreted 
10a90 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  in the same way 
10aa0 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70  as the first 4 p
10ab0 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20  arameters to.** 
10ac0 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a      FUNCTION()..
10ad0 2a 2a 0a 2a 2a 20 20 20 57 46 55 4e 43 54 49 4f  **.**   WFUNCTIO
10ae0 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
10af0 41 72 67 2c 20 78 53 74 65 70 2c 20 78 46 69 6e  Arg, xStep, xFin
10b00 61 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49 6e 76  al, xValue, xInv
10b10 65 72 73 65 29 0a 2a 2a 20 20 20 20 20 55 73 65  erse).**     Use
10b20 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61  d to create an a
10b30 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
10b40 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70  n definition imp
10b50 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20  lemented by.**  
10b60 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f     the C functio
10b70 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69  ns xStep and xFi
10b80 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66  nal. The first f
10b90 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a  our parameters.*
10ba0 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70  *     are interp
10bb0 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d  reted in the sam
10bc0 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72  e way as the fir
10bd0 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20  st 4 parameters 
10be0 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49  to.**     FUNCTI
10bf0 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49  ON()..**.**   LI
10c00 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41  KEFUNC(zName, nA
10c10 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29  rg, pArg, flags)
10c20 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
10c30 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20  create a scalar 
10c40 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
10c50 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ion of a functio
10c60 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74  n zName.**     t
10c70 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67  hat accepts nArg
10c80 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69   arguments and i
10c90 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
10ca0 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20   a call to C.** 
10cb0 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b      function lik
10cc0 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20  eFunc. Argument 
10cd0 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  pArg is cast to 
10ce0 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d  a (void *) and m
10cf0 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c  ade.**     avail
10d00 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63  able as the func
10d10 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28  tion user-data (
10d20 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
10d30 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20  a()). The.**    
10d40 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76   FuncDef.flags v
10d50 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
10d60 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73  o the value pass
10d70 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a  ed as the flags.
10d80 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72  **     parameter
10d90 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e  ..*/.#define FUN
10da0 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
10db0 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10dc0 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
10dd0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
10de0 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
10df0 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
10e00 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
10e10 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
10e20 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
10e30 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
10e40 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
10e50 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e  ine VFUNCTION(zN
10e60 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
10e70 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
10e80 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
10e90 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
10ea0 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
10eb0 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
10ec0 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
10ed0 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c   xFunc, 0, 0, 0,
10ee0 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
10ef0 64 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e  define DFUNCTION
10f00 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
10f10 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
10f20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
10f30 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53  E_FUNC_SLOCHNG|S
10f40 51 4c 49 54 45 5f 55 54 46 38 2c 20 5c 0a 20 20  QLITE_UTF8, \.  
10f50 20 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c   0, 0, xFunc, 0,
10f60 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b   0, 0, #zName, {
10f70 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50 55 52  0} }.#define PUR
10f80 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  E_DATE(zName, nA
10f90 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
10fa0 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
10fb0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
10fc0 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38  CHNG|SQLITE_UTF8
10fd0 7c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e  |SQLITE_FUNC_CON
10fe0 53 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76 6f 69  STANT, \.   (voi
10ff0 64 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e 66 69  d*)&sqlite3Confi
11000 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  g, 0, xFunc, 0, 
11010 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  0, 0, #zName, {0
11020 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  } }.#define FUNC
11030 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  TION2(zName, nAr
11040 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
11050 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29  unc, extraFlags)
11060 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54   \.  {nArg,SQLIT
11070 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
11080 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
11090 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
110a0 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
110b0 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  s,\.   SQLITE_IN
110c0 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
110d0 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
110e0 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
110f0 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e  .#define STR_FUN
11100 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
11110 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, pArg, bNC, xF
11120 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
11130 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
11140 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  HNG|SQLITE_UTF8|
11150 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
11160 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
11170 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c   pArg, 0, xFunc,
11180 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65   0, 0, 0, #zName
11190 2c 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45  , }.#define LIKE
111a0 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  FUNC(zName, nArg
111b0 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a  , arg, flags) \.
111c0 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
111d0 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
111e0 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c  LITE_UTF8|flags,
111f0 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72   \.   (void *)ar
11200 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20  g, 0, likeFunc, 
11210 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
11220 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41   {0} }.#define A
11230 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
11240 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
11250 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56  Step, xFinal, xV
11260 61 6c 75 65 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  alue) \.  {nArg,
11270 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
11280 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
11290 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
112a0 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
112b0 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  rg), 0, xStep,xF
112c0 69 6e 61 6c 2c 78 56 61 6c 75 65 2c 30 2c 23 7a  inal,xValue,0,#z
112d0 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69  Name, {0}}.#defi
112e0 6e 65 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e  ne AGGREGATE2(zN
112f0 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
11300 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
11310 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c  l, extraFlags) \
11320 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
11330 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45  _UTF8|(nc*SQLITE
11340 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c  _FUNC_NEEDCOLL)|
11350 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20  extraFlags, \.  
11360 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
11370 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65  TR(arg), 0, xSte
11380 70 2c 78 46 69 6e 61 6c 2c 78 46 69 6e 61 6c 2c  p,xFinal,xFinal,
11390 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23  0,#zName, {0}}.#
113a0 64 65 66 69 6e 65 20 57 41 47 47 52 45 47 41 54  define WAGGREGAT
113b0 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  E(zName, nArg, a
113c0 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
113d0 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c 20 78  Final, xValue, x
113e0 49 6e 76 65 72 73 65 2c 20 66 29 20 5c 0a 20 20  Inverse, f) \.  
113f0 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
11400 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8|(nc*SQLITE_FU
11410 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 66 2c 20  NC_NEEDCOLL)|f, 
11420 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
11430 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
11440 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61  xStep,xFinal,xVa
11450 6c 75 65 2c 78 49 6e 76 65 72 73 65 2c 23 7a 4e  lue,xInverse,#zN
11460 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e  ame, {0}}.#defin
11470 65 20 49 4e 54 45 52 4e 41 4c 5f 46 55 4e 43 54  e INTERNAL_FUNCT
11480 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
11490 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
114a0 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 49  g, SQLITE_FUNC_I
114b0 4e 54 45 52 4e 41 4c 7c 53 51 4c 49 54 45 5f 55  NTERNAL|SQLITE_U
114c0 54 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e 43 5f  TF8|SQLITE_FUNC_
114d0 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20 20 30  CONSTANT, \.   0
114e0 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
114f0 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
11500 20 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63   }.../*.** All c
11510 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  urrent savepoint
11520 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
11530 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  a linked list st
11540 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c  arting at.** sql
11550 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e  ite3.pSavepoint.
11560 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
11570 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69  nt in the list i
11580 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  s the most recen
11590 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61  tly.** opened sa
115a0 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69  vepoint. Savepoi
115b0 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f  nts are added to
115c0 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65   the list by the
115d0 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65   vdbe.** OP_Save
115e0 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
115f0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76  n..*/.struct Sav
11600 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20  epoint {.  char 
11610 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
11620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11630 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65  * Savepoint name
11640 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64   (nul-terminated
11650 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  ) */.  i64 nDefe
11660 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20  rredCons;       
11670 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
11680 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
11690 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a   fk violations *
116a0 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
116b0 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
116c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
116d0 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d  r of deferred im
116e0 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70  m fk. */.  Savep
116f0 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  oint *pNext;    
11700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11710 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69  * Parent savepoi
11720 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d  nt (if any) */.}
11730 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
11740 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20  lowing are used 
11750 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  as the second pa
11760 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
11770 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a  e3Savepoint(),.*
11780 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20  * and as the P1 
11790 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
117a0 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
117b0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65  truction..*/.#de
117c0 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42  fine SAVEPOINT_B
117d0 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66  EGIN      0.#def
117e0 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45  ine SAVEPOINT_RE
117f0 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69  LEASE    1.#defi
11800 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  ne SAVEPOINT_ROL
11810 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a  LBACK   2.../*.*
11820 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f  * Each SQLite mo
11830 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61  dule (virtual ta
11840 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20  ble definition) 
11850 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
11860 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
11870 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
11880 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20  ructure, stored 
11890 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61  in the sqlite3.a
118a0 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74  Module.** hash t
118b0 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  able..*/.struct 
118c0 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74  Module {.  const
118d0 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
118e0 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20  *pModule;       
118f0 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e  /* Callback poin
11900 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ters */.  const 
11910 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
11920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11930 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f  * Name passed to
11940 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
11950 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 4d 6f   */.  int nRefMo
11960 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  dule;           
11970 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
11980 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
11990 20 74 6f 20 74 68 69 73 20 6f 62 6a 65 63 74 20   to this object 
119a0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b  */.  void *pAux;
119b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75            /* pAu
119d0 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  x passed to crea
119e0 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
119f0 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
11a00 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20  )(void *);      
11a10 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20        /* Module 
11a20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
11a30 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ion */.  Table *
11a40 70 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20  pEpoTab;        
11a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11a60 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65   Eponymous table
11a70 20 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65   for this module
11a80 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e   */.};../*.** in
11a90 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
11aa0 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61  each column of a
11ab0 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68  n SQL table is h
11ac0 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e  eld in an instan
11ad0 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  ce.** of this st
11ae0 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
11af0 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68  ct Column {.  ch
11b00 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f  ar *zName;     /
11b10 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63  * Name of this c
11b20 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68 65  olumn, \000, the
11b30 6e 20 74 68 65 20 74 79 70 65 20 2a 2f 0a 20 20  n the type */.  
11b40 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20  Expr *pDflt;    
11b50 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75   /* Default valu
11b60 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
11b70 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
11b80 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74  l;     /* Collat
11b90 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49  ing sequence.  I
11ba0 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20  f NULL, use the 
11bb0 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
11bc0 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a  notNull;      /*
11bd0 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72   An OE_ code for
11be0 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20   handling a NOT 
11bf0 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
11c00 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
11c10 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20  ty;   /* One of 
11c20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e  the SQLITE_AFF_.
11c30 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  .. values */.  u
11c40 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20  8 szEst;        
11c50 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a  /* Estimated siz
11c60 65 20 6f 66 20 76 61 6c 75 65 20 69 6e 20 74 68  e of value in th
11c70 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f  is column. sizeo
11c80 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20 75  f(INT)==1 */.  u
11c90 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20  8 colFlags;     
11ca0 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65  /* Boolean prope
11cb0 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46  rties.  See COLF
11cc0 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c  LAG_ defines bel
11cd0 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c  ow */.};../* All
11ce0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
11cf0 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a  Column.colFlags:
11d00 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46  .*/.#define COLF
11d10 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30  LAG_PRIMKEY  0x0
11d20 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  001    /* Column
11d30 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   is part of the 
11d40 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23  primary key */.#
11d50 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48  define COLFLAG_H
11d60 49 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20  IDDEN   0x0002  
11d70 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f    /* A hidden co
11d80 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61  lumn in a virtua
11d90 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
11da0 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53 54 59  ne COLFLAG_HASTY
11db0 50 45 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a  PE  0x0004    /*
11dc0 20 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f   Type name follo
11dd0 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a  ws column name *
11de0 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
11df0 47 5f 55 4e 49 51 55 45 20 20 20 30 78 30 30 30  G_UNIQUE   0x000
11e00 38 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 64  8    /* Column d
11e10 65 66 20 63 6f 6e 74 61 69 6e 73 20 22 55 4e 49  ef contains "UNI
11e20 51 55 45 22 20 6f 72 20 22 50 4b 22 20 2a 2f 0a  QUE" or "PK" */.
11e30 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
11e40 53 4f 52 54 45 52 52 45 46 20 30 78 30 30 31 30  SORTERREF 0x0010
11e50 20 20 20 2f 2a 20 55 73 65 20 73 6f 72 74 65 72     /* Use sorter
11e60 2d 72 65 66 73 20 77 69 74 68 20 74 68 69 73 20  -refs with this 
11e70 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  column */../*.**
11e80 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65   A "Collating Se
11e90 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e  quence" is defin
11ea0 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
11eb0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
11ec0 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
11ed0 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61   Conceptually, a
11ee0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
11ef0 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  nce consists of 
11f00 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20  a name and.** a 
11f10 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69  comparison routi
11f20 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ne that defines 
11f30 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61  the order of tha
11f40 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a  t sequence..**.*
11f50 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d  * If CollSeq.xCm
11f60 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65  p is NULL, it me
11f70 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20  ans that the.** 
11f80 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
11f90 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  ce is undefined.
11fa0 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20    Indices built 
11fb0 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a  on an undefined.
11fc0 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
11fd0 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65  uence may not be
11fe0 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e   read or written
11ff0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c  ..*/.struct Coll
12000 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  Seq {.  char *zN
12010 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ame;          /*
12020 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c   Name of the col
12030 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c  lating sequence,
12040 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a   UTF-8 encoded *
12050 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
12060 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
12070 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c  t encoding handl
12080 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a  ed by xCmp() */.
12090 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20    void *pUser;  
120a0 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
120b0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d   argument to xCm
120c0 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  p() */.  int (*x
120d0 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  Cmp)(void*,int, 
120e0 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
120f0 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a  , const void*);.
12100 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76    void (*xDel)(v
12110 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72  oid*);  /* Destr
12120 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20  uctor for pUser 
12130 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73  */.};../*.** A s
12140 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65  ort order can be
12150 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44   either ASC or D
12160 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ESC..*/.#define 
12170 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20  SQLITE_SO_ASC   
12180 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69      0  /* Sort i
12190 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
121a0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
121b0 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20  ITE_SO_DESC     
121c0 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61   1  /* Sort in a
121d0 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a  scending order *
121e0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
121f0 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20 2d 31  _SO_UNDEFINED -1
12200 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72 64 65   /* No sort orde
12210 72 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a 0a  r specified */..
12220 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66  /*.** Column aff
12230 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a  inity types..**.
12240 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74 6f  ** These used to
12250 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e   have mnemonic n
12260 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72  ame like 'i' for
12270 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
12280 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66  GER and.** 't' f
12290 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  or SQLITE_AFF_TE
122a0 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20  XT.  But we can 
122b0 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70  save a little sp
122c0 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a  ace and improve.
122d0 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20 6c  ** the speed a l
122e0 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69  ittle by numberi
122f0 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f  ng the values co
12300 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a  nsecutively..**.
12310 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68  ** But rather th
12320 61 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20  an start with 0 
12330 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77  or 1, we begin w
12340 69 74 68 20 27 41 27 2e 20 20 54 68 61 74 20 77  ith 'A'.  That w
12350 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74  ay,.** when mult
12360 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79  iple affinity ty
12370 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e  pes are concaten
12380 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69  ated into a stri
12390 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61  ng and.** used a
123a0 73 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64  s the P4 operand
123b0 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d  , they will be m
123c0 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a  ore readable..**
123d0 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68  .** Note also th
123e0 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74  at the numeric t
123f0 79 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64  ypes are grouped
12400 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61   together so tha
12410 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72  t testing.** for
12420 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20   a numeric type 
12430 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70  is a single comp
12440 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65  arison.  And the
12450 20 42 4c 4f 42 20 74 79 70 65 20 69 73 20 66 69   BLOB type is fi
12460 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  rst..*/.#define 
12470 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20  SQLITE_AFF_NONE 
12480 20 20 20 20 30 78 34 30 20 20 2f 2a 20 27 40 27      0x40  /* '@'
12490 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
124a0 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20  TE_AFF_BLOB     
124b0 30 78 34 31 20 20 2f 2a 20 27 41 27 20 2a 2f 0a  0x41  /* 'A' */.
124c0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
124d0 46 46 5f 54 45 58 54 20 20 20 20 20 30 78 34 32  FF_TEXT     0x42
124e0 20 20 2f 2a 20 27 42 27 20 2a 2f 0a 23 64 65 66    /* 'B' */.#def
124f0 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ine SQLITE_AFF_N
12500 55 4d 45 52 49 43 20 20 30 78 34 33 20 20 2f 2a  UMERIC  0x43  /*
12510 20 27 43 27 20 2a 2f 0a 23 64 65 66 69 6e 65 20   'C' */.#define 
12520 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
12530 45 52 20 20 30 78 34 34 20 20 2f 2a 20 27 44 27  ER  0x44  /* 'D'
12540 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
12550 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20  TE_AFF_REAL     
12560 30 78 34 35 20 20 2f 2a 20 27 45 27 20 2a 2f 0a  0x45  /* 'E' */.
12570 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
12580 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  IsNumericAffinit
12590 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49  y(X)  ((X)>=SQLI
125a0 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a  TE_AFF_NUMERIC).
125b0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
125c0 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65  E_AFF_MASK value
125d0 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20  s masks off the 
125e0 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73  significant bits
125f0 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69   of an.** affini
12600 74 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65  ty value..*/.#de
12610 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
12620 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f  MASK     0x47../
12630 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20  *.** Additional 
12640 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20  bit values that 
12650 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68  can be ORed with
12660 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74   an affinity wit
12670 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67  hout.** changing
12680 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a   the affinity..*
12690 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
126a0 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20  NOTNULL flag is 
126b0 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  a combination of
126c0 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50   NULLEQ and JUMP
126d0 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61  IFNULL..** It ca
126e0 75 73 65 73 20 61 6e 20 61 73 73 65 72 74 28 29  uses an assert()
126f0 20 74 6f 20 66 69 72 65 20 69 66 20 65 69 74 68   to fire if eith
12700 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20  er operand to a 
12710 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70  comparison.** op
12720 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20  erator is NULL. 
12730 20 49 74 20 69 73 20 61 64 64 65 64 20 74 6f 20   It is added to 
12740 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73  certain comparis
12750 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a  on operators to.
12760 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74 68  ** prove that th
12770 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61  e operands are a
12780 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a  lways NOT NULL..
12790 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
127a0 45 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20 20 30  E_KEEPNULL     0
127b0 78 30 38 20 20 2f 2a 20 55 73 65 64 20 62 79 20  x08  /* Used by 
127c0 76 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20  vector == or <> 
127d0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
127e0 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30  E_JUMPIFNULL   0
127f0 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66  x10  /* jumps if
12800 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
12810 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  is NULL */.#defi
12820 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50  ne SQLITE_STOREP
12830 32 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20  2      0x20  /* 
12840 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
12850 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74  reg[P2] rather t
12860 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66  han jump */.#def
12870 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  ine SQLITE_NULLE
12880 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a  Q       0x80  /*
12890 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64   NULL=NULL */.#d
128a0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54  efine SQLITE_NOT
128b0 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20  NULL      0x90  
128c0 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 6f  /* Assert that o
128d0 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65  perands are neve
128e0 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  r NULL */../*.**
128f0 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68   An object of th
12900 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61 74  is type is creat
12910 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72 74  ed for each virt
12920 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e  ual table presen
12930 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61  t in.** the data
12940 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a  base schema..**.
12950 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61  ** If the databa
12960 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61  se schema is sha
12970 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20  red, then there 
12980 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  is one instance 
12990 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63  of this.** struc
129a0 74 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61  ture for each da
129b0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
129c0 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61  n (sqlite3*) tha
129d0 74 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65  t uses the share
129e0 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69  d.** schema. Thi
129f0 73 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63  s is because eac
12a00 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
12a10 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69  ction requires i
12a20 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a  ts own unique.**
12a30 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
12a40 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
12a50 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63  andle used to ac
12a60 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c  cess the virtual
12a70 20 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d   table.** implem
12a80 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65  entation. sqlite
12a90 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
12aa0 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65  can not be share
12ab0 64 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74  d between.** dat
12ac0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12ad0 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65  s, even when the
12ae0 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d   rest of the in-
12af0 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a  memory database.
12b00 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61  ** schema is sha
12b10 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c  red, as the impl
12b20 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e  ementation often
12b30 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61   stores the data
12b40 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
12b50 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64  on handle passed
12b60 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78   to it via the x
12b70 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72  Connect() or xCr
12b80 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a  eate() method.**
12b90 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
12ba0 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c  zation internall
12bb0 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65  y. This database
12bc0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
12bd0 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62  le may.** then b
12be0 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69  e used by the vi
12bf0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c  rtual table impl
12c00 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63  ementation to ac
12c10 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73  cess real tables
12c20 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64  .** within the d
12c30 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74  atabase. So that
12c40 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20   they appear as 
12c50 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c  part of the call
12c60 65 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  ers.** transacti
12c70 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73  on, these access
12c80 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61  es need to be ma
12c90 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20  de via the same 
12ca0 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
12cb0 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75  ection as that u
12cc0 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53  sed to execute S
12cd0 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e  QL operations on
12ce0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
12cf0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54  le..**.** All VT
12d00 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61  able objects tha
12d10 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  t correspond to 
12d20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69  a single table i
12d30 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61  n a shared.** da
12d40 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72  tabase schema ar
12d50 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72  e initially stor
12d60 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c  ed in a linked-l
12d70 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  ist pointed to b
12d80 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70  y.** the Table.p
12d90 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61  VTable member va
12da0 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f  riable of the co
12db0 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c  rresponding Tabl
12dc0 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65  e object..** Whe
12dd0 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65  n an sqlite3_pre
12de0 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e  pare() operation
12df0 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20   is required to 
12e00 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
12e10 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20  al.** table, it 
12e20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73  searches the lis
12e30 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65  t for the VTable
12e40 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
12e50 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61  s to the.** data
12e60 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
12e70 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72  doing the prepar
12e80 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65  ing so as to use
12e90 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20   the correct.** 
12ea0 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
12eb0 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70  ndle in the comp
12ec0 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a  iled query..**.*
12ed0 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d  * When an in-mem
12ee0 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ory Table object
12ef0 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72   is deleted (for
12f00 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68   example when th
12f10 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62  e.** schema is b
12f20 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f  eing reloaded fo
12f30 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20  r some reason), 
12f40 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63  the VTable objec
12f50 74 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65  ts are not.** de
12f60 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71  leted and the sq
12f70 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
12f80 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73  les are not xDis
12f90 63 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69  connect()ed.** i
12fa0 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74  mmediately. Inst
12fb0 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f  ead, they are mo
12fc0 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62  ved from the Tab
12fd0 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20  le.pVTable list 
12fe0 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69  to.** another li
12ff0 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
13000 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e   by the sqlite3.
13010 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62  pDisconnect memb
13020 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72  er of the.** cor
13030 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
13040 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68  e3 structure. Th
13050 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65  ey are then dele
13060 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65  ted/xDisconnecte
13070 64 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61  d.** next time a
13080 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72   statement is pr
13090 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69  epared using sai
130a0 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73  d sqlite3*. This
130b0 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61   is done.** to a
130c0 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73  void deadlock is
130d0 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d  sues involving m
130e0 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e  ultiple sqlite3.
130f0 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a  mutex mutexes..*
13100 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65  * Refer to comme
13110 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69  nts above functi
13120 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  on sqlite3VtabUn
13130 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61  lockList() for a
13140 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e  n.** explanation
13150 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73   as to why it is
13160 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20   safe to add an 
13170 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69  entry to an sqli
13180 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a  te3.pDisconnect.
13190 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20  ** list without 
131a0 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72  holding the corr
131b0 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
131c0 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a  3.mutex mutex..*
131d0 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20  *.** The memory 
131e0 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74  for objects of t
131f0 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61  his type is alwa
13200 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a  ys allocated by.
13210 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  ** sqlite3DbMall
13220 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20  oc(), using the 
13230 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
13240 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62  e stored in VTab
13250 6c 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65 20  le.db as.** the 
13260 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a  first argument..
13270 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65  */.struct VTable
13280 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
13290 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
132a0 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * Database conne
132b0 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ction associated
132c0 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65   with this table
132d0 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d   */.  Module *pM
132e0 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  od;             
132f0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f  /* Pointer to mo
13300 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
13310 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ion */.  sqlite3
13320 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20  _vtab *pVtab;   
13330 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
13340 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a   vtab instance *
13350 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
13360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13370 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
13380 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75  ers to this stru
13390 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43  cture */.  u8 bC
133a0 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20  onstraint;      
133b0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
133c0 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20  constraints are 
133d0 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69  supported */.  i
133e0 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt iSavepoint;  
133f0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74           /* Dept
13400 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49  h of the SAVEPOI
13410 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54  NT stack */.  VT
13420 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20  able *pNext;    
13430 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
13440 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  in linked list (
13450 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b  see above) */.};
13460 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65  ../*.** The sche
13470 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20  ma for each SQL 
13480 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69  table and view i
13490 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
134a0 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e   memory.** by an
134b0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
134c0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
134d0 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
134e0 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a  Table {.  char *
134f0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
13500 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
13510 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20  ble or view */. 
13520 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20   Column *aCol;  
13530 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
13540 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
13550 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
13560 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20  x *pIndex;      
13570 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20   /* List of SQL 
13580 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20  indexes on this 
13590 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65  table. */.  Sele
135a0 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
135b0 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62   /* NULL for tab
135c0 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20  les.  Points to 
135d0 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20  definition if a 
135e0 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20  view. */.  FKey 
135f0 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20  *pFKey;         
13600 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
13610 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  f all foreign ke
13620 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ys in this table
13630 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
13640 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74  Aff;       /* St
13650 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
13660 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
13670 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45  ch column */.  E
13680 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b  xprList *pCheck;
13690 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b      /* All CHECK
136a0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
136b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136c0 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20         /*   ... 
136d0 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f 6c  also used as col
136e0 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e  umn name list in
136f0 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74   a VIEW */.  int
13700 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
13710 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20    /* Root BTree 
13720 70 61 67 65 20 66 6f 72 20 74 68 69 73 20 74 61  page for this ta
13730 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61  ble */.  u32 nTa
13740 62 52 65 66 3b 20 20 20 20 20 20 20 20 20 2f 2a  bRef;         /*
13750 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
13760 65 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c  ers to this Tabl
13770 65 20 2a 2f 0a 20 20 75 33 32 20 74 61 62 46 6c  e */.  u32 tabFl
13780 61 67 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  ags;        /* M
13790 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75  ask of TF_* valu
137a0 65 73 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65  es */.  i16 iPKe
137b0 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  y;           /* 
137c0 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c  If not negative,
137d0 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d   use aCol[iPKey]
137e0 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f   as the rowid */
137f0 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20  .  i16 nCol;    
13800 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13810 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
13820 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
13830 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73  LogEst nRowLogEs
13840 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65  t;   /* Estimate
13850 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20  d rows in table 
13860 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  - from sqlite_st
13870 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  at1 table */.  L
13880 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20  ogEst szTabRow; 
13890 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
138a0 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61   size of each ta
138b0 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73  ble row in bytes
138c0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
138d0 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c  E_ENABLE_COSTMUL
138e0 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d  T.  LogEst costM
138f0 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74  ult;     /* Cost
13900 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20   multiplier for 
13910 75 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65  using this table
13920 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20   */.#endif.  u8 
13930 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20  keyConf;        
13940 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20    /* What to do 
13950 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75  in case of uniqu
13960 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f  eness conflict o
13970 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64  n iPKey */.#ifnd
13980 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
13990 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20  LTERTABLE.  int 
139a0 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20  addColOffset;   
139b0 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52   /* Offset in CR
139c0 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20  EATE TABLE stmt 
139d0 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c  to add a new col
139e0 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  umn */.#endif.#i
139f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
13a00 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
13a10 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b   int nModuleArg;
13a20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13a30 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
13a40 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20  the module */.  
13a50 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41  char **azModuleA
13a60 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c  rg;  /* 0: modul
13a70 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76  e 1: schema 2: v
13a80 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61  tab name 3...: a
13a90 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  rgs */.  VTable 
13aa0 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a  *pVTable;     /*
13ab0 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20   List of VTable 
13ac0 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64  objects. */.#end
13ad0 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  if.  Trigger *pT
13ae0 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73  rigger;   /* Lis
13af0 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74  t of triggers st
13b00 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20  ored in pSchema 
13b10 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
13b20 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68  hema;     /* Sch
13b30 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ema that contain
13b40 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
13b50 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f    Table *pNextZo
13b60 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  mbie;  /* Next o
13b70 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d  n the Parse.pZom
13b80 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d  bieTab list */.}
13b90 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
13ba0 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c   values for Tabl
13bb0 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a  e.tabFlags..**.*
13bc0 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61  * TF_OOOHidden a
13bd0 70 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65 73  pplies to tables
13be0 20 6f 72 20 76 69 65 77 20 74 68 61 74 20 68 61   or view that ha
13bf0 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  ve hidden column
13c00 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f  s that are.** fo
13c10 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69  llowed by non-hi
13c20 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45  dden columns.  E
13c30 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45  xample:  "CREATE
13c40 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78   VIRTUAL TABLE x
13c50 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28   USING.** vtab1(
13c60 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20  a HIDDEN, b);". 
13c70 20 53 69 6e 63 65 20 22 62 22 20 69 73 20 61 20   Since "b" is a 
13c80 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d  non-hidden colum
13c90 6e 20 62 75 74 20 22 61 22 20 69 73 20 68 69 64  n but "a" is hid
13ca0 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f  den,.** the TF_O
13cb0 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62 75  OOHidden attribu
13cc0 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69  te would apply i
13cd0 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20 53 75  n this case.  Su
13ce0 63 68 20 74 61 62 6c 65 73 20 72 65 71 75 69 72  ch tables requir
13cf0 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e  e.** special han
13d00 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53  dling during INS
13d10 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a  ERT processing..
13d20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65  */.#define TF_Re
13d30 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78  adonly        0x
13d40 30 30 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d  0001    /* Read-
13d50 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c  only system tabl
13d60 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
13d70 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20  Ephemeral       
13d80 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 6e 20  0x0002    /* An 
13d90 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
13da0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
13db0 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78  sPrimaryKey   0x
13dc0 30 30 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65  0004    /* Table
13dd0 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b   has a primary k
13de0 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
13df0 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20  _Autoincrement  
13e00 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 49 6e   0x0008    /* In
13e10 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
13e20 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65  y is autoincreme
13e30 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  nt */.#define TF
13e40 5f 48 61 73 53 74 61 74 31 20 20 20 20 20 20 20  _HasStat1       
13e50 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 6e 52   0x0010    /* nR
13e60 6f 77 4c 6f 67 45 73 74 20 73 65 74 20 66 72 6f  owLogEst set fro
13e70 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a  m sqlite_stat1 *
13e80 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74  /.#define TF_Wit
13e90 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 30  houtRowid    0x0
13ea0 30 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77  020    /* No row
13eb0 69 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59  id.  PRIMARY KEY
13ec0 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23   is the key */.#
13ed0 64 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69  define TF_NoVisi
13ee0 62 6c 65 52 6f 77 69 64 20 20 30 78 30 30 34 30  bleRowid  0x0040
13ef0 20 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76      /* No user-v
13f00 69 73 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63  isible "rowid" c
13f10 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  olumn */.#define
13f20 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20   TF_OOOHidden   
13f30 20 20 20 20 30 78 30 30 38 30 20 20 20 20 2f 2a      0x0080    /*
13f40 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69   Out-of-Order hi
13f50 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  dden columns */.
13f60 23 64 65 66 69 6e 65 20 54 46 5f 53 74 61 74 73  #define TF_Stats
13f70 55 73 65 64 20 20 20 20 20 20 20 30 78 30 31 30  Used       0x010
13f80 30 20 20 20 20 2f 2a 20 51 75 65 72 79 20 70 6c  0    /* Query pl
13f90 61 6e 6e 65 72 20 64 65 63 69 73 69 6f 6e 73 20  anner decisions 
13fa0 61 66 66 65 63 74 65 64 20 62 79 0a 20 20 20 20  affected by.    
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fd0 20 2a 2a 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c   ** Index.aiRowL
13fe0 6f 67 45 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a  ogEst[] values *
13ff0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
14000 4e 6f 74 4e 75 6c 6c 20 20 20 20 20 20 30 78 30  NotNull      0x0
14010 32 30 30 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69  200    /* Contai
14020 6e 73 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  ns NOT NULL cons
14030 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
14040 6e 65 20 54 46 5f 53 68 61 64 6f 77 20 20 20 20  ne TF_Shadow    
14050 20 20 20 20 20 20 30 78 30 34 30 30 20 20 20 20        0x0400    
14060 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 73 68  /* True for a sh
14070 61 64 6f 77 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f  adow table */../
14080 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65  *.** Test to see
14090 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
140a0 61 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72  a table is a vir
140b0 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69  tual table.  Thi
140c0 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20  s is.** done as 
140d0 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20  a macro so that 
140e0 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d  it will be optim
140f0 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69  ized out when vi
14100 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73  rtual.** table s
14110 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65  upport is omitte
14120 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64  d from the build
14130 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
14140 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
14150 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
14160 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
14170 20 20 28 28 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41    ((X)->nModuleA
14180 72 67 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  rg).#else.#  def
14190 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
141a0 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a        0.#endif..
141b0 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
141c0 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20 63  determine if a c
141d0 6f 6c 75 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e  olumn is hidden.
141e0 20 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64    IsOrdinaryHidd
141f0 65 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e  enColumn().** on
14200 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e  ly works for non
14210 2d 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20  -virtual tables 
14220 28 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73  (ordinary tables
14230 20 61 6e 64 20 76 69 65 77 73 29 20 61 6e 64 20   and views) and 
14240 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c  is.** always fal
14250 73 65 20 75 6e 6c 65 73 73 20 53 51 4c 49 54 45  se unless SQLITE
14260 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43  _ENABLE_HIDDEN_C
14270 4f 4c 55 4d 4e 53 20 69 73 20 64 65 66 69 6e 65  OLUMNS is define
14280 64 2e 20 20 54 68 65 0a 2a 2a 20 49 73 48 69 64  d.  The.** IsHid
14290 64 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72  denColumn() macr
142a0 6f 20 69 73 20 67 65 6e 65 72 61 6c 20 70 75 72  o is general pur
142b0 70 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  pose..*/.#if def
142c0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
142d0 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e  LE_HIDDEN_COLUMN
142e0 53 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  S).#  define IsH
142f0 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20  iddenColumn(X)  
14300 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f         (((X)->co
14310 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
14320 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20  _HIDDEN)!=0).#  
14330 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72  define IsOrdinar
14340 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  yHiddenColumn(X)
14350 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
14360 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
14370 4e 29 21 3d 30 29 0a 23 65 6c 69 66 20 21 64 65  N)!=0).#elif !de
14380 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
14390 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
143a0 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
143b0 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20  enColumn(X)     
143c0 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c      (((X)->colFl
143d0 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49  ags & COLFLAG_HI
143e0 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66  DDEN)!=0).#  def
143f0 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69  ine IsOrdinaryHi
14400 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a  ddenColumn(X) 0.
14410 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
14420 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
14430 29 20 20 20 20 20 20 20 20 20 30 0a 23 20 20 64  )         0.#  d
14440 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79  efine IsOrdinary
14450 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
14460 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f  0.#endif.../* Do
14470 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76  es the table hav
14480 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  e a rowid */.#de
14490 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29  fine HasRowid(X)
144a0 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46       (((X)->tabF
144b0 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75  lags & TF_Withou
144c0 74 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66  tRowid)==0).#def
144d0 69 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64  ine VisibleRowid
144e0 28 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c  (X) (((X)->tabFl
144f0 61 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62  ags & TF_NoVisib
14500 6c 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a  leRowid)==0)../*
14510 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e  .** Each foreign
14520 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
14530 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
14540 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
14550 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
14560 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69   A foreign key i
14570 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
14580 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54  h two tables.  T
14590 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20  he "from" table 
145a0 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  is.** the table 
145b0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
145c0 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
145d0 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73  use that creates
145e0 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
145f0 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74  key.  The "to" t
14600 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c  able is the tabl
14610 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20  e that is named 
14620 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  in the REFERENCE
14630 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e  S clause..** Con
14640 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70  sider this examp
14650 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  le:.**.**     CR
14660 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a  EATE TABLE ex1(.
14670 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47  **       a INTEG
14680 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
14690 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47  **       b INTEG
146a0 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b  ER CONSTRAINT fk
146b0 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32  1 REFERENCES ex2
146c0 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a  (x).**     );.**
146d0 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20  .** For foreign 
146e0 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66  key "fk1", the f
146f0 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78  rom-table is "ex
14700 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61  1" and the to-ta
14710 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a  ble is "ex2"..**
14720 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65   Equivalent name
14730 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f  s:.**.**     fro
14740 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64  m-table == child
14750 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  -table.**       
14760 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65  to-table == pare
14770 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45  nt-table.**.** E
14780 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63  ach REFERENCES c
14790 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20  lause generates 
147a0 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
147b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
147c0 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20  ucture.** which 
147d0 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
147e0 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20  he from-table.  
147f0 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65  The to-table nee
14800 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e  d not exist when
14810 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  .** the from-tab
14820 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  le is created.  
14830 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66  The existence of
14840 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
14850 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a   not checked..**
14860 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20  .** The list of 
14870 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20  all parents for 
14880 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73  child Table X is
14890 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79   held at X.pFKey
148a0 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ..**.** A list o
148b0 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66  f all children f
148c0 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64  or a table named
148d0 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20   Z (which might 
148e0 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a  not even exist).
148f0 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63  ** is held in Sc
14900 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69  hema.fkeyHash wi
14910 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66  th a hash key of
14920 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b   Z..*/.struct FK
14930 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46  ey {.  Table *pF
14940 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c  rom;     /* Tabl
14950 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
14960 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
14970 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20  se (aka: Child) 
14980 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
14990 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46  From;  /* Next F
149a0 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d  Key with the sam
149b0 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74  e in pFrom. Next
149c0 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d   parent of pFrom
149d0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b   */.  char *zTo;
149e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
149f0 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  of table that th
14a00 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20  e key points to 
14a10 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f  (aka: Parent) */
14a20 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f  .  FKey *pNextTo
14a30 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74  ;    /* Next wit
14a40 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20  h the same zTo. 
14a50 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54  Next child of zT
14a60 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50  o. */.  FKey *pP
14a70 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65  revTo;    /* Pre
14a80 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73  vious with the s
14a90 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74  ame zTo */.  int
14aa0 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f   nCol;         /
14ab0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
14ac0 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20  mns in this key 
14ad0 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30  */.  /* EV: R-30
14ae0 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75  323-21917 */.  u
14af0 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20  8 isDeferred;   
14b00 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
14b10 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69  onstraint checki
14b20 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74  ng is deferred t
14b30 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20  ill COMMIT */.  
14b40 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20  u8 aAction[2];  
14b50 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45        /* ON DELE
14b60 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45  TE and ON UPDATE
14b70 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63   actions, respec
14b80 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67  tively */.  Trig
14b90 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32  ger *apTrigger[2
14ba0 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f  ];/* Triggers fo
14bb0 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69  r aAction[] acti
14bc0 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
14bd0 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f  sColMap {      /
14be0 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c  * Mapping of col
14bf0 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f  umns in pFrom to
14c00 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20   columns in zTo 
14c10 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d  */.    int iFrom
14c20 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14c30 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20  Index of column 
14c40 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20  in pFrom */.    
14c50 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20  char *zCol;     
14c60 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
14c70 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20   column in zTo. 
14c80 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49   If NULL use PRI
14c90 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20  MARY KEY */.  } 
14ca0 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20  aCol[1];        
14cb0 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
14cc0 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f   for each of nCo
14cd0 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a  l columns */.};.
14ce0 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75  ./*.** SQLite su
14cf0 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66  pports many diff
14d00 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65  erent ways to re
14d10 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69  solve a constrai
14d20 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f  nt.** error.  RO
14d30 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e  LLBACK processin
14d40 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63  g means that a c
14d50 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
14d60 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68  ion.** causes th
14d70 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
14d80 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61  rocess to fail a
14d90 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  nd for the curre
14da0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
14db0 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  * to be rolled b
14dc0 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63  ack.  ABORT proc
14dd0 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65  essing means the
14de0 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
14df0 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61  ocess.** fails a
14e00 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61  nd any prior cha
14e10 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f  nges from that o
14e20 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  ne operation are
14e30 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20   backed out,.** 
14e40 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  but the transact
14e50 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65  ion is not rolle
14e60 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72  d back.  FAIL pr
14e70 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
14e80 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61  hat.** the opera
14e90 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
14ea0 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72   stops and retur
14eb0 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  ns an error code
14ec0 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20  .  But prior.** 
14ed0 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74  changes due to t
14ee0 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
14ef0 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64  n are not backed
14f00 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c   out and no roll
14f10 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20  back.** occurs. 
14f20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68   IGNORE means th
14f30 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  at the particula
14f40 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65  r row that cause
14f50 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
14f60 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74  .** error is not
14f70 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
14f80 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ated.  Processin
14f90 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
14fa0 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72  no error.** is r
14fb0 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43  eturned.  REPLAC
14fc0 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65  E means that pre
14fd0 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
14fe0 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73  e rows that caus
14ff0 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63  ed.** a UNIQUE c
15000 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
15010 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ion are removed 
15020 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20  so that the new 
15030 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64  insert or.** upd
15040 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e  ate can proceed.
15050 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
15060 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
15070 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e  ror is reported.
15080 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c  .**.** RESTRICT,
15090 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41   SETNULL, and CA
150a0 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70  SCADE actions ap
150b0 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65  ply only to fore
150c0 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53  ign keys..** RES
150d0 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d  TRICT is the sam
150e0 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49  e as ABORT for I
150f0 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e  MMEDIATE foreign
15100 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a   keys and the.**
15110 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43   same as ROLLBAC
15120 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b  K for DEFERRED k
15130 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65  eys.  SETNULL me
15140 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72  ans that the for
15150 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73  eign.** key is s
15160 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53  et to NULL.  CAS
15170 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20  CADE means that 
15180 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  a DELETE or UPDA
15190 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66  TE of the.** ref
151a0 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f  erenced table ro
151b0 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20  w is propagated 
151c0 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61  into the row tha
151d0 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66  t holds the.** f
151e0 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a  oreign key..**.*
151f0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
15200 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20  symbolic values 
15210 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f  are used to reco
15220 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a  rd which type.**
15230 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61   of action to ta
15240 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ke..*/.#define O
15250 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f  E_None     0   /
15260 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f  * There is no co
15270 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63  nstraint to chec
15280 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  k */.#define OE_
15290 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20  Rollback 1   /* 
152a0 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69  Fail the operati
152b0 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20  on and rollback 
152c0 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
152d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62  */.#define OE_Ab
152e0 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61  ort    2   /* Ba
152f0 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62  ck out changes b
15300 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63  ut do no rollbac
15310 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f  k transaction */
15320 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c  .#define OE_Fail
15330 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70       3   /* Stop
15340 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62   the operation b
15350 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69  ut leave all pri
15360 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  or changes */.#d
15370 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20  efine OE_Ignore 
15380 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20    4   /* Ignore 
15390 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f  the error. Do no
153a0 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20  t do the INSERT 
153b0 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  or UPDATE */.#de
153c0 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20  fine OE_Replace 
153d0 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65   5   /* Delete e
153e0 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20  xisting record, 
153f0 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f  then do INSERT o
15400 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
15410 69 6e 65 20 4f 45 5f 55 70 64 61 74 65 20 20 20  ine OE_Update   
15420 36 20 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 61  6   /* Process a
15430 73 20 61 20 44 4f 20 55 50 44 41 54 45 20 69 6e  s a DO UPDATE in
15440 20 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 23 64   an upsert */.#d
15450 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63  efine OE_Restric
15460 74 20 37 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72  t 7   /* OE_Abor
15470 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c  t for IMMEDIATE,
15480 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72   OE_Rollback for
15490 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65   DEFERRED */.#de
154a0 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20  fine OE_SetNull 
154b0 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   8   /* Set the 
154c0 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
154d0 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  e to NULL */.#de
154e0 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20  fine OE_SetDflt 
154f0 20 39 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   9   /* Set the 
15500 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
15510 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74  e to its default
15520 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43   */.#define OE_C
15530 61 73 63 61 64 65 20 20 31 30 20 20 2f 2a 20 43  ascade  10  /* C
15540 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67  ascade the chang
15550 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  es */.#define OE
15560 5f 44 65 66 61 75 6c 74 20 20 31 31 20 20 2f 2a  _Default  11  /*
15570 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65   Do whatever the
15580 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20   default action 
15590 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e  is */.../*.** An
155a0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
155b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
155c0 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61  ture is passed a
155d0 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  s the first.** a
155e0 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74  rgument to sqlit
155f0 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65  e3VdbeKeyCompare
15600 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20   and is used to 
15610 63 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a 2a 20 63  control the.** c
15620 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65  omparison of the
15630 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e   two index keys.
15640 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
15650 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e   aSortOrder[] an
15660 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e  d aColl[] have n
15670 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20  Field+1 slots.  
15680 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69  There.** are nFi
15690 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68  eld slots for th
156a0 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20  e columns of an 
156b0 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65  index then one e
156c0 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72  xtra slot.** for
156d0 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68   the rowid at th
156e0 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
156f0 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32   KeyInfo {.  u32
15700 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
15710 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
15720 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73  ferences to this
15730 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20   KeyInfo object 
15740 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
15750 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
15760 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20   encoding - one 
15770 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54  of the SQLITE_UT
15780 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  F* values */.  u
15790 31 36 20 6e 4b 65 79 46 69 65 6c 64 3b 20 20 20  16 nKeyField;   
157a0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
157b0 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  key columns in t
157c0 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31  he index */.  u1
157d0 36 20 6e 41 6c 6c 46 69 65 6c 64 3b 20 20 20 20  6 nAllField;    
157e0 20 20 2f 2a 20 54 6f 74 61 6c 20 63 6f 6c 75 6d    /* Total colum
157f0 6e 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6b 65  ns, including ke
15800 79 20 70 6c 75 73 20 6f 74 68 65 72 73 20 2a 2f  y plus others */
15810 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
15820 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
15830 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
15840 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  n */.  u8 *aSort
15850 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 53 6f  Flags;     /* So
15860 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63  rt order for eac
15870 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43  h column. */.  C
15880 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d  ollSeq *aColl[1]
15890 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20  ;  /* Collating 
158a0 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63  sequence for eac
158b0 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65  h term of the ke
158c0 79 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65  y */.};..#define
158d0 20 4b 45 59 49 4e 46 4f 5f 4f 52 44 45 52 5f 44   KEYINFO_ORDER_D
158e0 45 53 43 20 20 20 20 30 78 30 31 0a 23 64 65 66  ESC    0x01.#def
158f0 69 6e 65 20 4b 45 59 49 4e 46 4f 5f 4f 52 44 45  ine KEYINFO_ORDE
15900 52 5f 42 49 47 4e 55 4c 4c 20 30 78 30 32 0a 0a  R_BIGNULL 0x02..
15910 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63  /*.** This objec
15920 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64  t holds a record
15930 20 77 68 69 63 68 20 68 61 73 20 62 65 65 6e 20   which has been 
15940 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20  parsed out into 
15950 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69  individual.** fi
15960 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70 75  elds, for the pu
15970 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67 20  rposes of doing 
15980 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a  a comparison..**
15990 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20  .** A record is 
159a0 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63  an object that c
159b0 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
159c0 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61  ore fields of da
159d0 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61  ta..** Records a
159e0 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  re used to store
159f0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
15a00 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20  a table row and 
15a10 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20  to store.** the 
15a20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e  key of an index.
15a30 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e    A blob encodin
15a40 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73  g of a record is
15a50 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74   created by.** t
15a60 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  he OP_MakeRecord
15a70 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56   opcode of the V
15a80 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73  DBE and is disas
15a90 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a  sembled by the.*
15aa0 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  * OP_Column opco
15ab0 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73  de..**.** An ins
15ac0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62  tance of this ob
15ad0 6a 65 63 74 20 73 65 72 76 65 73 20 61 73 20 61  ject serves as a
15ae0 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e 67   "key" for doing
15af0 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20   a search on.** 
15b00 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65 2e  an index b+tree.
15b10 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68 65   The goal of the
15b20 20 73 65 61 72 63 68 20 69 73 20 74 6f 20 66 69   search is to fi
15b30 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74 68 61  nd the entry tha
15b40 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20 74  t.** is closed t
15b50 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63 72 69  o the key descri
15b60 62 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a 65  bed by this obje
15b70 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63 74  ct.  This object
15b80 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a   might hold.** j
15b90 75 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20  ust a prefix of 
15ba0 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e 75  the key.  The nu
15bb0 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
15bc0 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b  s given by.** pK
15bd0 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a  eyInfo->nField..
15be0 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64  **.** The r1 and
15bf0 20 72 32 20 66 69 65 6c 64 73 20 61 72 65 20 74   r2 fields are t
15c00 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65 74  he values to ret
15c10 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79 20  urn if this key 
15c20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  is less than.** 
15c30 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  or greater than 
15c40 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74 72  a key in the btr
15c50 65 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ee, respectively
15c60 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f 72  .  These are nor
15c70 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20  mally.** -1 and 
15c80 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c  +1 respectively,
15c90 20 62 75 74 20 6d 69 67 68 74 20 62 65 20 69 6e   but might be in
15ca0 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e 64  verted to +1 and
15cb0 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72 65   -1 if the b-tre
15cc0 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43 20  e.** is in DESC 
15cd0 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  order..**.** The
15ce0 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20   key comparison 
15cf0 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61 6c  functions actual
15d00 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c  ly return defaul
15d10 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20 66  t_rc when they f
15d20 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73  ind.** an equals
15d30 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65   comparison.  de
15d40 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20  fault_rc can be 
15d50 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49  -1, 0, or +1.  I
15d60 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d  f there are.** m
15d70 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20  ultiple entries 
15d80 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77 69  in the b-tree wi
15d90 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 20  th the same key 
15da0 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69  (when only looki
15db0 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69 72  ng.** at the fir
15dc0 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69  st pKeyInfo->nFi
15dd0 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66 61  elds,) then defa
15de0 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73 65  ult_rc can be se
15df0 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61  t to -1 to.** ca
15e00 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74  use the search t
15e10 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74 20  o find the last 
15e20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20  match, or +1 to 
15e30 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68  cause the search
15e40 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20   to.** find the 
15e50 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a  first match..**.
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 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e 20  will set eqSeen 
15e90 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 79 20  to true if they 
15ea0 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20  ever.** get and 
15eb0 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77 68  equal results wh
15ec0 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 69  en comparing thi
15ed0 73 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 61  s structure to a
15ee0 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e 0a   b-tree record..
15ef0 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74 5f  ** When default_
15f00 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72 63  rc!=0, the searc
15f10 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20 6f  h might end up o
15f20 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d  n the record imm
15f30 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f  ediately.** befo
15f40 72 65 20 74 68 65 20 66 69 72 73 74 20 6d 61 74  re the first mat
15f50 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c  ch or immediatel
15f60 79 20 61 66 74 65 72 20 74 68 65 20 6c 61 73 74  y after the last
15f70 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20   match.  The.** 
15f80 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69 6c  eqSeen field wil
15f90 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65 74 68  l indicate wheth
15fa0 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61  er or not an exa
15fb0 63 74 20 6d 61 74 63 68 20 65 78 69 73 74 73 20  ct match exists 
15fc0 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65  in the.** b-tree
15fd0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61  ..*/.struct Unpa
15fe0 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b  ckedRecord {.  K
15ff0 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
16000 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20  ;  /* Collation 
16010 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69  and sort-order i
16020 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20  nformation */.  
16030 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20  Mem *aMem;      
16040 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f      /* Values */
16050 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20  .  u16 nField;  
16060 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16070 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
16080 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64  pMem[] */.  i8 d
16090 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20  efault_rc;      
160a0 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65  /* Comparison re
160b0 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65  sult if keys are
160c0 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65   equal */.  u8 e
160d0 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
160e0 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65  /* Error detecte
160f0 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70  d by xRecordComp
16100 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20  are (CORRUPT or 
16110 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72  NOMEM) */.  i8 r
16120 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1;              
16130 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
16140 72 6e 20 69 66 20 28 6c 68 73 20 3c 20 72 68 73  rn if (lhs < rhs
16150 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20 20  ) */.  i8 r2;   
16160 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
16170 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66  lue to return if
16180 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a   (lhs > rhs) */.
16190 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20 20    u8 eqSeen;    
161a0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
161b0 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f 6d   an equality com
161c0 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65 6e  parison has been
161d0 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a   seen */.};.../*
161e0 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64  .** Each SQL ind
161f0 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  ex is represente
16200 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61  d in memory by a
16210 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
16220 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
16230 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
16240 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  The columns of t
16250 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72  he table that ar
16260 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  e to be indexed 
16270 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a  are described.**
16280 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e   by the aiColumn
16290 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73  [] field of this
162a0 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72   structure.  For
162b0 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73   example, suppos
162c0 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65  e.** we have the
162d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65   following table
162e0 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a   and index:.**.*
162f0 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
16300 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63  LE Ex1(c1 int, c
16310 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b  2 int, c3 text);
16320 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 49  .**     CREATE I
16330 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28  NDEX Ex2 ON Ex1(
16340 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e  c3,c1);.**.** In
16350 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63   the Table struc
16360 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 20  ture describing 
16370 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63  Ex1, nCol==3 bec
16380 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a  ause there are.*
16390 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20  * three columns 
163a0 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
163b0 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72 75  n the Index stru
163c0 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
163d0 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e  .** Ex2, nColumn
163e0 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74  ==2 since 2 of t
163f0 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  he 3 columns of 
16400 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e  Ex1 are indexed.
16410 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66  .** The value of
16420 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c   aiColumn is {2,
16430 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30   0}.  aiColumn[0
16440 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68 65  ]==2 because the
16450 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e  .** first column
16460 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28   to be indexed (
16470 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78  c3) has an index
16480 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f   of 2 in Ex1.aCo
16490 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f  l[]..** The seco
164a0 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20  nd column to be 
164b0 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73  indexed (c1) has
164c0 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69   an index of 0 i
164d0 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c  n.** Ex1.aCol[],
164e0 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c   hence Ex2.aiCol
164f0 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a  umn[1]==0..**.**
16500 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72   The Index.onErr
16510 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69  or field determi
16520 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e  nes whether or n
16530 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63  ot the indexed c
16540 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62  olumns.** must b
16550 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61  e unique and wha
16560 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20  t to do if they 
16570 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49  are not.  When I
16580 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f  ndex.onError=OE_
16590 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e  None,.** it mean
165a0 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20  s this is not a 
165b0 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f  unique index.  O
165c0 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61  therwise it is a
165d0 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a   unique index.**
165e0 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f   and the value o
165f0 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20  f Index.onError 
16600 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69  indicate the whi
16610 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  ch conflict reso
16620 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69  lution.** algori
16630 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68  thm to employ wh
16640 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70  enever an attemp
16650 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73  t is made to ins
16660 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65  ert a non-unique
16670 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a  .** element..**.
16680 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e 67  ** While parsing
16690 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   a CREATE TABLE 
166a0 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  or CREATE INDEX 
166b0 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64  statement in ord
166c0 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74  er to.** generat
166d0 65 20 56 44 42 45 20 63 6f 64 65 20 28 61 73 20  e VDBE code (as 
166e0 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73 69  opposed to parsi
166f0 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d  ng one read from
16700 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74 65   an sqlite_maste
16710 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70 61  r.** table as pa
16720 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61 6e  rt of parsing an
16730 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61   existing databa
16740 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61 6e  se schema), tran
16750 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a  sient instances.
16760 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
16770 74 75 72 65 20 6d 61 79 20 62 65 20 63 72 65 61  ture may be crea
16780 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ted. In this cas
16790 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d  e the Index.tnum
167a0 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20   variable is.** 
167b0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
167c0 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 56  e address of a V
167d0 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c  DBE instruction,
167e0 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 20   not a database 
167f0 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28  page.** number (
16800 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20  it cannot - the 
16810 64 61 74 61 62 61 73 65 20 70 61 67 65 20 69 73  database page is
16820 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20 75   not allocated u
16830 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a  ntil the VDBE.**
16840 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65 63   program is exec
16850 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76 65  uted). See conve
16860 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69 64  rtToWithoutRowid
16870 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74 61  Table() for deta
16880 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ils..*/.struct I
16890 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ndex {.  char *z
168a0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
168b0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
168c0 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36  s index */.  i16
168d0 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20   *aiColumn;     
168e0 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63        /* Which c
168f0 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
16900 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20  by this index.  
16910 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f  1st is 0 */.  Lo
16920 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73  gEst *aiRowLogEs
16930 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41  t;     /* From A
16940 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77  NALYZE: Est. row
16950 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61  s selected by ea
16960 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54  ch column */.  T
16970 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20  able *pTable;   
16980 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53          /* The S
16990 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  QL table being i
169a0 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72  ndexed */.  char
169b0 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
169c0 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
169d0 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
169e0 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
169f0 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  umn */.  Index *
16a00 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
16a10 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e    /* The next in
16a20 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77  dex associated w
16a30 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62  ith the same tab
16a40 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  le */.  Schema *
16a50 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
16a60 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
16a70 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78  ining this index
16a80 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
16a90 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  rder;          /
16aa0 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * for each colum
16ab0 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46  n: True==DESC, F
16ac0 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63  alse==ASC */.  c
16ad0 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f  onst char **azCo
16ae0 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79  ll;     /* Array
16af0 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65   of collation se
16b00 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72  quence names for
16b10 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72   index */.  Expr
16b20 20 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b   *pPartIdxWhere;
16b30 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c       /* WHERE cl
16b40 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c  ause for partial
16b50 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45 78   indices */.  Ex
16b60 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70 72  prList *aColExpr
16b70 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  ;      /* Column
16b80 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
16b90 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20    int tnum;     
16ba0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42             /* DB
16bb0 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67   Page containing
16bc0 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e   root of this in
16bd0 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  dex */.  LogEst 
16be0 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20  szIdxRow;       
16bf0 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61    /* Estimated a
16c00 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20  verage row size 
16c10 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31  in bytes */.  u1
16c20 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20  6 nKeyCol;      
16c30 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16c40 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d   of columns form
16c50 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20  ing the key */. 
16c60 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   u16 nColumn;   
16c70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
16c80 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73  ber of columns s
16c90 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64  tored in the ind
16ca0 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72  ex */.  u8 onErr
16cb0 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  or;             
16cc0 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45   /* OE_Abort, OE
16cd0 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c  _Ignore, OE_Repl
16ce0 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20  ace, or OE_None 
16cf0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64  */.  unsigned id
16d00 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a  xType:2;      /*
16d10 20 30 3a 4e 6f 72 6d 61 6c 20 31 3a 55 4e 49 51   0:Normal 1:UNIQ
16d20 55 45 2c 20 32 3a 50 52 49 4d 41 52 59 20 4b 45  UE, 2:PRIMARY KE
16d30 59 2c 20 33 3a 49 50 4b 20 2a 2f 0a 20 20 75 6e  Y, 3:IPK */.  un
16d40 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65  signed bUnordere
16d50 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68  d:1;   /* Use th
16d60 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20  is index for == 
16d70 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e  or IN queries on
16d80 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ly */.  unsigned
16d90 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20   uniqNotNull:1; 
16da0 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51   /* True if UNIQ
16db0 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20  UE and NOT NULL 
16dc0 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  for all columns 
16dd0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73  */.  unsigned is
16de0 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a  Resized:1;    /*
16df0 20 54 72 75 65 20 69 66 20 72 65 73 69 7a 65 49   True if resizeI
16e00 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68 61 73  ndexObject() has
16e10 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a   been called */.
16e20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 76    unsigned isCov
16e30 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72  ering:1;   /* Tr
16e40 75 65 20 69 66 20 74 68 69 73 20 69 73 20 61 20  ue if this is a 
16e50 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 2a  covering index *
16e60 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53  /.  unsigned noS
16e70 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20  kipScan:1;   /* 
16e80 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20 75 73  Do not try to us
16e90 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66 20 74  e skip-scan if t
16ea0 72 75 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  rue */.  unsigne
16eb0 64 20 68 61 73 53 74 61 74 31 3a 31 3b 20 20 20  d hasStat1:1;   
16ec0 20 20 2f 2a 20 61 69 52 6f 77 4c 6f 67 45 73 74    /* aiRowLogEst
16ed0 20 76 61 6c 75 65 73 20 63 6f 6d 65 20 66 72 6f   values come fro
16ee0 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a  m sqlite_stat1 *
16ef0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 4e 6f  /.  unsigned bNo
16f00 51 75 65 72 79 3a 31 3b 20 20 20 20 20 2f 2a 20  Query:1;     /* 
16f10 44 6f 20 6e 6f 74 20 75 73 65 20 74 68 69 73 20  Do not use this 
16f20 69 6e 64 65 78 20 74 6f 20 6f 70 74 69 6d 69 7a  index to optimiz
16f30 65 20 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75  e queries */.  u
16f40 6e 73 69 67 6e 65 64 20 62 41 73 63 4b 65 79 42  nsigned bAscKeyB
16f50 75 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  ug:1;   /* True 
16f60 69 66 20 74 68 65 20 62 62 61 37 62 36 39 66 39  if the bba7b69f9
16f70 38 34 39 62 35 62 66 20 62 75 67 20 61 70 70 6c  849b5bf bug appl
16f80 69 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ies */.#ifdef SQ
16f90 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
16fa0 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b  4.  int nSample;
16fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16fc0 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  Number of elemen
16fd0 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20  ts in aSample[] 
16fe0 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  */.  int nSample
16ff0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Col;          /*
17000 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61   Size of IndexSa
17010 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20  mple.anEq[] and 
17020 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63  so on */.  tRowc
17030 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20  nt *aAvgEq;     
17040 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e      /* Average n
17050 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65  Eq values for ke
17060 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c  ys not in aSampl
17070 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70  e */.  IndexSamp
17080 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20  le *aSample;    
17090 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68  /* Samples of th
170a0 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20  e left-most key 
170b0 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69  */.  tRowcnt *ai
170c0 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a  RowEst;       /*
170d0 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63   Non-logarithmic
170e0 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72 20   stat1 data for 
170f0 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
17100 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30  tRowcnt nRowEst0
17110 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  ;        /* Non-
17120 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62  logarithmic numb
17130 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
17140 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69  e index */.#endi
17150 66 0a 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 4e  f.  Bitmask colN
17160 6f 74 49 64 78 65 64 3b 20 20 20 20 20 2f 2a 20  otIdxed;     /* 
17170 30 20 66 6f 72 20 75 6e 69 6e 64 65 78 65 64 20  0 for unindexed 
17180 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 54 61 62 20  columns in pTab 
17190 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
171a0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
171b0 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f  Index.idxType.*/
171c0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
171d0 49 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20  IDXTYPE_APPDEF  
171e0 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74      0   /* Creat
171f0 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  ed using CREATE 
17200 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65  INDEX */.#define
17210 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
17220 55 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20  UNIQUE      1   
17230 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20  /* Implements a 
17240 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
17250 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
17260 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
17270 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49  ARYKEY  2   /* I
17280 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
17290 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20  Y for the table 
172a0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
172b0 45 5f 49 44 58 54 59 50 45 5f 49 50 4b 20 20 20  E_IDXTYPE_IPK   
172c0 20 20 20 20 20 20 33 20 20 20 2f 2a 20 49 4e 54        3   /* INT
172d0 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
172e0 20 69 6e 64 65 78 20 2a 2f 0a 0a 2f 2a 20 52 65   index */../* Re
172f0 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
17300 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41 52  ex X is a PRIMAR
17310 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23  Y KEY index */.#
17320 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79  define IsPrimary
17330 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28 58  KeyIndex(X)  ((X
17340 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49  )->idxType==SQLI
17350 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
17360 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72  RYKEY)../* Retur
17370 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
17380 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e  X is a UNIQUE in
17390 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
173a0 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20  sUniqueIndex(X) 
173b0 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72       ((X)->onErr
173c0 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a  or!=OE_None)../*
173d0 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c   The Index.aiCol
173e0 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72 65  umn[] values are
173f0 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69   normally positi
17400 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74  ve integer.  But
17410 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73 6f  .** there are so
17420 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75  me negative valu
17430 65 73 20 74 68 61 74 20 68 61 76 65 20 73 70 65  es that have spe
17440 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f  cial meaning:.*/
17450 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49  .#define XN_ROWI
17460 44 20 20 20 20 20 28 2d 31 29 20 20 20 20 20 2f  D     (-1)     /
17470 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  * Indexed column
17480 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f   is the rowid */
17490 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50 52  .#define XN_EXPR
174a0 20 20 20 20 20 20 28 2d 32 29 20 20 20 20 20 2f        (-2)     /
174b0 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  * Indexed column
174c0 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f   is an expressio
174d0 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  n */../*.** Each
174e0 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69   sample stored i
174f0 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
17500 74 34 20 74 61 62 6c 65 20 69 73 20 72 65 70 72  t4 table is repr
17510 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
17520 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72  y.** using a str
17530 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74  ucture of this t
17540 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65  ype.  See docume
17550 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74  ntation at the t
17560 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61  op of the.** ana
17570 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69  lyze.c source fi
17580 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  le for additiona
17590 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
175a0 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61  /.struct IndexSa
175b0 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70  mple {.  void *p
175c0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  ;          /* Po
175d0 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64  inter to sampled
175e0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
175f0 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   n;            /
17600 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64  * Size of record
17610 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74   in bytes */.  t
17620 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20  Rowcnt *anEq;   
17630 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
17640 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68  of rows where th
17650 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69  e key equals thi
17660 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
17670 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20  owcnt *anLt;    
17680 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
17690 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79  f rows where key
176a0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
176b0 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
176c0 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20  Rowcnt *anDLt;  
176d0 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
176e0 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73  of distinct keys
176f0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
17700 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sample */.};../*
17710 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
17720 75 65 73 20 74 6f 20 75 73 65 20 77 69 74 68 69  ues to use withi
17730 6e 20 74 68 65 20 66 6c 61 67 73 20 61 72 67 75  n the flags argu
17740 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 47  ment to sqlite3G
17750 65 74 54 6f 6b 65 6e 28 29 2e 0a 2a 2f 0a 23 64  etToken()..*/.#d
17760 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 4f 4b  efine SQLITE_TOK
17770 45 4e 5f 51 55 4f 54 45 44 20 20 20 20 30 78 31  EN_QUOTED    0x1
17780 20 2f 2a 20 54 6f 6b 65 6e 20 69 73 20 61 20 71   /* Token is a q
17790 75 6f 74 65 64 20 69 64 65 6e 74 69 66 69 65 72  uoted identifier
177a0 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  . */.#define SQL
177b0 49 54 45 5f 54 4f 4b 45 4e 5f 4b 45 59 57 4f 52  ITE_TOKEN_KEYWOR
177c0 44 20 20 20 30 78 32 20 2f 2a 20 54 6f 6b 65 6e  D   0x2 /* Token
177d0 20 69 73 20 61 20 6b 65 79 77 6f 72 64 2e 20 2a   is a keyword. *
177e0 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f  /../*.** Each to
177f0 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f  ken coming out o
17800 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61  f the lexer is a
17810 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a  n instance of.**
17820 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
17830 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73    Tokens are als
17840 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f  o used as part o
17850 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e  f an expression.
17860 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72  .**.** The memor
17870 79 20 74 68 61 74 20 22 7a 22 20 70 6f 69 6e 74  y that "z" point
17880 73 20 74 6f 20 69 73 20 6f 77 6e 65 64 20 62 79  s to is owned by
17890 20 6f 74 68 65 72 20 6f 62 6a 65 63 74 73 2e 20   other objects. 
178a0 20 54 61 6b 65 20 63 61 72 65 0a 2a 2a 20 74 68   Take care.** th
178b0 61 74 20 74 68 65 20 6f 77 6e 65 72 20 6f 66 20  at the owner of 
178c0 74 68 65 20 22 7a 22 20 73 74 72 69 6e 67 20 64  the "z" string d
178d0 6f 65 73 20 6e 6f 74 20 64 65 61 6c 6c 6f 63 61  oes not dealloca
178e0 74 65 20 74 68 65 20 73 74 72 69 6e 67 20 62 65  te the string be
178f0 66 6f 72 65 0a 2a 2a 20 74 68 65 20 54 6f 6b 65  fore.** the Toke
17900 6e 20 67 6f 65 73 20 6f 75 74 20 6f 66 20 73 63  n goes out of sc
17910 6f 70 65 21 20 20 56 65 72 79 20 6f 66 74 65 6e  ope!  Very often
17920 2c 20 74 68 65 20 22 7a 22 20 70 6f 69 6e 74 73  , the "z" points
17930 20 74 6f 20 73 6f 6d 65 20 70 6c 61 63 65 0a 2a   to some place.*
17940 2a 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20  * in the middle 
17950 6f 66 20 74 68 65 20 50 61 72 73 65 2e 7a 53 71  of the Parse.zSq
17960 6c 20 74 65 78 74 2e 20 20 42 75 74 20 69 74 20  l text.  But it 
17970 6d 69 67 68 74 20 61 6c 73 6f 20 70 6f 69 6e 74  might also point
17980 20 74 6f 20 61 0a 2a 2a 20 73 74 61 74 69 63 20   to a.** static 
17990 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63  string..*/.struc
179a0 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73  t Token {.  cons
179b0 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f  t char *z;     /
179c0 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f  * Text of the to
179d0 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74  ken.  Not NULL-t
179e0 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20  erminated! */.  
179f0 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20  unsigned int n; 
17a00 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17a10 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68  characters in th
17a20 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a  is token */.};..
17a30 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
17a40 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
17a50 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
17a60 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
17a70 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
17a80 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54  ode for a SELECT
17a90 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
17aa0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
17ab0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70  ns..**.** If Exp
17ac0 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c  r.op==TK_AGG_COL
17ad0 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55  UMN or TK_AGG_FU
17ae0 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72  NCTION then Expr
17af0 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a  .pAggInfo is a.*
17b00 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  * pointer to thi
17b10 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  s structure.  Th
17b20 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66  e Expr.iColumn f
17b30 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65  ield is the inde
17b40 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  x in.** AggInfo.
17b50 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66  aCol[] or AggInf
17b60 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66  o.aFunc[] of inf
17b70 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
17b80 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
17b90 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64  ode for that nod
17ba0 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f  e..**.** AggInfo
17bb0 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67  .pGroupBy and Ag
17bc0 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70  gInfo.aFunc.pExp
17bd0 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64  r point to field
17be0 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20  s within the.** 
17bf0 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20  original Select 
17c00 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
17c10 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c  escribes the SEL
17c20 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
17c30 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20  These.** fields 
17c40 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62  do not need to b
17c50 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61  e freed when dea
17c60 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67  llocating the Ag
17c70 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e  gInfo structure.
17c80 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e  .*/.struct AggIn
17c90 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74  fo {.  u8 direct
17ca0 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Mode;          /
17cb0 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69  * Direct renderi
17cc0 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61  ng mode means ta
17cd0 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79  ke data directly
17ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17cf0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72             ** fr
17d00 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73  om source tables
17d10 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f   rather than fro
17d20 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a  m accumulators *
17d30 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e  /.  u8 useSortin
17d40 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49  gIdx;       /* I
17d50 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72  n direct mode, r
17d60 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72  eference the sor
17d70 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65  ting index rathe
17d80 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
17d90 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
17da0 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  han the source t
17db0 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  able */.  int so
17dc0 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
17dd0 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
17de0 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e  er of the sortin
17df0 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  g index */.  int
17e00 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b   sortingIdxPTab;
17e10 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
17e20 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d  umber of pseudo-
17e30 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  table */.  int n
17e40 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20  SortingColumn;  
17e50 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17e60 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73  columns in the s
17e70 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
17e80 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52    int mnReg, mxR
17e90 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e  eg;       /* Ran
17ea0 67 65 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  ge of registers 
17eb0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43  allocated for aC
17ec0 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a  ol and aFunc */.
17ed0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
17ee0 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65  upBy;     /* The
17ef0 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65   group by clause
17f00 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
17f10 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a  Info_col {    /*
17f20 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   For each column
17f30 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20   used in source 
17f40 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61  tables */.    Ta
17f50 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
17f60 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65         /* Source
17f70 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
17f80 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
17f90 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
17fa0 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
17fb0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
17fc0 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20     int iColumn; 
17fd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
17fe0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74  olumn number wit
17ff0 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  hin the source t
18000 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
18010 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20  iSorterColumn;  
18020 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
18030 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72  umber in the sor
18040 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
18050 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
18060 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
18070 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
18080 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
18090 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78  ulator */.    Ex
180a0 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
180b0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72         /* The or
180c0 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f  iginal expressio
180d0 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a  n */.  } *aCol;.
180e0 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20    int nColumn;  
180f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
18100 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72  ber of used entr
18110 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f  ies in aCol[] */
18120 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61  .  int nAccumula
18130 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  tor;       /* Nu
18140 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
18150 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67  that show throug
18160 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e  h to the output.
18170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18180 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64             ** Ad
18190 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73  ditional columns
181a0 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61   are used only a
181b0 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  s parameters to.
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181d0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67            ** agg
181e0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
181f0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
18200 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a  Info_func {   /*
18210 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67   For each aggreg
18220 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ate function */.
18230 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18250 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64  Expression encod
18260 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ing the function
18270 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20   */.    FuncDef 
18280 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20  *pFunc;         
18290 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74   /* The aggregat
182a0 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65  e function imple
182b0 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  mentation */.   
182c0 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
182d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
182e0 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
182f0 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
18300 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74  lator */.    int
18310 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20   iDistinct;     
18320 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72        /* Ephemer
18330 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f  al table used to
18340 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43   enforce DISTINC
18350 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b  T */.  } *aFunc;
18360 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20  .  int nFunc;   
18370 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
18380 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
18390 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b  in aFunc[] */.};
183a0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
183b0 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20  type ynVar is a 
183c0 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20  signed integer, 
183d0 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72  either 16-bit or
183e0 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61   32-bit..** Usua
183f0 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74  lly it is 16-bit
18400 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54  s.  But if SQLIT
18410 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
18420 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72  UMBER is greater
18430 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77  .** than 32767 w
18440 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69  e have to make i
18450 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69  t 32-bit.  16-bi
18460 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62  t is preferred b
18470 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65  ecause.** it use
18480 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e  s less memory in
18490 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74   the Expr object
184a0 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67  , which is a big
184b0 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20   memory user.** 
184c0 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  in systems with 
184d0 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64  lots of prepared
184e0 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e   statements.  An
184f0 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f  d few applicatio
18500 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20  ns.** need more 
18510 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72  than about 10 or
18520 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20   20 variables.  
18530 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65  But some extreme
18540 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74   users want.** t
18550 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20  o have prepared 
18560 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20  statements with 
18570 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61  over 32767 varia
18580 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68  bles, and for th
18590 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e  em.** the option
185a0 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61   is available (a
185b0 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e  t compile-time).
185c0 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
185d0 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
185e0 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65  ER<=32767.typede
185f0 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c  f i16 ynVar;.#el
18600 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79  se.typedef int y
18610 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  nVar;.#endif../*
18620 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66  .** Each node of
18630 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
18640 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  n the parse tree
18650 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   is an instance.
18660 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
18670 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  ture..**.** Expr
18680 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64  .op is the opcod
18690 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70  e. The integer p
186a0 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65  arser token code
186b0 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20  s are reused.** 
186c0 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e  as opcodes here.
186d0 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68   For example, th
186e0 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73  e parser defines
186f0 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20   TK_GE to be an 
18700 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20  integer.** code 
18710 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
18720 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20   ">=" operator. 
18730 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65  This same intege
18740 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64  r code is reused
18750 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74  .** to represent
18760 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61   the greater-tha
18770 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70  n-or-equal-to op
18780 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78  erator in the ex
18790 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65  pression.** tree
187a0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
187b0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
187c0 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f  SQL literal (TK_
187d0 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41  INTEGER, TK_FLOA
187e0 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f  T, TK_BLOB,.** o
187f0 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68  r TK_STRING), th
18800 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
18810 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20  ntains the text 
18820 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72  of the SQL liter
18830 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78  al. If.** the ex
18840 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61  pression is a va
18850 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41  riable (TK_VARIA
18860 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  BLE), then Expr.
18870 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
18880 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e  he.** variable n
18890 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66  ame. Finally, if
188a0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
188b0 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
188c0 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29  on (TK_FUNCTION)
188d0 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74  ,.** then Expr.t
188e0 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
188f0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  e name of the fu
18900 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78  nction..**.** Ex
18910 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78  pr.pRight and Ex
18920 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65  pr.pLeft are the
18930 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20   left and right 
18940 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  subexpressions o
18950 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70  f a.** binary op
18960 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f  erator. Either o
18970 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55  r both may be NU
18980 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78  LL..**.** Expr.x
18990 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74  .pList is a list
189a0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66   of arguments if
189b0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
189c0 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
189d0 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78  on,.** a CASE ex
189e0 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49  pression or an I
189f0 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  N expression of 
18a00 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20  the form "<lhs> 
18a10 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29  IN (<y>, <z>...)
18a20 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65  "..** Expr.x.pSe
18a30 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20  lect is used if 
18a40 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
18a50 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f  s a sub-select o
18a60 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
18a70 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22  of.** the form "
18a80 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54  <lhs> IN (SELECT
18a90 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45   ...)". If the E
18aa0 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20  P_xIsSelect bit 
18ab0 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a  is set in the.**
18ac0 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
18ad0 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53  , then Expr.x.pS
18ae0 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20  elect is valid. 
18af0 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e  Otherwise, Expr.
18b00 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61  x.pList is.** va
18b10 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78  lid..**.** An ex
18b20 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20  pression of the 
18b30 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44  form ID or ID.ID
18b40 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c   refers to a col
18b50 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a  umn in a table..
18b60 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70 72  ** For such expr
18b70 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70  essions, Expr.op
18b80 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f   is set to TK_CO
18b90 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54  LUMN and Expr.iT
18ba0 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69  able is.** the i
18bb0 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75  nteger cursor nu
18bc0 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20 63  mber of a VDBE c
18bd0 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74  ursor pointing t
18be0 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64  o that table and
18bf0 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  .** Expr.iColumn
18c00 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e   is the column n
18c10 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73 70  umber for the sp
18c20 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20  ecific column.  
18c30 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73  If the.** expres
18c40 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20  sion is used as 
18c50 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61  a result in an a
18c60 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c  ggregate SELECT,
18c70 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c   then the.** val
18c80 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65  ue is also store
18c90 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41  d in the Expr.iA
18ca0 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  gg column in the
18cb0 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74 68   aggregate so th
18cc0 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20  at.** it can be 
18cd0 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20 61  accessed after a
18ce0 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61 72  ll aggregates ar
18cf0 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a  e computed..**.*
18d00 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
18d10 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e  ion is an unboun
18d20 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65  d variable marke
18d30 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61  r (a question ma
18d40 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20  rk.** character 
18d50 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69  '?' in the origi
18d60 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68  nal SQL) then th
18d70 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f  e Expr.iTable ho
18d80 6c 64 73 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a  lds the index.**
18d90 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74   number for that
18da0 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a   variable..**.**
18db0 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
18dc0 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72 79  on is a subquery
18dd0 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75   then Expr.iColu
18de0 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  mn holds an inte
18df0 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ger.** register 
18e00 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e  number containin
18e10 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  g the result of 
18e20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20 49  the subquery.  I
18e30 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72  f the.** subquer
18e40 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61  y gives a consta
18e50 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20  nt result, then 
18e60 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49  iTable is -1.  I
18e70 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a  f the subquery.*
18e80 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65 72  * gives a differ
18e90 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64 69  ent answer at di
18ea0 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75  fferent times du
18eb0 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70  ring statement p
18ec0 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65  rocessing.** the
18ed0 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65 20  n iTable is the 
18ee0 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75 62  address of a sub
18ef0 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d  routine that com
18f00 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75 65  putes the subque
18f10 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ry..**.** If the
18f20 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70 65   Expr is of type
18f30 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20   OP_Column, and 
18f40 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73 20  the table it is 
18f50 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a  selecting from.*
18f60 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c  * is a disk tabl
18f70 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22  e or the "old.*"
18f80 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74   pseudo-table, t
18f90 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20  hen pTab points 
18fa0 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  to the.** corres
18fb0 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65  ponding table de
18fc0 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  finition..**.** 
18fd0 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53  ALLOCATION NOTES
18fe0 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a  :.**.** Expr obj
18ff0 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c  ects can use a l
19000 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61  ot of memory spa
19010 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 73  ce in database s
19020 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65  chema.  To.** he
19030 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79  lp reduce memory
19040 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73   requirements, s
19050 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72  ometimes an Expr
19060 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a   object will be.
19070 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41  ** truncated.  A
19080 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68 65  nd to reduce the
19090 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   number of memor
190a0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73  y allocations, s
190b0 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20  ometimes.** two 
190c0 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a  or more Expr obj
190d0 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f  ects will be sto
190e0 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20  red in a single 
190f0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
19100 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77  n,.** together w
19110 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20  ith Expr.zToken 
19120 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49  strings..**.** I
19130 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
19140 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   and EP_TokenOnl
19150 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20  y flags are set 
19160 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20  when.** an Expr 
19170 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61  object is trunca
19180 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65  ted.  When EP_Re
19190 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74 68  duced is set, th
191a0 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68  en all.** the ch
191b0 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ild Expr objects
191c0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65   in the Expr.pLe
191d0 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67  ft and Expr.pRig
191e0 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61  ht subtrees.** a
191f0 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  re contained wit
19200 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d  hin the same mem
19210 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  ory allocation. 
19220 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20   Note, however, 
19230 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74  that.** the subt
19240 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70  rees in Expr.x.p
19250 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70  List or Expr.x.p
19260 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79  Select are alway
19270 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20  s separately.** 
19280 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72  allocated, regar
19290 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
192a0 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63   or not EP_Reduc
192b0 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74  ed is set..*/.st
192c0 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38  ruct Expr {.  u8
192d0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
192e0 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f       /* Operatio
192f0 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74  n performed by t
19300 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68  his node */.  ch
19310 61 72 20 61 66 66 45 78 70 72 3b 20 20 20 20 20  ar affExpr;     
19320 20 20 20 20 20 2f 2a 20 61 66 66 69 6e 69 74 79       /* affinity
19330 2c 20 6f 72 20 52 41 49 53 45 20 74 79 70 65 20  , or RAISE type 
19340 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20  */.  u32 flags; 
19350 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
19360 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45  arious flags.  E
19370 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  P_* See below */
19380 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
19390 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20  har *zToken;    
193a0 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76        /* Token v
193b0 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69  alue. Zero termi
193c0 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74  nated and dequot
193d0 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56  ed */.    int iV
193e0 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20  alue;           
193f0 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65   /* Non-negative
19400 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
19410 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f  f EP_IntValue */
19420 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66  .  } u;..  /* If
19430 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
19440 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  y flag is set in
19450 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
19460 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
19470 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
19480 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
19490 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
194a0 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
194b0 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
194c0 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
194d0 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
194e0 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a  or malfunction..
194f0 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
19500 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19510 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19520 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19530 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72  *******/..  Expr
19540 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20   *pLeft;        
19550 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f     /* Left subno
19560 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52  de */.  Expr *pR
19570 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f  ight;          /
19580 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20  * Right subnode 
19590 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
195a0 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74   ExprList *pList
195b0 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e  ;     /* op = IN
195c0 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
195d0 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e  , CASE, FUNCTION
195e0 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20  , BETWEEN */.   
195f0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
19600 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53  ;     /* EP_xIsS
19610 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49  elect and op = I
19620 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
19630 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f  T */.  } x;..  /
19640 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
19650 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ced flag is set 
19660 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
19670 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
19680 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
19690 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
196a0 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
196b0 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
196c0 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
196d0 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
196e0 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
196f0 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
19700 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
19710 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19720 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19730 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19740 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20  *********/..#if 
19750 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
19760 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48  DEPTH>0.  int nH
19770 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
19780 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68   /* Height of th
19790 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79  e tree headed by
197a0 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65   this node */.#e
197b0 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c  ndif.  int iTabl
197c0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
197d0 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73   TK_COLUMN: curs
197e0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62  or number of tab
197f0 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d  le holding colum
19800 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
19810 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
19820 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73  _REGISTER: regis
19830 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20  ter number.     
19840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19850 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45      ** TK_TRIGGE
19860 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d  R: 1 -> new, 0 -
19870 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20  > old.          
19880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19890 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20  * EP_Unlikely:  
198a0 31 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20  134217728 times 
198b0 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20  likelihood.     
198c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198d0 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54      ** TK_SELECT
198e0 5f 43 4f 4c 55 4d 4e 3a 20 4e 75 6d 62 65 72 20  _COLUMN: Number 
198f0 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 6e 20 74 68  of columns on th
19900 65 20 4c 48 53 0a 20 20 20 20 20 20 20 20 20 20  e LHS.          
19910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19920 2a 20 54 4b 5f 53 45 4c 45 43 54 3a 20 31 73 74  * TK_SELECT: 1st
19930 20 72 65 67 69 73 74 65 72 20 6f 66 20 72 65 73   register of res
19940 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20  ult vector */.  
19950 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20  ynVar iColumn;  
19960 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
19970 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  UMN: column inde
19980 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64  x.  -1 for rowid
19990 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
199a0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
199b0 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61  _VARIABLE: varia
199c0 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61  ble number (alwa
199d0 79 73 20 3e 3d 20 31 29 2e 0a 20 20 20 20 20 20  ys >= 1)..      
199e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199f0 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f     ** TK_SELECT_
19a00 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f  COLUMN: column o
19a10 66 20 74 68 65 20 72 65 73 75 6c 74 20 76 65 63  f the result vec
19a20 74 6f 72 20 2a 2f 0a 20 20 69 31 36 20 69 41 67  tor */.  i16 iAg
19a30 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
19a40 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69  /* Which entry i
19a50 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c  n pAggInfo->aCol
19a60 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20  [] or ->aFunc[] 
19a70 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a  */.  i16 iRightJ
19a80 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49  oinTable;   /* I
19a90 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74  f EP_FromJoin, t
19aa0 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f  he right table o
19ab0 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20  f the join */.  
19ac0 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20  u8 op2;         
19ad0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47         /* TK_REG
19ae0 49 53 54 45 52 2f 54 4b 5f 54 52 55 54 48 3a 20  ISTER/TK_TRUTH: 
19af0 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f  original value o
19b00 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20  f Expr.op.      
19b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     ** TK_COLUMN:
19b30 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35   the value of p5
19b40 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20   for OP_Column. 
19b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b60 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47          ** TK_AG
19b70 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74  G_FUNCTION: nest
19b80 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41  ing depth */.  A
19b90 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
19ba0 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79  ;     /* Used by
19bb0 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61   TK_AGG_COLUMN a
19bc0 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  nd TK_AGG_FUNCTI
19bd0 4f 4e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ON */.  union {.
19be0 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
19bf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
19c00 5f 43 4f 4c 55 4d 4e 3a 20 54 61 62 6c 65 20 63  _COLUMN: Table c
19c10 6f 6e 74 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e  ontaining column
19c20 2e 20 43 61 6e 20 62 65 20 4e 55 4c 4c 0a 20 20  . Can be NULL.  
19c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c40 20 20 20 20 20 20 20 20 20 2a 2a 20 66 6f 72 20           ** for 
19c50 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 69  a column of an i
19c60 6e 64 65 78 20 6f 6e 20 61 6e 20 65 78 70 72 65  ndex on an expre
19c70 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 57 69 6e  ssion */.    Win
19c80 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20 20 20  dow *pWin;      
19c90 20 20 20 20 2f 2a 20 45 50 5f 57 69 6e 46 75 6e      /* EP_WinFun
19ca0 63 3a 20 57 69 6e 64 6f 77 2f 46 69 6c 74 65 72  c: Window/Filter
19cb0 20 64 65 66 6e 20 66 6f 72 20 61 20 66 75 6e 63   defn for a func
19cc0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 73 74 72 75  tion */.    stru
19cd0 63 74 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  ct {            
19ce0 20 20 20 2f 2a 20 54 4b 5f 49 4e 2c 20 54 4b 5f     /* TK_IN, TK_
19cf0 53 45 4c 45 43 54 2c 20 61 6e 64 20 54 4b 5f 45  SELECT, and TK_E
19d00 58 49 53 54 53 20 2a 2f 0a 20 20 20 20 20 20 69  XISTS */.      i
19d10 6e 74 20 69 41 64 64 72 3b 20 20 20 20 20 20 20  nt iAddr;       
19d20 20 20 20 20 20 20 2f 2a 20 53 75 62 72 6f 75 74        /* Subrout
19d30 69 6e 65 20 65 6e 74 72 79 20 61 64 64 72 65 73  ine entry addres
19d40 73 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 72  s */.      int r
19d50 65 67 52 65 74 75 72 6e 3b 20 20 20 20 20 20 20  egReturn;       
19d60 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 75 73    /* Register us
19d70 65 64 20 74 6f 20 68 6f 6c 64 20 72 65 74 75 72  ed to hold retur
19d80 6e 20 61 64 64 72 65 73 73 20 2a 2f 0a 20 20 20  n address */.   
19d90 20 7d 20 73 75 62 3b 0a 20 20 7d 20 79 3b 0a 7d   } sub;.  } y;.}
19da0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
19db0 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d  lowing are the m
19dc0 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20  eanings of bits 
19dd0 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
19de0 73 20 66 69 65 6c 64 2e 0a 2a 2a 20 56 61 6c 75  s field..** Valu
19df0 65 20 72 65 73 74 72 69 63 74 69 6f 6e 73 3a 0a  e restrictions:.
19e00 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 45  **.**          E
19e10 50 5f 41 67 67 20 3d 3d 20 4e 43 5f 48 61 73 41  P_Agg == NC_HasA
19e20 67 67 20 3d 3d 20 53 46 5f 48 61 73 41 67 67 0a  gg == SF_HasAgg.
19e30 2a 2a 20 20 20 20 20 20 20 20 20 20 45 50 5f 57  **          EP_W
19e40 69 6e 20 3d 3d 20 4e 43 5f 48 61 73 57 69 6e 0a  in == NC_HasWin.
19e50 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72  */.#define EP_Fr
19e60 6f 6d 4a 6f 69 6e 20 20 20 30 78 30 30 30 30 30  omJoin   0x00000
19e70 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20  1 /* Originates 
19e80 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75  in ON/USING clau
19e90 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e  se of outer join
19ea0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
19eb0 69 73 74 69 6e 63 74 20 20 20 30 78 30 30 30 30  istinct   0x0000
19ec0 30 32 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  02 /* Aggregate 
19ed0 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49  function with DI
19ee0 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a  STINCT keyword *
19ef0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 48 61 73  /.#define EP_Has
19f00 46 75 6e 63 20 20 20 20 30 78 30 30 30 30 30 34  Func    0x000004
19f10 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65   /* Contains one
19f20 20 6f 72 20 6d 6f 72 65 20 66 75 6e 63 74 69 6f   or more functio
19f30 6e 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64 20 2a  ns of any kind *
19f40 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 69 78  /.#define EP_Fix
19f50 65 64 43 6f 6c 20 20 20 30 78 30 30 30 30 30 38  edCol   0x000008
19f60 20 2f 2a 20 54 4b 5f 43 6f 6c 75 6d 6e 20 77 69   /* TK_Column wi
19f70 74 68 20 61 20 6b 6e 6f 77 6e 20 66 69 78 65 64  th a known fixed
19f80 20 76 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e   value */.#defin
19f90 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20 20  e EP_Agg        
19fa0 30 78 30 30 30 30 31 30 20 2f 2a 20 43 6f 6e 74  0x000010 /* Cont
19fb0 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
19fc0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
19fd0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
19fe0 45 50 5f 56 61 72 53 65 6c 65 63 74 20 20 30 78  EP_VarSelect  0x
19ff0 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63  000020 /* pSelec
1a000 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c  t is correlated,
1a010 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f   not constant */
1a020 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51  .#define EP_DblQ
1a030 75 6f 74 65 64 20 20 30 78 30 30 30 30 34 30 20  uoted  0x000040 
1a040 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f  /* token.z was o
1a050 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e  riginally in "..
1a060 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ." */.#define EP
1a070 5f 49 6e 66 69 78 46 75 6e 63 20 20 30 78 30 30  _InfixFunc  0x00
1a080 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72  0080 /* True for
1a090 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69   an infix functi
1a0a0 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20  on: LIKE, GLOB, 
1a0b0 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  etc */.#define E
1a0c0 50 5f 43 6f 6c 6c 61 74 65 20 20 20 20 30 78 30  P_Collate    0x0
1a0d0 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f  00100 /* Tree co
1a0e0 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c  ntains a TK_COLL
1a0f0 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a  ATE operator */.
1a100 20 20 2f 2a 20 20 20 20 20 20 20 20 20 20 20 20    /*            
1a110 20 20 20 20 20 20 30 78 30 30 30 32 30 30 20 41        0x000200 A
1a120 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 72 65 75  vailable for reu
1a130 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  se */.#define EP
1a140 5f 49 6e 74 56 61 6c 75 65 20 20 20 30 78 30 30  _IntValue   0x00
1a150 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20  0400 /* Integer 
1a160 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20  value contained 
1a170 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23  in u.iValue */.#
1a180 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c  define EP_xIsSel
1a190 65 63 74 20 20 30 78 30 30 30 38 30 30 20 2f 2a  ect  0x000800 /*
1a1a0 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61   x.pSelect is va
1a1b0 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78  lid (otherwise x
1a1c0 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64  .pList is) */.#d
1a1d0 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20  efine EP_Skip   
1a1e0 20 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20      0x001000 /* 
1a1f0 4f 70 65 72 61 74 6f 72 20 64 6f 65 73 20 6e 6f  Operator does no
1a200 74 20 63 6f 6e 74 72 69 62 75 74 65 20 74 6f 20  t contribute to 
1a210 61 66 66 69 6e 69 74 79 20 2a 2f 0a 23 64 65 66  affinity */.#def
1a220 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20 20  ine EP_Reduced  
1a230 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78    0x002000 /* Ex
1a240 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 52  pr struct EXPR_R
1a250 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73  EDUCEDSIZE bytes
1a260 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
1a270 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 20 30   EP_TokenOnly  0
1a280 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20  x004000 /* Expr 
1a290 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45  struct EXPR_TOKE
1a2a0 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20  NONLYSIZE bytes 
1a2b0 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
1a2c0 45 50 5f 57 69 6e 20 20 20 20 20 20 20 20 30 78  EP_Win        0x
1a2d0 30 30 38 30 30 30 20 2f 2a 20 43 6f 6e 74 61 69  008000 /* Contai
1a2e0 6e 73 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69  ns window functi
1a2f0 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ons */.#define E
1a300 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 20 30 78 30  P_MemToken   0x0
1a310 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f  10000 /* Need to
1a320 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
1a330 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a   Expr.zToken */.
1a340 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64  #define EP_NoRed
1a350 75 63 65 20 20 20 30 78 30 32 30 30 30 30 20 2f  uce   0x020000 /
1a360 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50  * Cannot EXPRDUP
1a370 5f 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70  _REDUCE this Exp
1a380 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
1a390 55 6e 6c 69 6b 65 6c 79 20 20 20 30 78 30 34 30  Unlikely   0x040
1a3a0 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28  000 /* unlikely(
1a3b0 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28  ) or likelihood(
1a3c0 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
1a3d0 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75  efine EP_ConstFu
1a3e0 6e 63 20 20 30 78 30 38 30 30 30 30 20 2f 2a 20  nc  0x080000 /* 
1a3f0 41 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  A SQLITE_FUNC_CO
1a400 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48  NSTANT or _SLOCH
1a410 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  NG function */.#
1a420 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e  define EP_CanBeN
1a430 75 6c 6c 20 20 30 78 31 30 30 30 30 30 20 2f 2a  ull  0x100000 /*
1a440 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73   Can be null des
1a450 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  pite NOT NULL co
1a460 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
1a470 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79 20  ine EP_Subquery 
1a480 20 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72    0x200000 /* Tr
1a490 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
1a4a0 5f 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72  _SELECT operator
1a4b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41   */.#define EP_A
1a4c0 6c 69 61 73 20 20 20 20 20 20 30 78 34 30 30 30  lias      0x4000
1a4d0 30 30 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61  00 /* Is an alia
1a4e0 73 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20 73  s for a result s
1a4f0 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65  et column */.#de
1a500 66 69 6e 65 20 45 50 5f 4c 65 61 66 20 20 20 20  fine EP_Leaf    
1a510 20 20 20 30 78 38 30 30 30 30 30 20 2f 2a 20 45     0x800000 /* E
1a520 78 70 72 2e 70 4c 65 66 74 2c 20 2e 70 52 69 67  xpr.pLeft, .pRig
1a530 68 74 2c 20 2e 75 2e 70 53 65 6c 65 63 74 20 61  ht, .u.pSelect a
1a540 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  ll NULL */.#defi
1a550 6e 65 20 45 50 5f 57 69 6e 46 75 6e 63 20 20 20  ne EP_WinFunc   
1a560 30 78 31 30 30 30 30 30 30 20 2f 2a 20 54 4b 5f  0x1000000 /* TK_
1a570 46 55 4e 43 54 49 4f 4e 20 77 69 74 68 20 45 78  FUNCTION with Ex
1a580 70 72 2e 79 2e 70 57 69 6e 20 73 65 74 20 2a 2f  pr.y.pWin set */
1a590 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 72  .#define EP_Subr
1a5a0 74 6e 20 20 20 20 30 78 32 30 30 30 30 30 30 20  tn    0x2000000 
1a5b0 2f 2a 20 55 73 65 73 20 45 78 70 72 2e 79 2e 73  /* Uses Expr.y.s
1a5c0 75 62 2e 20 54 4b 5f 49 4e 2c 20 5f 53 45 4c 45  ub. TK_IN, _SELE
1a5d0 43 54 2c 20 6f 72 20 5f 45 58 49 53 54 53 20 2a  CT, or _EXISTS *
1a5e0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 51 75 6f  /.#define EP_Quo
1a5f0 74 65 64 20 20 20 20 30 78 34 30 30 30 30 30 30  ted    0x4000000
1a600 20 2f 2a 20 54 4b 5f 49 44 20 77 61 73 20 6f 72   /* TK_ID was or
1a610 69 67 69 6e 61 6c 6c 79 20 71 75 6f 74 65 64 20  iginally quoted 
1a620 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
1a630 61 74 69 63 20 20 20 20 30 78 38 30 30 30 30 30  atic    0x800000
1a640 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d  0 /* Held in mem
1a650 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64  ory not obtained
1a660 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a   from malloc() *
1a670 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 73 54  /.#define EP_IsT
1a680 72 75 65 20 20 20 30 78 31 30 30 30 30 30 30 30  rue   0x10000000
1a690 20 2f 2a 20 41 6c 77 61 79 73 20 68 61 73 20 62   /* Always has b
1a6a0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 20 6f 66 20  oolean value of 
1a6b0 54 52 55 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  TRUE */.#define 
1a6c0 45 50 5f 49 73 46 61 6c 73 65 20 20 30 78 32 30  EP_IsFalse  0x20
1a6d0 30 30 30 30 30 30 20 2f 2a 20 41 6c 77 61 79 73  000000 /* Always
1a6e0 20 68 61 73 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   has boolean val
1a6f0 75 65 20 6f 66 20 46 41 4c 53 45 20 2a 2f 0a 23  ue of FALSE */.#
1a700 64 65 66 69 6e 65 20 45 50 5f 49 6e 64 69 72 65  define EP_Indire
1a710 63 74 20 30 78 34 30 30 30 30 30 30 30 20 2f 2a  ct 0x40000000 /*
1a720 20 43 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   Contained withi
1a730 6e 20 61 20 54 52 49 47 47 45 52 20 6f 72 20 61  n a TRIGGER or a
1a740 20 56 49 45 57 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   VIEW */../*.** 
1a750 54 68 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65  The EP_Propagate
1a760 20 6d 61 73 6b 20 69 73 20 61 20 73 65 74 20 6f   mask is a set o
1a770 66 20 70 72 6f 70 65 72 74 69 65 73 20 74 68 61  f properties tha
1a780 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  t automatically 
1a790 70 72 6f 70 61 67 61 74 65 0a 2a 2a 20 75 70 77  propagate.** upw
1a7a0 61 72 64 73 20 69 6e 74 6f 20 70 61 72 65 6e 74  ards into parent
1a7b0 20 6e 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69   nodes..*/.#defi
1a7c0 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20  ne EP_Propagate 
1a7d0 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53  (EP_Collate|EP_S
1a7e0 75 62 71 75 65 72 79 7c 45 50 5f 48 61 73 46 75  ubquery|EP_HasFu
1a7f0 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  nc)../*.** These
1a800 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75   macros can be u
1a810 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74  sed to test, set
1a820 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20  , or clear bits 
1a830 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
1a840 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
1a850 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72  define ExprHasPr
1a860 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
1a870 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
1a880 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78  )!=0).#define Ex
1a890 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79  prHasAllProperty
1a8a0 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c  (E,P)  (((E)->fl
1a8b0 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
1a8c0 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72  define ExprSetPr
1a8d0 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
1a8e0 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
1a8f0 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61  #define ExprClea
1a900 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  rProperty(E,P)  
1a910 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50   (E)->flags&=~(P
1a920 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 41 6c  ).#define ExprAl
1a930 77 61 79 73 54 72 75 65 28 45 29 20 20 20 28 28  waysTrue(E)   ((
1a940 28 45 29 2d 3e 66 6c 61 67 73 26 28 45 50 5f 46  (E)->flags&(EP_F
1a950 72 6f 6d 4a 6f 69 6e 7c 45 50 5f 49 73 54 72 75  romJoin|EP_IsTru
1a960 65 29 29 3d 3d 45 50 5f 49 73 54 72 75 65 29 0a  e))==EP_IsTrue).
1a970 23 64 65 66 69 6e 65 20 45 78 70 72 41 6c 77 61  #define ExprAlwa
1a980 79 73 46 61 6c 73 65 28 45 29 20 20 28 28 28 45  ysFalse(E)  (((E
1a990 29 2d 3e 66 6c 61 67 73 26 28 45 50 5f 46 72 6f  )->flags&(EP_Fro
1a9a0 6d 4a 6f 69 6e 7c 45 50 5f 49 73 46 61 6c 73 65  mJoin|EP_IsFalse
1a9b0 29 29 3d 3d 45 50 5f 49 73 46 61 6c 73 65 29 0a  ))==EP_IsFalse).
1a9c0 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74 56  ./* The ExprSetV
1a9d0 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63  VAProperty() mac
1a9e0 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 56  ro is used for V
1a9f0 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
1aa00 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20  idation,.** and 
1aa10 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e  Accreditation on
1aa20 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69  ly.  It works li
1aa30 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ke ExprSetProper
1aa40 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a  ty() during VVA.
1aa50 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75 74  ** processes but
1aa60 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20   is a no-op for 
1aa70 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66  delivery..*/.#if
1aa80 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1aa90 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
1aaa0 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50  tVVAProperty(E,P
1aab0 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28  )  (E)->flags|=(
1aac0 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  P).#else.# defin
1aad0 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
1aae0 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66  erty(E,P).#endif
1aaf0 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
1ab00 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
1ab10 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
1ab20 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f  required by a no
1ab30 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72  rmal Expr.** str
1ab40 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72  uct, an Expr str
1ab50 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
1ab60 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74  Reduced flag set
1ab70 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a   in Expr.flags.*
1ab80 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74  * and an Expr st
1ab90 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
1aba0 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20  _TokenOnly flag 
1abb0 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  set..*/.#define 
1abc0 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20  EXPR_FULLSIZE   
1abd0 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45          sizeof(E
1abe0 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f  xpr)           /
1abf0 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23  * Full size */.#
1ac00 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55  define EXPR_REDU
1ac10 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f  CEDSIZE        o
1ac20 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61  ffsetof(Expr,iTa
1ac30 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20  ble)  /* Common 
1ac40 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66  features */.#def
1ac50 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e  ine EXPR_TOKENON
1ac60 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73  LYSIZE      offs
1ac70 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29  etof(Expr,pLeft)
1ac80 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74     /* Fewer feat
1ac90 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46  ures */../*.** F
1aca0 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 74  lags passed to t
1acb0 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  he sqlite3ExprDu
1acc0 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65  p() function. Se
1acd0 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d  e the header com
1ace0 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71  ment.** above sq
1acf0 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
1ad00 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23  or details..*/.#
1ad10 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52  define EXPRDUP_R
1ad20 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78  EDUCE         0x
1ad30 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65  0001  /* Used re
1ad40 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20  duced-size Expr 
1ad50 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  nodes */../*.** 
1ad60 54 72 75 65 20 69 66 20 74 68 65 20 65 78 70 72  True if the expr
1ad70 65 73 73 69 6f 6e 20 70 61 73 73 65 64 20 61 73  ession passed as
1ad80 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 77 61 73   an argument was
1ad90 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68   a function with
1ada0 0a 2a 2a 20 61 6e 20 4f 56 45 52 28 29 20 63 6c  .** an OVER() cl
1adb0 61 75 73 65 20 28 61 20 77 69 6e 64 6f 77 20 66  ause (a window f
1adc0 75 6e 63 74 69 6f 6e 29 2e 0a 2a 2f 0a 23 64 65  unction)..*/.#de
1add0 66 69 6e 65 20 49 73 57 69 6e 64 6f 77 46 75 6e  fine IsWindowFun
1ade0 63 28 70 29 20 28 20 5c 0a 20 20 20 20 45 78 70  c(p) ( \.    Exp
1adf0 72 48 61 73 50 72 6f 70 65 72 74 79 28 28 70 29  rHasProperty((p)
1ae00 2c 20 45 50 5f 57 69 6e 46 75 6e 63 29 20 26 26  , EP_WinFunc) &&
1ae10 20 70 2d 3e 79 2e 70 57 69 6e 2d 3e 65 46 72 6d   p->y.pWin->eFrm
1ae20 54 79 70 65 21 3d 54 4b 5f 46 49 4c 54 45 52 20  Type!=TK_FILTER 
1ae30 5c 0a 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73  \.)../*.** A lis
1ae40 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
1ae50 2e 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69  .  Each expressi
1ae60 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c  on may optionall
1ae70 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65  y have a.** name
1ae80 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20  .  An expr/name 
1ae90 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20  combination can 
1aea0 62 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72  be used in sever
1aeb0 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a  al ways, such.**
1aec0 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20   as the list of 
1aed0 22 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65  "expr AS ID" fie
1aee0 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  lds following a 
1aef0 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74  "SELECT" or in t
1af00 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49  he.** list of "I
1af10 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20  D = expr" items 
1af20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41  in an UPDATE.  A
1af30 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
1af40 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f  ions can.** also
1af50 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
1af60 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75  argument to a fu
1af70 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68  nction, in which
1af80 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d   case the a.zNam
1af90 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f  e.** field is no
1afa0 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79  t used..**.** By
1afb0 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70   default the Exp
1afc0 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f  r.zSpan field ho
1afd0 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64  lds a human-read
1afe0 61 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e  able description
1aff0 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   of.** the expre
1b000 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73  ssion that is us
1b010 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
1b020 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65  tion of error me
1b030 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f  ssages and.** co
1b040 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e  lumn labels.  In
1b050 20 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72   this case, Expr
1b060 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61  .zSpan is typica
1b070 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20  lly the text of 
1b080 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72  a.** column expr
1b090 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69  ession as it exi
1b0a0 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20  sts in a SELECT 
1b0b0 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65  statement.  Howe
1b0c0 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62  ver, if.** the b
1b0d0 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69  SpanIsTab flag i
1b0e0 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61  s set, then zSpa
1b0f0 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20  n is overloaded 
1b100 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65  to mean the name
1b110 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c  .** of the resul
1b120 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  t column in the 
1b130 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54  form: DATABASE.T
1b140 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68  ABLE.COLUMN.  Th
1b150 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d  is later.** form
1b160 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d   is used for nam
1b170 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74  e resolution wit
1b180 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c  h nested FROM cl
1b190 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  auses..*/.struct
1b1a0 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e   ExprList {.  in
1b1b0 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20  t nExpr;        
1b1c0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b1d0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e  f expressions on
1b1e0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73   the list */.  s
1b1f0 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69  truct ExprList_i
1b200 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63  tem { /* For eac
1b210 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
1b220 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20  the list */.    
1b230 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
1b240 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70          /* The p
1b250 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 74 68  arse tree for th
1b260 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
1b270 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
1b280 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1b290 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64  Token associated
1b2a0 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65   with this expre
1b2b0 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
1b2c0 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
1b2d0 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
1b2e0 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70   text of the exp
1b2f0 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75  ression */.    u
1b300 38 20 73 6f 72 74 46 6c 61 67 73 3b 20 20 20 20  8 sortFlags;    
1b310 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
1b320 66 20 4b 45 59 49 4e 46 4f 5f 4f 52 44 45 52 5f  f KEYINFO_ORDER_
1b330 2a 20 66 6c 61 67 73 20 2a 2f 0a 20 20 20 20 75  * flags */.    u
1b340 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b  nsigned done :1;
1b350 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67         /* A flag
1b360 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65   to indicate whe
1b370 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  n processing is 
1b380 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20  finished */.    
1b390 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73  unsigned bSpanIs
1b3a0 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e  Tab :1; /* zSpan
1b3b0 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e   holds DB.TABLE.
1b3c0 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e  COLUMN */.    un
1b3d0 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20  signed reusable 
1b3e0 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  :1;   /* Constan
1b3f0 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  t expression is 
1b400 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20  reusable */.    
1b410 75 6e 73 69 67 6e 65 64 20 62 53 6f 72 74 65 72  unsigned bSorter
1b420 52 65 66 20 3a 31 3b 20 2f 2a 20 44 65 66 65 72  Ref :1; /* Defer
1b430 20 65 76 61 6c 75 61 74 69 6f 6e 20 75 6e 74 69   evaluation unti
1b440 6c 20 61 66 74 65 72 20 73 6f 72 74 69 6e 67 20  l after sorting 
1b450 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
1b460 62 4e 75 6c 6c 73 3a 20 31 3b 20 20 20 20 20 2f  bNulls: 1;     /
1b470 2a 20 54 72 75 65 20 69 66 20 65 78 70 6c 69 63  * True if explic
1b480 69 74 20 22 4e 55 4c 4c 53 20 46 49 52 53 54 2f  it "NULLS FIRST/
1b490 4c 41 53 54 22 20 2a 2f 0a 20 20 20 20 75 6e 69  LAST" */.    uni
1b4a0 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63  on {.      struc
1b4b0 74 20 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20  t {.        u16 
1b4c0 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20  iOrderByCol;    
1b4d0 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42    /* For ORDER B
1b4e0 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  Y, column number
1b4f0 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a   in result set *
1b500 2f 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 41  /.        u16 iA
1b510 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20  lias;           
1b520 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61  /* Index into Pa
1b530 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72  rse.aAlias[] for
1b540 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20   zName */.      
1b550 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69  } x;.      int i
1b560 43 6f 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20  ConstExprReg;   
1b570 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69     /* Register i
1b580 6e 20 77 68 69 63 68 20 45 78 70 72 20 76 61 6c  n which Expr val
1b590 75 65 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a  ue is cached */.
1b5a0 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20 61 5b 31      } u;.  } a[1
1b5b0 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ];              
1b5c0 20 20 20 20 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20      /* One slot 
1b5d0 66 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73  for each express
1b5e0 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ion in the list 
1b5f0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
1b600 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
1b610 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68   structure can h
1b620 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73  old a simple lis
1b630 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  t of identifiers
1b640 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65  ,.** such as the
1b650 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e   list "a,b,c" in
1b660 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1b670 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a  tatements:.**.**
1b680 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
1b690 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45  O t(a,b,c) VALUE
1b6a0 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43  S ...;.**      C
1b6b0 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20  REATE INDEX idx 
1b6c0 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20  ON t(a,b,c);.** 
1b6d0 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47       CREATE TRIG
1b6e0 47 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20  GER trig BEFORE 
1b6f0 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c  UPDATE ON t(a,b,
1b700 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68  c) ...;.**.** Th
1b710 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66  e IdList.a.idx f
1b720 69 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65  ield is used whe
1b730 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70  n the IdList rep
1b740 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74  resents the list
1b750 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61   of.** column na
1b760 6d 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c  mes after a tabl
1b770 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53  e name in an INS
1b780 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ERT statement.  
1b790 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  In the statement
1b7a0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52  .**.**     INSER
1b7b0 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20  T INTO t(a,b,c) 
1b7c0 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22  ....**.** If "a"
1b7d0 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c   is the k-th col
1b7e0 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22  umn of table "t"
1b7f0 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b  , then IdList.a[
1b800 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74  0].idx==k..*/.st
1b810 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20  ruct IdList {.  
1b820 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74  struct IdList_it
1b830 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  em {.    char *z
1b840 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
1b850 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69  me of the identi
1b860 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  fier */.    int 
1b870 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  idx;          /*
1b880 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54   Index in some T
1b890 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61  able.aCol[] of a
1b8a0 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e   column named zN
1b8b0 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20  ame */.  } *a;. 
1b8c0 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20   int nId;       
1b8d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69    /* Number of i
1b8e0 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68  dentifiers on th
1b8f0 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
1b900 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
1b910 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  g structure desc
1b920 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63  ribes the FROM c
1b930 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
1b940 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  T statement..** 
1b950 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75  Each table or su
1b960 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52  bquery in the FR
1b970 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73  OM clause is a s
1b980 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20  eparate element 
1b990 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73  of.** the SrcLis
1b9a0 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a  t.a[] array..**.
1b9b0 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69  ** With the addi
1b9c0 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65  tion of multiple
1b9d0 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72   database suppor
1b9e0 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  t, the following
1b9f0 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61   structure.** ca
1ba00 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74  n also be used t
1ba10 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72  o describe a par
1ba20 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75  ticular table su
1ba30 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  ch as the table 
1ba40 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66  that.** is modif
1ba50 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54  ied by an INSERT
1ba60 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44  , DELETE, or UPD
1ba70 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ATE statement.  
1ba80 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c  In standard SQL,
1ba90 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65  .** such a table
1baa0 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c   must be a simpl
1bab0 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74  e name: ID.  But
1bac0 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20   in SQLite, the 
1bad0 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77  table can.** now
1bae0 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62   be identified b
1baf0 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d  y a database nam
1bb00 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74  e, a dot, then t
1bb10 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49  he table name: I
1bb20 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  D.ID..**.** The 
1bb30 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20  jointype starts 
1bb40 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20  out showing the 
1bb50 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65  join type betwee
1bb60 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61  n the current ta
1bb70 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e  ble.** and the n
1bb80 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65  ext table on the
1bb90 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73   list.  The pars
1bba0 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69  er builds the li
1bbb0 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20  st this way..** 
1bbc0 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69  But sqlite3SrcLi
1bbd0 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
1bbe0 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74  ) later shifts t
1bbf0 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20  he jointypes so 
1bc00 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69  that each.** joi
1bc10 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20  ntype expresses 
1bc20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e  the join between
1bc30 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74   the table and t
1bc40 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c  he previous tabl
1bc50 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  e..**.** In the 
1bc60 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74  colUsed field, t
1bc70 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69  he high-order bi
1bc80 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65  t (bit 63) is se
1bc90 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a  t if the table.*
1bca0 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20  * contains more 
1bcb0 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20  than 63 columns 
1bcc0 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72  and the 64-th or
1bcd0 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73   later column is
1bce0 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74   used..*/.struct
1bcf0 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74   SrcList {.  int
1bd00 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a   nSrc;        /*
1bd10 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
1bd20 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20  s or subqueries 
1bd30 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
1bd40 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c  se */.  u32 nAll
1bd50 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  oc;      /* Numb
1bd60 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c  er of entries al
1bd70 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62  located in a[] b
1bd80 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74  elow */.  struct
1bd90 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a   SrcList_item {.
1bda0 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68      Schema *pSch
1bdb0 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20  ema;  /* Schema 
1bdc0 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74  to which this it
1bdd0 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20  em is fixed */. 
1bde0 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61     char *zDataba
1bdf0 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  se;  /* Name of 
1be00 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
1be10 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
1be20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
1be30 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
1be40 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  the table */.   
1be50 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20   char *zAlias;  
1be60 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61     /* The "B" pa
1be70 72 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22  rt of a "A AS B"
1be80 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20   phrase.  zName 
1be90 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20  is the "A" */.  
1bea0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
1beb0 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61      /* An SQL ta
1bec0 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ble correspondin
1bed0 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  g to zName */.  
1bee0 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
1bef0 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20  t;  /* A SELECT 
1bf00 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69  statement used i
1bf10 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
1bf20 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69  le name */.    i
1bf30 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20  nt addrFillSub; 
1bf40 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73   /* Address of s
1bf50 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e  ubroutine to man
1bf60 69 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79  ifest a subquery
1bf70 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
1bf80 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67  eturn;    /* Reg
1bf90 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65  ister holding re
1bfa0 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20  turn address of 
1bfb0 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20  addrFillSub */. 
1bfc0 20 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74     int regResult
1bfd0 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
1bfe0 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74  s holding result
1bff0 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e  s of a co-routin
1c000 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
1c010 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f 69 6e 74  {.      u8 joint
1c020 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70  ype;      /* Typ
1c030 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65  e of join betwee
1c040 6e 20 74 68 69 73 20 74 61 62 6c 65 20 61 6e 64  n this table and
1c050 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f   the previous */
1c060 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1c070 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20  notIndexed :1;  
1c080 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1c090 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45  re is a NOT INDE
1c0a0 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  XED clause */.  
1c0b0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49      unsigned isI
1c0c0 6e 64 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f  ndexedBy :1;   /
1c0d0 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
1c0e0 69 73 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59  is an INDEXED BY
1c0f0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
1c100 20 75 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46   unsigned isTabF
1c110 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54  unc :1;     /* T
1c120 72 75 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c  rue if table-val
1c130 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e  ued-function syn
1c140 74 61 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  tax */.      uns
1c150 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74  igned isCorrelat
1c160 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ed :1;  /* True 
1c170 69 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20  if sub-query is 
1c180 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20  correlated */.  
1c190 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61      unsigned via
1c1a0 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f  Coroutine :1;  /
1c1b0 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73  * Implemented as
1c1c0 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
1c1d0 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1c1e0 69 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20  isRecursive :1; 
1c1f0 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65    /* True for re
1c200 63 75 72 73 69 76 65 20 72 65 66 65 72 65 6e 63  cursive referenc
1c210 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20  e in WITH */.   
1c220 20 7d 20 66 67 3b 0a 20 20 20 20 69 6e 74 20 69   } fg;.    int i
1c230 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
1c240 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
1c250 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
1c260 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
1c270 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
1c280 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
1c290 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
1c2a0 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
1c2b0 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
1c2c0 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
1c2d0 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
1c2e0 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
1c2f0 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
1c300 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
1c310 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
1c320 75 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f  used */.    unio
1c330 6e 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  n {.      char *
1c340 7a 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f  zIndexedBy;    /
1c350 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f  * Identifier fro
1c360 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a  m "INDEXED BY <z
1c370 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a  Index>" clause *
1c380 2f 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73 74  /.      ExprList
1c390 20 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20   *pFuncArg;  /* 
1c3a0 41 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62  Arguments to tab
1c3b0 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69  le-valued-functi
1c3c0 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a  on */.    } u1;.
1c3d0 20 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e      Index *pIBIn
1c3e0 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73  dex;  /* Index s
1c3f0 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70  tructure corresp
1c400 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e  onding to u1.zIn
1c410 64 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61  dexedBy */.  } a
1c420 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
1c430 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
1c440 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65  r each identifie
1c450 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  r on the list */
1c460 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69  .};../*.** Permi
1c470 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74  tted values of t
1c480 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69  he SrcList.a.joi
1c490 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23  ntype field.*/.#
1c4a0 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20  define JT_INNER 
1c4b0 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a      0x0001    /*
1c4c0 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e   Any kind of inn
1c4d0 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e  er or cross join
1c4e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43   */.#define JT_C
1c4f0 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20  ROSS     0x0002 
1c500 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75     /* Explicit u
1c510 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20  se of the CROSS 
1c520 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
1c530 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20  ne JT_NATURAL   
1c540 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75  0x0004    /* Tru
1c550 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c  e for a "natural
1c560 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  " join */.#defin
1c570 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30  e JT_LEFT      0
1c580 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74  x0008    /* Left
1c590 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
1c5a0 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20  define JT_RIGHT 
1c5b0 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
1c5c0 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69   Right outer joi
1c5d0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1c5e0 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30  OUTER     0x0020
1c5f0 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45      /* The "OUTE
1c600 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72  R" keyword is pr
1c610 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esent */.#define
1c620 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78   JT_ERROR     0x
1c630 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f  0040    /* unkno
1c640 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65  wn or unsupporte
1c650 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a  d join type */..
1c660 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70  ./*.** Flags app
1c670 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65  ropriate for the
1c680 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61   wctrlFlags para
1c690 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33  meter of sqlite3
1c6a0 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20  WhereBegin().** 
1c6b0 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66  and the WhereInf
1c6c0 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d  o.wctrlFlags mem
1c6d0 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  ber..**.** Value
1c6e0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
1c6f0 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
1c700 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45  t()):.**     WHE
1c710 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d  RE_USE_LIMIT  ==
1c720 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a   SF_FixedLimit.*
1c730 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c740 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20  ORDERBY_NORMAL  
1c750 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70   0x0000 /* No-op
1c760 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c770 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20  E_ORDERBY_MIN   
1c780 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44     0x0001 /* ORD
1c790 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
1c7a0 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20   for min() func 
1c7b0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c7c0 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20  _ORDERBY_MAX    
1c7d0 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45    0x0002 /* ORDE
1c7e0 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
1c7f0 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a  for max() func *
1c800 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c810 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20  ONEPASS_DESIRED 
1c820 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20   0x0004 /* Want 
1c830 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55  to do one-pass U
1c840 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a  PDATE/DELETE */.
1c850 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
1c860 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30  EPASS_MULTIROW 0
1c870 78 30 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53  x0008 /* ONEPASS
1c880 20 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74   is ok with mult
1c890 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65  iple rows */.#de
1c8a0 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49  fine WHERE_DUPLI
1c8b0 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30  CATES_OK    0x00
1c8c0 31 30 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75  10 /* Ok to retu
1c8d0 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68  rn a row more th
1c8e0 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69  an once */.#defi
1c8f0 6e 65 20 57 48 45 52 45 5f 4f 52 5f 53 55 42 43  ne WHERE_OR_SUBC
1c900 4c 41 55 53 45 20 20 20 20 20 30 78 30 30 32 30  LAUSE     0x0020
1c910 20 2f 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 61   /* Processing a
1c920 20 73 75 62 2d 57 48 45 52 45 20 61 73 20 70 61   sub-WHERE as pa
1c930 72 74 20 6f 66 0a 20 20 20 20 20 20 20 20 20 20  rt of.          
1c940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c950 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
1c960 68 65 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69  he OR optimizati
1c970 6f 6e 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  on  */.#define W
1c980 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20  HERE_GROUPBY    
1c990 20 20 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20        0x0040 /* 
1c9a0 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c  pOrderBy is real
1c9b0 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f  ly a GROUP BY */
1c9c0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1c9d0 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20  ISTINCTBY       
1c9e0 30 78 30 30 38 30 20 2f 2a 20 70 4f 72 64 65 72  0x0080 /* pOrder
1c9f0 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44  by is really a D
1ca00 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a  ISTINCT clause *
1ca10 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1ca20 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20  WANT_DISTINCT   
1ca30 20 30 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f   0x0100 /* All o
1ca40 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62  utput needs to b
1ca50 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64  e distinct */.#d
1ca60 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54  efine WHERE_SORT
1ca70 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78 30  BYGROUP      0x0
1ca80 32 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73  200 /* Support s
1ca90 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
1caa0 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ted() */.#define
1cab0 20 57 48 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c   WHERE_SEEK_TABL
1cac0 45 20 20 20 20 20 20 20 30 78 30 34 30 30 20 2f  E       0x0400 /
1cad0 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73  * Do not defer s
1cae0 65 65 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62  eeks on main tab
1caf0 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  le */.#define WH
1cb00 45 52 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49  ERE_ORDERBY_LIMI
1cb10 54 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 4f  T    0x0800 /* O
1cb20 52 44 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20  RDERBY+LIMIT on 
1cb30 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a  the inner loop *
1cb40 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1cb50 53 45 45 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20  SEEK_UNIQ_TABLE 
1cb60 20 30 78 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f   0x1000 /* Do no
1cb70 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 69 66  t defer seeks if
1cb80 20 75 6e 69 71 75 65 20 2a 2f 0a 20 20 20 20 20   unique */.     
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cba0 20 20 20 2f 2a 20 20 20 20 20 30 78 32 30 30 30     /*     0x2000
1cbb0 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c      not currentl
1cbc0 79 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  y used */.#defin
1cbd0 65 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49  e WHERE_USE_LIMI
1cbe0 54 20 20 20 20 20 20 20 20 30 78 34 30 30 30 20  T        0x4000 
1cbf0 2f 2a 20 55 73 65 20 74 68 65 20 4c 49 4d 49 54  /* Use the LIMIT
1cc00 20 69 6e 20 63 6f 73 74 20 65 73 74 69 6d 61 74   in cost estimat
1cc10 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  es */.          
1cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1cc30 20 20 20 20 20 30 78 38 30 30 30 20 20 20 20 6e       0x8000    n
1cc40 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65  ot currently use
1cc50 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  d */../* Allowed
1cc60 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
1cc70 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65  rom sqlite3Where
1cc80 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a  IsDistinct().*/.
1cc90 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1cca0 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20  STINCT_NOOP     
1ccb0 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20   0  /* DISTINCT 
1ccc0 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64  keyword not used
1ccd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1cce0 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55  E_DISTINCT_UNIQU
1ccf0 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75  E    1  /* No du
1cd00 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66  plicates */.#def
1cd10 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1cd20 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20  CT_ORDERED   2  
1cd30 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65  /* All duplicate
1cd40 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a  s are adjacent *
1cd50 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1cd60 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52  DISTINCT_UNORDER
1cd70 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61  ED 3  /* Duplica
1cd80 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65  tes are scattere
1cd90 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61  d */../*.** A Na
1cda0 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65  meContext define
1cdb0 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77  s a context in w
1cdc0 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20  hich to resolve 
1cdd0 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
1cde0 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20  .** names.  The 
1cdf0 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73  context consists
1ce00 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61   of a list of ta
1ce10 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69  bles (the pSrcLi
1ce20 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a  st) field and.**
1ce30 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64   a list of named
1ce40 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c   expression (pEL
1ce50 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64  ist).  The named
1ce60 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
1ce70 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e   may.** be NULL.
1ce80 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65    The pSrc corre
1ce90 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52  sponds to the FR
1cea0 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
1ceb0 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74  ELECT or.** to t
1cec0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f  he table being o
1ced0 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e  perated on by IN
1cee0 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72  SERT, UPDATE, or
1cef0 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a   DELETE.  The.**
1cf00 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f   pEList correspo
1cf10 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c  nds to the resul
1cf20 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43  t set of a SELEC
1cf30 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f  T and is NULL fo
1cf40 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65  r.** other state
1cf50 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d  ments..**.** Nam
1cf60 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65  eContexts can be
1cf70 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72   nested.  When r
1cf80 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20  esolving names, 
1cf90 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a  the inner-most.*
1cfa0 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61  * context is sea
1cfb0 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66  rched first.  If
1cfc0 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75   no match is fou
1cfd0 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74  nd, the next out
1cfe0 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  er.** context is
1cff0 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68   checked.  If th
1d000 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20  ere is still no 
1d010 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20  match, the next 
1d020 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68  context.** is ch
1d030 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f  ecked.  This pro
1d040 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75  cess continues u
1d050 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61  ntil either a ma
1d060 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20  tch is found.** 
1d070 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20  or all contexts 
1d080 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e  are check.  When
1d090 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
1d0a0 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62  d, the nRef memb
1d0b0 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  er of.** the con
1d0c0 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20  text containing 
1d0d0 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63  the match is inc
1d0e0 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  remented..**.** 
1d0f0 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65  Each subquery ge
1d100 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e  ts a new NameCon
1d110 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74  text.  The pNext
1d120 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f   field points to
1d130 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
1d140 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ext in the paren
1d150 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74  t query.  Thus t
1d160 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63  he process of sc
1d170 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61  anning the.** Na
1d180 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63  meContext list c
1d190 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65  orresponds to se
1d1a0 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20  arching through 
1d1b0 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74  successively out
1d1c0 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73  er.** subqueries
1d1d0 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d   looking for a m
1d1e0 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  atch..*/.struct 
1d1f0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20  NameContext {.  
1d200 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
1d210 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
1d220 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  er */.  SrcList 
1d230 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20  *pSrcList;   /* 
1d240 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c  One or more tabl
1d250 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c  es used to resol
1d260 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 6e  ve names */.  un
1d270 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69  ion {.    ExprLi
1d280 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f  st *pEList;    /
1d290 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20  * Optional list 
1d2a0 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f  of result-set co
1d2b0 6c 75 6d 6e 73 20 2a 2f 0a 20 20 20 20 41 67 67  lumns */.    Agg
1d2c0 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20  Info *pAggInfo; 
1d2d0 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1d2e0 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65   about aggregate
1d2f0 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20  s at this level 
1d300 2a 2f 0a 20 20 20 20 55 70 73 65 72 74 20 2a 70  */.    Upsert *p
1d310 55 70 73 65 72 74 3b 20 20 20 20 20 2f 2a 20 4f  Upsert;     /* O
1d320 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
1d330 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  e information fr
1d340 6f 6d 20 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a  om an upsert */.
1d350 20 20 7d 20 75 4e 43 3b 0a 20 20 4e 61 6d 65 43    } uNC;.  NameC
1d360 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20  ontext *pNext;  
1d370 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61  /* Next outer na
1d380 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c  me context.  NUL
1d390 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20  L for outermost 
1d3a0 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
1d3b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1d3c0 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73  ber of names res
1d3d0 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f  olved by this co
1d3e0 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  ntext */.  int n
1d3f0 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
1d400 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
1d410 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  ors encountered 
1d420 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20  while resolving 
1d430 6e 61 6d 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  names */.  int n
1d440 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  cFlags;         
1d450 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  /* Zero or more 
1d460 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  NC_* flags defin
1d470 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 53 65  ed below */.  Se
1d480 6c 65 63 74 20 2a 70 57 69 6e 53 65 6c 65 63 74  lect *pWinSelect
1d490 3b 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61  ;  /* SELECT sta
1d4a0 74 65 6d 65 6e 74 20 66 6f 72 20 61 6e 79 20 77  tement for any w
1d4b0 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20  indow functions 
1d4c0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
1d4d0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
1d4e0 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c  the NameContext,
1d4f0 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a   ncFlags field..
1d500 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
1d510 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65  traints (all che
1d520 63 6b 65 64 20 76 69 61 20 61 73 73 65 72 74 28  cked via assert(
1d530 29 29 3a 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73  )):.**    NC_Has
1d540 41 67 67 20 20 20 20 3d 3d 20 53 46 5f 48 61 73  Agg    == SF_Has
1d550 41 67 67 20 20 20 20 3d 3d 20 45 50 5f 41 67 67  Agg    == EP_Agg
1d560 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78  .**    NC_MinMax
1d570 41 67 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78  Agg == SF_MinMax
1d580 41 67 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55  Agg == SQLITE_FU
1d590 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20 20 20  NC_MINMAX.**    
1d5a0 4e 43 5f 48 61 73 57 69 6e 20 20 20 20 3d 3d 20  NC_HasWin    == 
1d5b0 45 50 5f 57 69 6e 0a 2a 2a 0a 2a 2f 0a 23 64 65  EP_Win.**.*/.#de
1d5c0 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67  fine NC_AllowAgg
1d5d0 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67    0x0001  /* Agg
1d5e0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1d5f0 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72   are allowed her
1d600 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  e */.#define NC_
1d610 50 61 72 74 49 64 78 20 20 20 30 78 30 30 30 32  PartIdx   0x0002
1d620 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
1d630 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c  olving a partial
1d640 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a   index WHERE */.
1d650 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65  #define NC_IsChe
1d660 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20  ck   0x0004  /* 
1d670 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
1d680 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45  g names in a CHE
1d690 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  CK constraint */
1d6a0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67  .#define NC_InAg
1d6b0 67 46 75 6e 63 20 30 78 30 30 30 38 20 20 2f 2a  gFunc 0x0008  /*
1d6c0 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69   True if analyzi
1d6d0 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  ng arguments to 
1d6e0 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23  an agg func */.#
1d6f0 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67  define NC_HasAgg
1d700 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 4f      0x0010  /* O
1d710 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
1d720 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73  gate functions s
1d730 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
1d740 43 5f 49 64 78 45 78 70 72 20 20 20 30 78 30 30  C_IdxExpr   0x00
1d750 32 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  20  /* True if r
1d760 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73  esolving columns
1d770 20 6f 66 20 43 52 45 41 54 45 20 49 4e 44 45 58   of CREATE INDEX
1d780 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 56   */.#define NC_V
1d790 61 72 53 65 6c 65 63 74 20 30 78 30 30 34 30 20  arSelect 0x0040 
1d7a0 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61 74 65 64   /* A correlated
1d7b0 20 73 75 62 71 75 65 72 79 20 68 61 73 20 62 65   subquery has be
1d7c0 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  en seen */.#defi
1d7d0 6e 65 20 4e 43 5f 55 45 4c 69 73 74 20 20 20 20  ne NC_UEList    
1d7e0 30 78 30 30 38 30 20 20 2f 2a 20 54 72 75 65 20  0x0080  /* True 
1d7f0 69 66 20 75 4e 43 2e 70 45 4c 69 73 74 20 69 73  if uNC.pEList is
1d800 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
1d810 20 4e 43 5f 55 41 67 67 49 6e 66 6f 20 20 30 78   NC_UAggInfo  0x
1d820 30 31 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0100  /* True if
1d830 20 75 4e 43 2e 70 41 67 67 49 6e 66 6f 20 69 73   uNC.pAggInfo is
1d840 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
1d850 20 4e 43 5f 55 55 70 73 65 72 74 20 20 20 30 78   NC_UUpsert   0x
1d860 30 32 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0200  /* True if
1d870 20 75 4e 43 2e 70 55 70 73 65 72 74 20 69 73 20   uNC.pUpsert is 
1d880 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
1d890 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31  NC_MinMaxAgg 0x1
1d8a0 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20  000  /* min/max 
1d8b0 61 67 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e  aggregates seen.
1d8c0 20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65    See note above
1d8d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 43   */.#define NC_C
1d8e0 6f 6d 70 6c 65 78 20 20 20 30 78 32 30 30 30 20  omplex   0x2000 
1d8f0 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20 66 75   /* True if a fu
1d900 6e 63 74 69 6f 6e 20 6f 72 20 73 75 62 71 75 65  nction or subque
1d910 72 79 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  ry seen */.#defi
1d920 6e 65 20 4e 43 5f 41 6c 6c 6f 77 57 69 6e 20 20  ne NC_AllowWin  
1d930 30 78 34 30 30 30 20 20 2f 2a 20 57 69 6e 64 6f  0x4000  /* Windo
1d940 77 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  w functions are 
1d950 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a  allowed here */.
1d960 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 57 69  #define NC_HasWi
1d970 6e 20 20 20 20 30 78 38 30 30 30 20 20 2f 2a 20  n    0x8000  /* 
1d980 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 77 69 6e 64  One or more wind
1d990 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65  ow functions see
1d9a0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  n */.#define NC_
1d9b0 49 73 44 44 4c 20 20 20 20 30 78 31 30 30 30 30  IsDDL    0x10000
1d9c0 20 20 2f 2a 20 52 65 73 6f 6c 76 69 6e 67 20 6e    /* Resolving n
1d9d0 61 6d 65 73 20 69 6e 20 61 20 43 52 45 41 54 45  ames in a CREATE
1d9e0 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 0a 2f   statement */../
1d9f0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1da00 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1da10 67 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62  g object describ
1da20 65 73 20 61 20 73 69 6e 67 6c 65 20 4f 4e 20 43  es a single ON C
1da30 4f 4e 46 4c 49 43 54 0a 2a 2a 20 63 6c 61 75 73  ONFLICT.** claus
1da40 65 20 69 6e 20 61 6e 20 75 70 73 65 72 74 2e 0a  e in an upsert..
1da50 2a 2a 0a 2a 2a 20 54 68 65 20 70 55 70 73 65 72  **.** The pUpser
1da60 74 54 61 72 67 65 74 20 66 69 65 6c 64 20 69 73  tTarget field is
1da70 20 6f 6e 6c 79 20 73 65 74 20 69 66 20 74 68 65   only set if the
1da80 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
1da90 75 73 65 20 69 6e 63 6c 75 64 65 73 0a 2a 2a 20  use includes.** 
1daa0 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20  conflict-target 
1dab0 63 6c 61 75 73 65 2e 20 20 28 49 6e 20 22 4f 4e  clause.  (In "ON
1dac0 20 43 4f 4e 46 4c 49 43 54 28 61 2c 62 29 22 20   CONFLICT(a,b)" 
1dad0 74 68 65 20 22 28 61 2c 62 29 22 20 69 73 20 74  the "(a,b)" is t
1dae0 68 65 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74  he.** conflict-t
1daf0 61 72 67 65 74 20 63 6c 61 75 73 65 2e 29 20 20  arget clause.)  
1db00 54 68 65 20 70 55 70 73 65 72 74 54 61 72 67 65  The pUpsertTarge
1db10 74 57 68 65 72 65 20 69 73 20 74 68 65 20 6f 70  tWhere is the op
1db20 74 69 6f 6e 61 6c 0a 2a 2a 20 57 48 45 52 45 20  tional.** WHERE 
1db30 63 6c 61 75 73 65 20 75 73 65 64 20 74 6f 20 69  clause used to i
1db40 64 65 6e 74 69 66 79 20 70 61 72 74 69 61 6c 20  dentify partial 
1db50 75 6e 69 71 75 65 20 69 6e 64 65 78 65 73 2e 0a  unique indexes..
1db60 2a 2a 0a 2a 2a 20 70 55 70 73 65 72 74 53 65 74  **.** pUpsertSet
1db70 20 69 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20   is the list of 
1db80 63 6f 6c 75 6d 6e 3d 65 78 70 72 20 74 65 72 6d  column=expr term
1db90 73 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  s of the UPDATE 
1dba0 73 74 61 74 65 6d 65 6e 74 2e 20 0a 2a 2a 20 54  statement. .** T
1dbb0 68 65 20 70 55 70 73 65 72 74 53 65 74 20 66 69  he pUpsertSet fi
1dbc0 65 6c 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20  eld is NULL for 
1dbd0 61 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 44 4f  a ON CONFLICT DO
1dbe0 20 4e 4f 54 48 49 4e 47 2e 20 20 54 68 65 0a 2a   NOTHING.  The.*
1dbf0 2a 20 70 55 70 73 65 72 74 57 68 65 72 65 20 69  * pUpsertWhere i
1dc00 73 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  s the WHERE clau
1dc10 73 65 20 66 6f 72 20 74 68 65 20 55 50 44 41 54  se for the UPDAT
1dc20 45 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 69 66  E and is NULL if
1dc30 20 74 68 65 0a 2a 2a 20 57 48 45 52 45 20 63 6c   the.** WHERE cl
1dc40 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 2e  ause is omitted.
1dc50 0a 2a 2f 0a 73 74 72 75 63 74 20 55 70 73 65 72  .*/.struct Upser
1dc60 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  t {.  ExprList *
1dc70 70 55 70 73 65 72 74 54 61 72 67 65 74 3b 20 20  pUpsertTarget;  
1dc80 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 65 73 63  /* Optional desc
1dc90 72 69 70 74 69 6f 6e 20 6f 66 20 63 6f 6e 66 6c  ription of confl
1dca0 69 63 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  icting index */.
1dcb0 20 20 45 78 70 72 20 2a 70 55 70 73 65 72 74 54    Expr *pUpsertT
1dcc0 61 72 67 65 74 57 68 65 72 65 3b 20 2f 2a 20 57  argetWhere; /* W
1dcd0 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
1dce0 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20 74 61  partial index ta
1dcf0 72 67 65 74 73 20 2a 2f 0a 20 20 45 78 70 72 4c  rgets */.  ExprL
1dd00 69 73 74 20 2a 70 55 70 73 65 72 74 53 65 74 3b  ist *pUpsertSet;
1dd10 20 20 20 20 20 2f 2a 20 54 68 65 20 53 45 54 20       /* The SET 
1dd20 63 6c 61 75 73 65 20 66 72 6f 6d 20 61 6e 20 4f  clause from an O
1dd30 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54  N CONFLICT UPDAT
1dd40 45 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70  E */.  Expr *pUp
1dd50 73 65 72 74 57 68 65 72 65 3b 20 20 20 20 20 20  sertWhere;      
1dd60 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65   /* WHERE clause
1dd70 20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46   for the ON CONF
1dd80 4c 49 43 54 20 55 50 44 41 54 45 20 2a 2f 0a 20  LICT UPDATE */. 
1dd90 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 61   /* The fields a
1dda0 62 6f 76 65 20 63 6f 6d 70 72 69 73 65 20 74 68  bove comprise th
1ddb0 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72  e parse tree for
1ddc0 20 74 68 65 20 75 70 73 65 72 74 20 63 6c 61 75   the upsert clau
1ddd0 73 65 2e 0a 20 20 2a 2a 20 54 68 65 20 66 69 65  se..  ** The fie
1dde0 6c 64 73 20 62 65 6c 6f 77 20 61 72 65 20 75 73  lds below are us
1ddf0 65 64 20 74 6f 20 74 72 61 6e 73 66 65 72 20 69  ed to transfer i
1de00 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
1de10 74 68 65 20 49 4e 53 45 52 54 0a 20 20 2a 2a 20  the INSERT.  ** 
1de20 70 72 6f 63 65 73 73 69 6e 67 20 64 6f 77 6e 20  processing down 
1de30 69 6e 74 6f 20 74 68 65 20 55 50 44 41 54 45 20  into the UPDATE 
1de40 70 72 6f 63 65 73 73 69 6e 67 20 77 68 69 6c 65  processing while
1de50 20 67 65 6e 65 72 61 74 69 6e 67 20 63 6f 64 65   generating code
1de60 2e 0a 20 20 2a 2a 20 55 70 73 65 72 74 20 6f 77  ..  ** Upsert ow
1de70 6e 73 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ns the memory al
1de80 6c 6f 63 61 74 65 64 20 61 62 6f 76 65 2c 20 62  located above, b
1de90 75 74 20 6e 6f 74 20 74 68 65 20 6d 65 6d 6f 72  ut not the memor
1dea0 79 20 62 65 6c 6f 77 2e 20 2a 2f 0a 20 20 49 6e  y below. */.  In
1deb0 64 65 78 20 2a 70 55 70 73 65 72 74 49 64 78 3b  dex *pUpsertIdx;
1dec0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 73 74          /* Const
1ded0 72 61 69 6e 74 20 74 68 61 74 20 70 55 70 73 65  raint that pUpse
1dee0 72 74 54 61 72 67 65 74 20 69 64 65 6e 74 69 66  rtTarget identif
1def0 69 65 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ies */.  SrcList
1df00 20 2a 70 55 70 73 65 72 74 53 72 63 3b 20 20 20   *pUpsertSrc;   
1df10 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 6f 20 62     /* Table to b
1df20 65 20 75 70 64 61 74 65 64 20 2a 2f 0a 20 20 69  e updated */.  i
1df30 6e 74 20 72 65 67 44 61 74 61 3b 20 20 20 20 20  nt regData;     
1df40 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
1df50 74 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69  t register holdi
1df60 6e 67 20 61 72 72 61 79 20 6f 66 20 56 41 4c 55  ng array of VALU
1df70 45 53 20 2a 2f 0a 20 20 69 6e 74 20 69 44 61 74  ES */.  int iDat
1df80 61 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20  aCur;           
1df90 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68    /* Index of th
1dfa0 65 20 64 61 74 61 20 63 75 72 73 6f 72 20 2a 2f  e data cursor */
1dfb0 0a 20 20 69 6e 74 20 69 49 64 78 43 75 72 3b 20  .  int iIdxCur; 
1dfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1dfd0 49 6e 64 65 78 20 6f 66 20 74 68 65 20 66 69 72  Index of the fir
1dfe0 73 74 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20  st index cursor 
1dff0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
1e000 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1e010 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1e020 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c  ure contains all
1e030 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
1e040 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
1e050 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69  te code for a si
1e060 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  ngle SELECT stat
1e070 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ement..**.** See
1e080 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d   the header comm
1e090 65 6e 74 20 6f 6e 20 74 68 65 20 63 6f 6d 70 75  ent on the compu
1e0a0 74 65 4c 69 6d 69 74 52 65 67 69 73 74 65 72 73  teLimitRegisters
1e0b0 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 61  () routine for a
1e0c0 0a 2a 2a 20 64 65 74 61 69 6c 65 64 20 64 65 73  .** detailed des
1e0d0 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20  cription of the 
1e0e0 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 69  meaning of the i
1e0f0 4c 69 6d 69 74 20 61 6e 64 20 69 4f 66 66 73 65  Limit and iOffse
1e100 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20  t fields..**.** 
1e110 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65  addrOpenEphm[] e
1e120 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74  ntries contain t
1e130 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50  he address of OP
1e140 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f  _OpenEphemeral o
1e150 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65  pcodes..** These
1e160 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20   addresses must 
1e170 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61  be stored so tha
1e180 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b  t we can go back
1e190 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20   and fill in.** 
1e1a0 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61  the P4_KEYINFO a
1e1b0 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73  nd P2 parameters
1e1c0 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72   later.  Neither
1e1d0 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72   the KeyInfo nor
1e1e0 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
1e1f0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20  f columns in P2 
1e200 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20  can be computed 
1e210 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
1e220 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70  .** as the OP_Op
1e230 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69  enEphm instructi
1e240 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61  on is coded beca
1e250 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67  use not.** enoug
1e260 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  h information ab
1e270 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64  out the compound
1e280 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20   query is known 
1e290 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a  at that point..*
1e2a0 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f  * The KeyInfo fo
1e2b0 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30  r addrOpenTran[0
1e2c0 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69  ] and [1] contai
1e2d0 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ns collating seq
1e2e0 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68  uences.** for th
1e2f0 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54  e result set.  T
1e300 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
1e310 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63  ddrOpenEphm[2] c
1e320 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
1e330 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66  g.** sequences f
1e340 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  or the ORDER BY 
1e350 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
1e360 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70  t Select {.  Exp
1e370 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
1e380 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64      /* The field
1e390 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  s of the result 
1e3a0 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
1e3b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1e3c0 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20  ne of: TK_UNION 
1e3d0 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53  TK_ALL TK_INTERS
1e3e0 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f  ECT TK_EXCEPT */
1e3f0 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63  .  LogEst nSelec
1e400 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74  tRow;     /* Est
1e410 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
1e420 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a   result rows */.
1e430 20 20 75 33 32 20 73 65 6c 46 6c 61 67 73 3b 20    u32 selFlags; 
1e440 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
1e450 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20  ous SF_* values 
1e460 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c  */.  int iLimit,
1e470 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d   iOffset;   /* M
1e480 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
1e490 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20  holding LIMIT & 
1e4a0 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20  OFFSET counters 
1e4b0 2a 2f 0a 20 20 75 33 32 20 73 65 6c 49 64 3b 20  */.  u32 selId; 
1e4c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
1e4d0 6e 69 71 75 65 20 69 64 65 6e 74 69 66 69 65 72  nique identifier
1e4e0 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69 73   number for this
1e4f0 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 69 6e 74   SELECT */.  int
1e500 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d   addrOpenEphm[2]
1e510 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70  ;   /* OP_OpenEp
1e520 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61  hem opcodes rela
1e530 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  ted to this sele
1e540 63 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  ct */.  SrcList 
1e550 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f  *pSrc;         /
1e560 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  * The FROM claus
1e570 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  e */.  Expr *pWh
1e580 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ere;          /*
1e590 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1e5a0 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
1e5b0 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a  *pGroupBy;    /*
1e5c0 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   The GROUP BY cl
1e5d0 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
1e5e0 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20  pHaving;        
1e5f0 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63   /* The HAVING c
1e600 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
1e610 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
1e620 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42    /* The ORDER B
1e630 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65  Y clause */.  Se
1e640 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20  lect *pPrior;   
1e650 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65       /* Prior se
1e660 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
1e670 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
1e680 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  ent */.  Select 
1e690 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
1e6a0 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74  /* Next select t
1e6b0 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20  o the left in a 
1e6c0 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78  compound */.  Ex
1e6d0 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20  pr *pLimit;     
1e6e0 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78       /* LIMIT ex
1e6f0 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
1e700 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
1e710 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b  /.  With *pWith;
1e720 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49             /* WI
1e730 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63 68  TH clause attach
1e740 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
1e750 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 23  t. Or NULL. */.#
1e760 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1e770 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20  IT_WINDOWFUNC.  
1e780 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20  Window *pWin;   
1e790 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
1e7a0 66 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  f window functio
1e7b0 6e 73 20 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a  ns */.  Window *
1e7c0 70 57 69 6e 44 65 66 6e 3b 20 20 20 20 20 20 2f  pWinDefn;      /
1e7d0 2a 20 4c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20  * List of named 
1e7e0 77 69 6e 64 6f 77 20 64 65 66 69 6e 69 74 69 6f  window definitio
1e7f0 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  ns */.#endif.};.
1e800 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
1e810 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74  alues for Select
1e820 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20  .selFlags.  The 
1e830 22 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e  "SF" prefix stan
1e840 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63  ds for.** "Selec
1e850 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56  t Flag"..**.** V
1e860 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
1e870 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69   (all checked vi
1e880 61 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20  a assert()).**  
1e890 20 20 20 53 46 5f 48 61 73 41 67 67 20 20 20 20     SF_HasAgg    
1e8a0 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a   == NC_HasAgg.**
1e8b0 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67       SF_MinMaxAg
1e8c0 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41  g  == NC_MinMaxA
1e8d0 67 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45  gg     == SQLITE
1e8e0 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20  _FUNC_MINMAX.** 
1e8f0 20 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69      SF_FixedLimi
1e900 74 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c  t == WHERE_USE_L
1e910 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  IMIT.*/.#define 
1e920 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20  SF_Distinct     
1e930 20 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75    0x00001  /* Ou
1e940 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44  tput should be D
1e950 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69  ISTINCT */.#defi
1e960 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20  ne SF_All       
1e970 20 20 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a       0x00002  /*
1e980 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c   Includes the AL
1e990 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  L keyword */.#de
1e9a0 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64  fine SF_Resolved
1e9b0 20 20 20 20 20 20 20 30 78 30 30 30 30 34 20 20         0x00004  
1e9c0 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68  /* Identifiers h
1e9d0 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
1e9e0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  d */.#define SF_
1e9f0 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20 30  Aggregate      0
1ea00 78 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61  x00008  /* Conta
1ea10 69 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e  ins agg function
1ea20 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20  s or a GROUP BY 
1ea30 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61  */.#define SF_Ha
1ea40 73 41 67 67 20 20 20 20 20 20 20 20 20 30 78 30  sAgg         0x0
1ea50 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0010  /* Contain
1ea60 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
1ea70 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
1ea80 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61   SF_UsesEphemera
1ea90 6c 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55  l  0x00020  /* U
1eaa0 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65  ses the OpenEphe
1eab0 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a  meral opcode */.
1eac0 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e  #define SF_Expan
1ead0 64 65 64 20 20 20 20 20 20 20 30 78 30 30 30 34  ded       0x0004
1eae0 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c  0  /* sqlite3Sel
1eaf0 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c  ectExpand() call
1eb00 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64  ed on this */.#d
1eb10 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65  efine SF_HasType
1eb20 49 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30 20  Info    0x00080 
1eb30 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72   /* FROM subquer
1eb40 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d  ies have Table m
1eb50 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69  etadata */.#defi
1eb60 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20  ne SF_Compound  
1eb70 20 20 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a       0x00100  /*
1eb80 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f   Part of a compo
1eb90 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65  und query */.#de
1eba0 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20  fine SF_Values  
1ebb0 20 20 20 20 20 20 20 30 78 30 30 32 30 30 20 20         0x00200  
1ebc0 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66  /* Synthesized f
1ebd0 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73  rom VALUES claus
1ebe0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
1ebf0 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30  MultiValue     0
1ec00 78 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c  x00400  /* Singl
1ec10 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69  e VALUES term wi
1ec20 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  th multiple rows
1ec30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e   */.#define SF_N
1ec40 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78  estedFrom     0x
1ec50 30 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  00800  /* Part o
1ec60 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65  f a parenthesize
1ec70 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  d FROM clause */
1ec80 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d  .#define SF_MinM
1ec90 61 78 41 67 67 20 20 20 20 20 20 30 78 30 31 30  axAgg      0x010
1eca0 30 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  00  /* Aggregate
1ecb0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28   containing min(
1ecc0 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64  ) or max() */.#d
1ecd0 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69  efine SF_Recursi
1ece0 76 65 20 20 20 20 20 20 30 78 30 32 30 30 30 20  ve      0x02000 
1ecf0 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76   /* The recursiv
1ed00 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75  e part of a recu
1ed10 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65  rsive CTE */.#de
1ed20 66 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d  fine SF_FixedLim
1ed30 69 74 20 20 20 20 20 30 78 30 34 30 30 30 20 20  it     0x04000  
1ed40 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65  /* nSelectRow se
1ed50 74 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20  t by a constant 
1ed60 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65  LIMIT */.#define
1ed70 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74   SF_MaybeConvert
1ed80 20 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e     0x08000  /* N
1ed90 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  eed convertCompo
1eda0 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
1edb0 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ery() */.#define
1edc0 20 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20   SF_Converted   
1edd0 20 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42     0x10000  /* B
1ede0 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  y convertCompoun
1edf0 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1ee00 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  y() */.#define S
1ee10 46 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20  F_IncludeHidden 
1ee20 20 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63   0x20000  /* Inc
1ee30 6c 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75  lude hidden colu
1ee40 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f  mns in output */
1ee50 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70  .#define SF_Comp
1ee60 6c 65 78 52 65 73 75 6c 74 20 20 30 78 34 30 30  lexResult  0x400
1ee70 30 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f  00  /* Result co
1ee80 6e 74 61 69 6e 73 20 73 75 62 71 75 65 72 79 20  ntains subquery 
1ee90 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  or function */.#
1eea0 64 65 66 69 6e 65 20 53 46 5f 57 68 65 72 65 42  define SF_WhereB
1eeb0 65 67 69 6e 20 20 20 20 20 30 78 38 30 30 30 30  egin     0x80000
1eec0 20 20 2f 2a 20 52 65 61 6c 6c 79 20 61 20 57 68    /* Really a Wh
1eed0 65 72 65 42 65 67 69 6e 28 29 20 63 61 6c 6c 2e  ereBegin() call.
1eee0 20 20 44 65 62 75 67 20 4f 6e 6c 79 20 2a 2f 0a    Debug Only */.
1eef0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  ./*.** The resul
1ef00 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63  ts of a SELECT c
1ef10 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65  an be distribute
1ef20 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
1ef30 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a  s, as defined.**
1ef40 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   by one of the f
1ef50 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e  ollowing macros.
1ef60 20 20 54 68 65 20 22 53 52 54 22 20 70 72 65 66    The "SRT" pref
1ef70 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54  ix means "SELECT
1ef80 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22   Result.** Type"
1ef90 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1efa0 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72  Union       Stor
1efb0 65 20 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b  e results as a k
1efc0 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72  ey in a temporar
1efd0 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20  y index.**      
1efe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1eff0 64 65 6e 74 69 66 69 65 64 20 62 79 20 70 44 65  dentified by pDe
1f000 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
1f010 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65 70  **     SRT_Excep
1f020 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65  t      Remove re
1f030 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74  sults from the t
1f040 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70  emporary index p
1f050 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1f060 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69  *.**     SRT_Exi
1f070 73 74 73 20 20 20 20 20 20 53 74 6f 72 65 20 61  sts      Store a
1f080 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c   1 in memory cel
1f090 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  l pDest->iSDParm
1f0a0 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a   if the result.*
1f0b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f0c0 20 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74        set is not
1f0d0 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20   empty..**.**   
1f0e0 20 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20    SRT_Discard   
1f0f0 20 20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75    Throw the resu
1f100 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69 73 20  lts away.  This 
1f110 69 73 20 75 73 65 64 20 62 79 20 53 45 4c 45 43  is used by SELEC
1f120 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  T.**            
1f130 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
1f140 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
1f150 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70  ers whose only p
1f160 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20  urpose is.**    
1f170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f180 20 74 68 65 20 73 69 64 65 2d 65 66 66 65 63 74   the side-effect
1f190 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  s of functions..
1f1a0 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65  **.** All of the
1f1b0 20 61 62 6f 76 65 20 61 72 65 20 66 72 65 65 20   above are free 
1f1c0 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20  to ignore their 
1f1d0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1f1e0 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66   Those that.** f
1f1f0 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72  ollow must honor
1f200 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1f210 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
1f220 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
1f230 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f  Generate a row o
1f240 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20  f output (using 
1f250 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  the OP_ResultRow
1f260 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f270 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20          opcode) 
1f280 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20  for each row in 
1f290 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a  the result set..
1f2a0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65  **.**     SRT_Me
1f2b0 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76  m         Only v
1f2c0 61 6c 69 64 20 69 66 20 74 68 65 20 72 65 73 75  alid if the resu
1f2d0 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  lt is a single c
1f2e0 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20  olumn..**       
1f2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
1f300 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 63 6f  ore the first co
1f310 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73  lumn of the firs
1f320 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20  t result row.** 
1f330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f340 20 20 20 20 69 6e 20 72 65 67 69 73 74 65 72 20      in register 
1f350 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74  pDest->iSDParm t
1f360 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20  hen abandon the 
1f370 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  rest.**         
1f380 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74              of t
1f390 68 65 20 71 75 65 72 79 2e 20 20 54 68 69 73 20  he query.  This 
1f3a0 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c  destination impl
1f3b0 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a  ies "LIMIT 1"..*
1f3c0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74  *.**     SRT_Set
1f3d0 20 20 20 20 20 20 20 20 20 54 68 65 20 72 65 73           The res
1f3e0 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73 69  ult must be a si
1f3f0 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74  ngle column.  St
1f400 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20  ore each.**     
1f410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f420 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73  row of result as
1f430 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c   the key in tabl
1f440 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1f450 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1f460 20 20 20 20 20 20 20 20 20 41 70 70 6c 79 20 74           Apply t
1f470 68 65 20 61 66 66 69 6e 69 74 79 20 70 44 65 73  he affinity pDes
1f480 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72  t->affSdst befor
1f490 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20  e storing.**    
1f4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4b0 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20   results.  Used 
1f4c0 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e  to implement "IN
1f4d0 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a   (SELECT ...)"..
1f4e0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70  **.**     SRT_Ep
1f4f0 68 65 6d 54 61 62 20 20 20 20 43 72 65 61 74 65  hemTab    Create
1f500 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61   an temporary ta
1f510 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1f520 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20  rm and store.** 
1f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f540 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 20 74      the result t
1f550 68 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72  here. The cursor
1f560 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66   is left open af
1f570 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ter.**          
1f580 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1f590 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c  ning.  This is l
1f5a0 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78  ike SRT_Table ex
1f5b0 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20  cept that.**    
1f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5d0 20 74 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f   this destinatio
1f5e0 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70  n uses OP_OpenEp
1f5f0 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74  hemeral to creat
1f600 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1f610 20 20 20 20 20 20 20 20 20 74 68 65 20 74 61 62           the tab
1f620 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20  le first..**.** 
1f630 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e      SRT_Coroutin
1f640 65 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 63  e   Generate a c
1f650 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72  o-routine that r
1f660 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77  eturns a new row
1f670 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   of.**          
1f680 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1f690 74 73 20 65 61 63 68 20 74 69 6d 65 20 69 74 20  ts each time it 
1f6a0 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65  is invoked.  The
1f6b0 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20   entry point.** 
1f6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6d0 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f      of the co-ro
1f6e0 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20  utine is stored 
1f6f0 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73  in register pDes
1f700 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20  t->iSDParm.**   
1f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f720 20 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74    and the result
1f730 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69   row is stored i
1f740 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72  n pDest->nDest r
1f750 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20  egisters.**     
1f760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f770 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 70 44  starting with pD
1f780 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a  est->iSdst..**.*
1f790 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20  *     SRT_Table 
1f7a0 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
1f7b0 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  lts in temporary
1f7c0 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1f7d0 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52  DParm..**     SR
1f7e0 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54 68  T_Fifo        Th
1f7f0 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45  is is like SRT_E
1f800 70 68 65 6d 54 61 62 20 65 78 63 65 70 74 20 74  phemTab except t
1f810 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a  hat the table.**
1f820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f830 20 20 20 20 20 69 73 20 61 73 73 75 6d 65 64 20       is assumed 
1f840 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70  to already be op
1f850 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61  en.  SRT_Fifo ha
1f860 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1f870 20 20 20 20 20 20 20 20 20 74 68 65 20 61 64 64           the add
1f880 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79  itional property
1f890 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74   of being able t
1f8a0 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20  o ignore.**     
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8c0 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
1f8d0 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
1f8e0 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53  RT_DistFifo    S
1f8f0 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1f900 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  a temporary tabl
1f910 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1f920 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1f930 20 20 20 20 20 20 20 20 20 42 75 74 20 61 6c 73           But als
1f940 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20  o use temporary 
1f950 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1f960 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20  Parm+1 as.**    
1f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f980 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c   a record of all
1f990 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61   prior results a
1f9a0 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75  nd ignore any du
1f9b0 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20  plicate.**      
1f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f9d0 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73  ows.  Name means
1f9e0 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46 69 66  :  "Distinct Fif
1f9f0 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  o"..**.**     SR
1fa00 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 53 74  T_Queue       St
1fa10 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
1fa20 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44  riority queue pD
1fa30 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65  est->iSDParm (re
1fa40 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20  ally.**         
1fa50 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69              an i
1fa60 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61  ndex).  Append a
1fa70 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1fa80 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74   so that all ent
1fa90 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  ries.**         
1faa0 20 20 20 20 20 20 20 20 20 20 20 20 61 72 65 20              are 
1fab0 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20  distinct..**.** 
1fac0 20 20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75      SRT_DistQueu
1fad0 65 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74  e   Store result
1fae0 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75  s in priority qu
1faf0 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  eue pDest->iSDPa
1fb00 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20  rm only if.**   
1fb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb20 20 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72    the same recor
1fb30 64 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e  d has never been
1fb40 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20   stored before. 
1fb50 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20   The.**         
1fb60 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
1fb70 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50  x at pDest->iSDP
1fb80 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70  arm+1 hold all p
1fb90 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a  rior stores..*/.
1fba0 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f  #define SRT_Unio
1fbb0 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53  n        1  /* S
1fbc0 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b  tore result as k
1fbd0 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
1fbe0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1fbf0 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f  xcept       2  /
1fc00 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20  * Remove result 
1fc10 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64  from a UNION ind
1fc20 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1fc30 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33  T_Exists       3
1fc40 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20    /* Store 1 if 
1fc50 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f  the result is no
1fc60 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  t empty */.#defi
1fc70 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20  ne SRT_Discard  
1fc80 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74      4  /* Do not
1fc90 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74   save the result
1fca0 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64  s anywhere */.#d
1fcb0 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20  efine SRT_Fifo  
1fcc0 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f         5  /* Sto
1fcd0 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74  re result as dat
1fce0 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61  a with an automa
1fcf0 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  tic rowid */.#de
1fd00 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66  fine SRT_DistFif
1fd10 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65  o     6  /* Like
1fd20 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75   SRT_Fifo, but u
1fd30 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
1fd40 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ly */.#define SR
1fd50 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 20 37  T_Queue        7
1fd60 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1fd70 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f  t in an queue */
1fd80 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1fd90 74 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20  tQueue    8  /* 
1fda0 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20  Like SRT_Queue, 
1fdb0 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c  but unique resul
1fdc0 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54  ts only */../* T
1fdd0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1fde0 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f  se is ignored fo
1fdf0 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f  r all of the abo
1fe00 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67  ve */.#define Ig
1fe10 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58  norableOrderby(X
1fe20 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53  ) ((X->eDest)<=S
1fe30 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23  RT_DistQueue)..#
1fe40 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75  define SRT_Outpu
1fe50 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75  t       9  /* Ou
1fe60 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66  tput each row of
1fe70 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
1fe80 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20  ne SRT_Mem      
1fe90 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20     10  /* Store 
1fea0 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f  result in a memo
1feb0 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69  ry cell */.#defi
1fec0 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20  ne SRT_Set      
1fed0 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20     11  /* Store 
1fee0 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20  results as keys 
1fef0 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
1ff00 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d  define SRT_Ephem
1ff10 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72  Tab    12  /* Cr
1ff20 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74  eate transient t
1ff30 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b  ab and store lik
1ff40 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23  e SRT_Table */.#
1ff50 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75  define SRT_Corou
1ff60 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65  tine   13  /* Ge
1ff70 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20  nerate a single 
1ff80 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
1ff90 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62  .#define SRT_Tab
1ffa0 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20  le       14  /* 
1ffb0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1ffc0 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
1ffd0 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
1ffe0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1fff0 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  ce of this objec
20000 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72  t describes wher
20010 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20  e to put of the 
20020 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20  results of.** a 
20030 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
20040 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
20050 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44  ctDest {.  u8 eD
20060 65 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  est;            
20070 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73  /* How to dispos
20080 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  e of the results
20090 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61  .  On of SRT_* a
200a0 62 6f 76 65 2e 20 2a 2f 0a 20 20 69 6e 74 20 69  bove. */.  int i
200b0 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20  SDParm;         
200c0 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75  /* A parameter u
200d0 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74  sed by the eDest
200e0 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64   disposal method
200f0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b   */.  int iSdst;
20100 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61             /* Ba
20110 73 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72  se register wher
20120 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72  e results are wr
20130 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  itten */.  int n
20140 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Sdst;           
20150 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
20160 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
20170 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66   */.  char *zAff
20180 53 64 73 74 3b 20 20 20 20 20 20 2f 2a 20 41 66  Sdst;      /* Af
20190 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e  finity used when
201a0 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20   eDest==SRT_Set 
201b0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
201c0 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79  OrderBy;  /* Key
201d0 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54   columns for SRT
201e0 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44  _Queue and SRT_D
201f0 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a  istQueue */.};..
20200 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64  /*.** During cod
20210 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
20220 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20  statements that 
20230 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20  do inserts into 
20240 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a  AUTOINCREMENT.**
20250 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c   tables, the fol
20260 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  lowing informati
20270 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74  on is attached t
20280 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75  o the Table.u.au
20290 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74  toInc.p.** point
202a0 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69  er of each autoi
202b0 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74  ncrement table t
202c0 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69  o record some si
202d0 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  de information t
202e0 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20  hat.** the code 
202f0 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e  generator needs.
20300 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65    We have to kee
20310 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f  p per-table auto
20320 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66  increment.** inf
20330 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65  ormation in case
20340 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 6e   inserts are don
20350 65 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  e within trigger
20360 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20  s.  Triggers do 
20370 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20  not.** normally 
20380 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72  coordinate their
20390 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74   activities, but
203a0 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63   we do need to c
203b0 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a  oordinate the.**
203c0 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76   loading and sav
203d0 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65  ing of autoincre
203e0 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ment information
203f0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f  ..*/.struct Auto
20400 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f  incInfo {.  Auto
20410 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20  incInfo *pNext; 
20420 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62    /* Next info b
20430 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f  lock in a list o
20440 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20  f them all */.  
20450 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
20460 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74        /* Table t
20470 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72  his info block r
20480 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e  efers to */.  in
20490 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
204a0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
204b0 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
204c0 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
204d0 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20  g pTab */.  int 
204e0 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20  regCtr;         
204f0 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
20500 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65  ster holding the
20510 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a   rowid counter *
20520 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c  /.};../*.** At l
20530 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63  east one instanc
20540 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
20550 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
20560 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
20570 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74  .** trigger that
20580 20 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68   may be fired wh
20590 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49  ile parsing an I
205a0 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72  NSERT, UPDATE or
205b0 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65   DELETE.** state
205c0 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f  ment. All such o
205d0 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65  bjects are store
205e0 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20  d in the linked 
205f0 6c 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a  list headed at.*
20600 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  * Parse.pTrigger
20610 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20  Prg and deleted 
20620 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63  once statement c
20630 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62  ompilation has b
20640 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64  een.** completed
20650 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73  ..**.** A Vdbe s
20660 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20  ub-program that 
20670 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62  implements the b
20680 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61  ody and WHEN cla
20690 75 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a  use of trigger.*
206a0 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72  * TriggerPrg.pTr
206b0 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20  igger, assuming 
206c0 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  a default ON CON
206d0 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a  FLICT clause of.
206e0 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72  ** TriggerPrg.or
206f0 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20  conf, is stored 
20700 69 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72  in the TriggerPr
20710 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61  g.pProgram varia
20720 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73  ble..** The Pars
20730 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69  e.pTriggerPrg li
20740 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e  st never contain
20750 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69  s two entries wi
20760 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76  th the same.** v
20770 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70  alues for both p
20780 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f  Trigger and orco
20790 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72  nf..**.** The Tr
207a0 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
207b0 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[0] variable is
207c0 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f   set to a mask o
207d0 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a  f old.* columns.
207e0 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20  ** accessed (or 
207f0 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69  set to 0 for tri
20800 67 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61  ggers fired as a
20810 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52   result of INSER
20820 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29  T.** statements)
20830 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65  . Similarly, the
20840 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
20850 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65  mask[1] variable
20860 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20   is set to.** a 
20870 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  mask of new.* co
20880 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68  lumns used by th
20890 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74  e program..*/.st
208a0 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20  ruct TriggerPrg 
208b0 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  {.  Trigger *pTr
208c0 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54  igger;      /* T
208d0 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67  rigger this prog
208e0 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72  ram was coded fr
208f0 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  om */.  TriggerP
20900 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  rg *pNext;      
20910 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e  /* Next entry in
20920 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
20930 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62  rg list */.  Sub
20940 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
20950 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20  m;   /* Program 
20960 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72  implementing pTr
20970 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a  igger/orconf */.
20980 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20    int orconf;   
20990 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
209a0 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
209b0 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32   policy */.  u32
209c0 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20   aColmask[2];   
209d0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66       /* Masks of
209e0 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f   old.*, new.* co
209f0 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a  lumns accessed *
20a00 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
20a10 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65  yDbMask datatype
20a20 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b   for the bitmask
20a30 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64   of all attached
20a40 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
20a50 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
20a60 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65  TACHED>30.  type
20a70 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61  def unsigned cha
20a80 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54  r yDbMask[(SQLIT
20a90 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39  E_MAX_ATTACHED+9
20aa0 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44  )/8];.# define D
20ab0 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20  bMaskTest(M,I)  
20ac0 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28    (((M)[(I)/8]&(
20ad0 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29  1<<((I)&7)))!=0)
20ae0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
20af0 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d  Zero(M)      mem
20b00 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66  set((M),0,sizeof
20b10 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  (M)).# define Db
20b20 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20  MaskSet(M,I)    
20b30 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c   (M)[(I)/8]|=(1<
20b40 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65 66 69  <((I)&7)).# defi
20b50 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  ne DbMaskAllZero
20b60 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  (M)   sqlite3DbM
20b70 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20  askAllZero(M).# 
20b80 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e  define DbMaskNon
20b90 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74  Zero(M)   (sqlit
20ba0 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
20bb0 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74  M)==0).#else.  t
20bc0 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
20bd0 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64  int yDbMask;.# d
20be0 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74  efine DbMaskTest
20bf0 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28  (M,I)    (((M)&(
20c00 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49  ((yDbMask)1)<<(I
20c10 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65  )))!=0).# define
20c20 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20   DbMaskZero(M)  
20c30 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69      (M)=0.# defi
20c40 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49  ne DbMaskSet(M,I
20c50 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44  )     (M)|=(((yD
20c60 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23  bMask)1)<<(I)).#
20c70 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c   define DbMaskAl
20c80 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d  lZero(M)   (M)==
20c90 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  0.# define DbMas
20ca0 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d  kNonZero(M)   (M
20cb0 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  )!=0.#endif../*.
20cc0 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72  ** An SQL parser
20cd0 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70   context.  A cop
20ce0 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  y of this struct
20cf0 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68  ure is passed th
20d00 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72  rough.** the par
20d10 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74  ser and down int
20d20 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72  o all the parser
20d30 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20   action routine 
20d40 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63  in order to.** c
20d50 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f  arry around info
20d60 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  rmation that is 
20d70 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e  global to the en
20d80 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a  tire parse..**.*
20d90 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20  * The structure 
20da0 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20  is divided into 
20db0 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e  two parts.  When
20dc0 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
20dd0 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  code.** generate
20de0 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73   call themselves
20df0 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68   recursively, th
20e00 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20  e first part of 
20e10 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  the structure.**
20e20 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74   is constant but
20e30 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74   the second part
20e40 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65   is reset at the
20e50 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65   beginning and e
20e60 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65  nd of.** each re
20e70 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  cursion..**.** T
20e80 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e  he nTableLock an
20e90 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72  d aTableLock var
20ea0 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  iables are only 
20eb0 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72  used if the shar
20ec0 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65 61 74  ed-cache.** feat
20ed0 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28  ure is enabled (
20ee0 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d  if sqlite3Tsd()-
20ef0 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69  >useSharedData i
20f00 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72  s true). They ar
20f10 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f  e.** used to sto
20f20 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61  re the set of ta
20f30 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72  ble-locks requir
20f40 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d  ed by the statem
20f50 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d  ent being.** com
20f60 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20  piled. Function 
20f70 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
20f80 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64  () is used to ad
20f90 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65  d entries to the
20fa0 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72  .** list..*/.str
20fb0 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71  uct Parse {.  sq
20fc0 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
20fd0 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64     /* The main d
20fe0 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72  atabase structur
20ff0 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72  e */.  char *zEr
21000 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41  rMsg;       /* A
21010 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
21020 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65  */.  Vdbe *pVdbe
21030 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  ;         /* An 
21040 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75  engine for execu
21050 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79  ting database by
21060 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  tecode */.  int 
21070 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
21080 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20   /* Return code 
21090 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a  from execution *
210a0 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53  /.  u8 colNamesS
210b0 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45  et;      /* TRUE
210c0 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e   after OP_Column
210d0 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73  Name has been is
210e0 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f  sued to pVdbe */
210f0 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d  .  u8 checkSchem
21100 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65  a;      /* Cause
21110 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  s schema cookie 
21120 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65  check after an e
21130 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73  rror */.  u8 nes
21140 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ted;           /
21150 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
21160 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20  ed calls to the 
21170 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65  parser/code gene
21180 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54  rator */.  u8 nT
21190 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
211a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d  /* Number of tem
211b0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
211c0 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a   in aTempReg[] *
211d0 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72  /.  u8 isMultiWr
211e0 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65  ite;     /* True
211f0 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
21200 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20  y modify/insert 
21210 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
21220 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20  .  u8 mayAbort; 
21230 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
21240 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
21250 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20   throw an ABORT 
21260 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75  exception */.  u
21270 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20  8 hasCompound;  
21280 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69      /* Need to i
21290 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d  nvoke convertCom
212a0 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
212b0 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20  query() */.  u8 
212c0 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20  okConstFactor;  
212d0 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f    /* OK to facto
212e0 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20  r out constants 
212f0 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 4c  */.  u8 disableL
21300 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d  ookaside; /* Num
21310 62 65 72 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f  ber of times loo
21320 6b 61 73 69 64 65 20 68 61 73 20 62 65 65 6e 20  kaside has been 
21330 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20 75 38  disabled */.  u8
21340 20 64 69 73 61 62 6c 65 56 74 61 62 3b 20 20 20   disableVtab;   
21350 20 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 61 6c     /* Disable al
21360 6c 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  l virtual tables
21370 20 66 6f 72 20 74 68 69 73 20 70 61 72 73 65 20   for this parse 
21380 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52  */.  int nRangeR
21390 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  eg;       /* Siz
213a0 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  e of the tempora
213b0 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
213c0 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67  k */.  int iRang
213d0 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46  eReg;       /* F
213e0 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e  irst register in
213f0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
21400 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
21410 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
21420 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
21430 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
21440 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20    int nTab;     
21450 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
21460 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61   of previously a
21470 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75  llocated VDBE cu
21480 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  rsors */.  int n
21490 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
214a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
214b0 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73  ory cells used s
214c0 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 73  o far */.  int s
214d0 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20  zOpAlloc;       
214e0 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f  /* Bytes of memo
214f0 72 79 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74  ry space allocat
21500 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b  ed for Vdbe.aOp[
21510 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66  ] */.  int iSelf
21520 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  Tab;        /* T
21530 61 62 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20  able associated 
21540 77 69 74 68 20 61 6e 20 69 6e 64 65 78 20 6f 6e  with an index on
21550 20 65 78 70 72 2c 20 6f 72 20 6e 65 67 61 74 69   expr, or negati
21560 76 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ve.             
21570 20 20 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20            ** of 
21580 74 68 65 20 62 61 73 65 20 72 65 67 69 73 74 65  the base registe
21590 72 20 64 75 72 69 6e 67 20 63 68 65 63 6b 2d 63  r during check-c
215a0 6f 6e 73 74 72 61 69 6e 74 20 65 76 61 6c 20 2a  onstraint eval *
215b0 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20  /.  int nLabel; 
215c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
215d0 2a 6e 65 67 61 74 69 76 65 2a 20 6f 66 20 74 68  *negative* of th
215e0 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65  e number of labe
215f0 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74  ls used */.  int
21600 20 6e 4c 61 62 65 6c 41 6c 6c 6f 63 3b 20 20 20   nLabelAlloc;   
21610 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
21620 6c 6f 74 73 20 69 6e 20 61 4c 61 62 65 6c 20 2a  lots in aLabel *
21630 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b  /.  int *aLabel;
21640 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
21650 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61  e to hold the la
21660 62 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  bels */.  ExprLi
21670 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f  st *pConstExpr;/
21680 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
21690 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65  ssions */.  Toke
216a0 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65  n constraintName
216b0 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  ;/* Name of the 
216c0 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65  constraint curre
216d0 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65  ntly being parse
216e0 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77  d */.  yDbMask w
216f0 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53  riteMask;   /* S
21700 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61  tart a write tra
21710 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73  nsaction on thes
21720 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  e databases */. 
21730 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d   yDbMask cookieM
21740 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b  ask;  /* Bitmask
21750 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66   of schema verif
21760 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ied databases */
21770 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b  .  int regRowid;
21780 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
21790 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69  ter holding rowi
217a0 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c  d of CREATE TABL
217b0 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  E entry */.  int
217c0 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20   regRoot;       
217d0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
217e0 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20  lding root page 
217f0 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f  number for new o
21800 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20  bjects */.  int 
21810 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20  nMaxArg;        
21820 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73   /* Max args pas
21830 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63  sed to user func
21840 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67  tion by sub-prog
21850 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65  ram */.  int nSe
21860 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  lect;         /*
21870 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43   Number of SELEC
21880 54 20 73 74 6d 74 73 2e 20 43 6f 75 6e 74 65 72  T stmts. Counter
21890 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 49   for Select.selI
218a0 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  d */.#ifndef SQL
218b0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
218c0 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62  CACHE.  int nTab
218d0 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f  leLock;        /
218e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b  * Number of lock
218f0 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20  s in aTableLock 
21900 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a  */.  TableLock *
21910 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52  aTableLock; /* R
21920 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f  equired table lo
21930 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63  cks for shared-c
21940 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e  ache mode */.#en
21950 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  dif.  AutoincInf
21960 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e  o *pAinc;  /* In
21970 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
21980 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f  AUTOINCREMENT co
21990 75 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61 72 73  unters */.  Pars
219a0 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20  e *pToplevel;   
219b0 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74   /* Parse struct
219c0 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f  ure for main pro
219d0 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a  gram (or NULL) *
219e0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67  /.  Table *pTrig
219f0 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c  gerTab;  /* Tabl
21a00 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62  e triggers are b
21a10 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a  eing coded for *
21a20 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 65  /.  Parse *pPare
21a30 6e 74 50 61 72 73 65 3b 20 2f 2a 20 50 61 72 65  ntParse; /* Pare
21a40 6e 74 20 70 61 72 73 65 72 20 69 66 20 74 68 69  nt parser if thi
21a50 73 20 70 61 72 73 65 72 20 69 73 20 6e 65 73 74  s parser is nest
21a60 65 64 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  ed */.  int addr
21a70 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20  CrTab;       /* 
21a80 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72  Address of OP_Cr
21a90 65 61 74 65 42 74 72 65 65 20 6f 70 63 6f 64 65  eateBtree opcode
21aa0 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   on CREATE TABLE
21ab0 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79   */.  u32 nQuery
21ac0 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73  Loop;      /* Es
21ad0 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72  t number of iter
21ae0 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72  ations of a quer
21af0 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a  y (10*log2(N)) *
21b00 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b  /.  u32 oldmask;
21b10 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
21b20 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
21b30 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a  s referenced */.
21b40 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20    u32 newmask;  
21b50 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
21b60 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f new.* columns 
21b70 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
21b80 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20  u8 eTriggerOp;  
21b90 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54       /* TK_UPDAT
21ba0 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20  E, TK_INSERT or 
21bb0 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75  TK_DELETE */.  u
21bc0 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20  8 eOrconf;      
21bd0 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f      /* Default O
21be0 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63  N CONFLICT polic
21bf0 79 20 66 6f 72 20 74 72 69 67 67 65 72 20 73 74  y for trigger st
21c00 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61  eps */.  u8 disa
21c10 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a  bleTriggers;  /*
21c20 20 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65   True to disable
21c30 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20   triggers */..  
21c40 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
21c50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21c60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21c70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21c80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a  ***********.  **
21c90 20 46 69 65 6c 64 73 20 61 62 6f 76 65 20 6d 75   Fields above mu
21ca0 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  st be initialize
21cb0 64 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20  d to zero.  The 
21cc0 66 69 65 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c  fields that foll
21cd0 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f  ow,.  ** down to
21ce0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
21cf0 66 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  f the recursive 
21d00 73 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20  section, do not 
21d10 6e 65 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20  need to be.  ** 
21d20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20 74  initialized as t
21d30 68 65 79 20 77 69 6c 6c 20 62 65 20 73 65 74 20  hey will be set 
21d40 62 65 66 6f 72 65 20 62 65 69 6e 67 20 75 73 65  before being use
21d50 64 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79  d.  The boundary
21d60 20 69 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69   is.  ** determi
21d70 6e 65 64 20 62 79 20 6f 66 66 73 65 74 6f 66 28  ned by offsetof(
21d80 50 61 72 73 65 2c 61 54 65 6d 70 52 65 67 29 2e  Parse,aTempReg).
21d90 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
21da0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21db0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21dc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21dd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
21de0 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38    int aTempReg[8
21df0 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c  ];        /* Hol
21e00 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65  ding area for te
21e10 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
21e20 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61  s */.  Token sNa
21e30 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f  meToken;       /
21e40 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71  * Token with unq
21e50 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20  ualified schema 
21e60 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a  object name */..
21e70 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    /*************
21e80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21e90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21eb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a  ***********.  **
21ec0 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61   Above is consta
21ed0 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72  nt between recur
21ee0 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73  sions.  Below is
21ef0 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e   reset before an
21f00 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63  d after.  ** eac
21f10 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68  h recursion.  Th
21f20 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65  e boundary betwe
21f30 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65 67  en these two reg
21f40 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e  ions is determin
21f50 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66  ed.  ** using of
21f60 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61  fsetof(Parse,sLa
21f70 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65 20  stToken) so the 
21f80 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c 64  sLastToken field
21f90 20 6d 75 73 74 20 62 65 20 74 68 65 0a 20 20 2a   must be the.  *
21fa0 2a 20 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e  * first field in
21fb0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72   the recursive r
21fc0 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  egion..  *******
21fd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21fe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ff0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22000 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22010 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73  */..  Token sLas
22020 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a  tToken;       /*
22030 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20   The last token 
22040 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56 61  parsed */.  ynVa
22050 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  r nVar;         
22060 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
22070 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73  of '?' variables
22080 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c   seen in the SQL
22090 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20   so far */.  u8 
220a0 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20  iPkSortOrder;   
220b0 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72         /* ASC or
220c0 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45   DESC for INTEGE
220d0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  R PRIMARY KEY */
220e0 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20  .  u8 explain;  
220f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22100 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c  True if the EXPL
22110 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e  AIN flag is foun
22120 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a  d on the query *
22130 2f 0a 23 69 66 20 21 28 64 65 66 69 6e 65 64 28  /.#if !(defined(
22140 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
22150 55 41 4c 54 41 42 4c 45 29 20 26 26 20 64 65 66  UALTABLE) && def
22160 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
22170 5f 41 4c 54 45 52 54 41 42 4c 45 29 29 0a 20 20  _ALTERTABLE)).  
22180 75 38 20 65 50 61 72 73 65 4d 6f 64 65 3b 20 20  u8 eParseMode;  
22190 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 41 52            /* PAR
221a0 53 45 5f 4d 4f 44 45 5f 58 58 58 20 63 6f 6e 73  SE_MODE_XXX cons
221b0 74 61 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tant */.#endif.#
221c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
221d0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
221e0 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b    int nVtabLock;
221f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
22200 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
22210 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20   tables to lock 
22220 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
22230 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20  nHeight;        
22240 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
22250 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20  ion tree height 
22260 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73  of current sub-s
22270 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66  elect */.#ifndef
22280 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
22290 4c 41 49 4e 0a 20 20 69 6e 74 20 61 64 64 72 45  LAIN.  int addrE
222a0 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20  xplain;         
222b0 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 63   /* Address of c
222c0 75 72 72 65 6e 74 20 4f 50 5f 45 78 70 6c 61 69  urrent OP_Explai
222d0 6e 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64  n opcode */.#end
222e0 69 66 0a 20 20 56 4c 69 73 74 20 2a 70 56 4c 69  if.  VList *pVLi
222f0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
22300 2a 20 4d 61 70 70 69 6e 67 20 62 65 74 77 65 65  * Mapping betwee
22310 6e 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73  n variable names
22320 20 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a 2f 0a   and numbers */.
22330 20 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61    Vdbe *pReprepa
22340 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56  re;         /* V
22350 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72  M being reprepar
22360 65 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65  ed (sqlite3Repre
22370 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e  pare()) */.  con
22380 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20  st char *zTail; 
22390 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51         /* All SQ
223a0 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20  L text past the 
223b0 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70  last semicolon p
223c0 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65  arsed */.  Table
223d0 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20   *pNewTable;    
223e0 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20       /* A table 
223f0 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65  being constructe
22400 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c  d by CREATE TABL
22410 45 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e  E */.  Index *pN
22420 65 77 49 6e 64 65 78 3b 20 20 20 20 20 20 20 20  ewIndex;        
22430 20 2f 2a 20 41 6e 20 69 6e 64 65 78 20 62 65 69   /* An index bei
22440 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ng constructed b
22450 79 20 43 52 45 41 54 45 20 49 4e 44 45 58 2e 0a  y CREATE INDEX..
22460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22470 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41              ** A
22480 6c 73 6f 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  lso used to hold
22490 20 72 65 64 75 6e 64 61 6e 74 20 55 4e 49 51 55   redundant UNIQU
224a0 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 0a 20 20  E constraints.  
224b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224c0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 64 75 72            ** dur
224d0 69 6e 67 20 61 20 52 45 4e 41 4d 45 20 43 4f 4c  ing a RENAME COL
224e0 55 4d 4e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  UMN */.  Trigger
224f0 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20   *pNewTrigger;  
22500 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e     /* Trigger un
22510 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79  der construct by
22520 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45   a CREATE TRIGGE
22530 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  R */.  const cha
22540 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
22550 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61   /* The 6th para
22560 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75  meter to db->xAu
22570 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a  th callbacks */.
22580 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
22590 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
225a0 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20  .  Token sArg;  
225b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
225c0 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  Complete text of
225d0 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65   a module argume
225e0 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a  nt */.  Table **
225f0 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20  apVtabLock;     
22600 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
22610 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e  virtual tables n
22620 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a  eeding locking *
22630 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65  /.#endif.  Table
22640 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20   *pZombieTab;   
22650 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
22660 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f  Table objects to
22670 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f   delete after co
22680 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67  de gen */.  Trig
22690 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72  gerPrg *pTrigger
226a0 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20  Prg;  /* Linked 
226b0 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72  list of coded tr
226c0 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68  iggers */.  With
226d0 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
226e0 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
226f0 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
22700 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20   NULL */.  With 
22710 2a 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20  *pWithToFree;   
22720 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69       /* Free thi
22730 73 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74  s WITH object at
22740 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
22750 70 61 72 73 65 20 2a 2f 0a 23 69 66 6e 64 65 66  parse */.#ifndef
22760 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54   SQLITE_OMIT_ALT
22770 45 52 54 41 42 4c 45 0a 20 20 52 65 6e 61 6d 65  ERTABLE.  Rename
22780 54 6f 6b 65 6e 20 2a 70 52 65 6e 61 6d 65 3b 20  Token *pRename; 
22790 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 73 20 73 75      /* Tokens su
227a0 62 6a 65 63 74 20 74 6f 20 72 65 6e 61 6d 69 6e  bject to renamin
227b0 67 20 62 79 20 41 4c 54 45 52 20 54 41 42 4c 45  g by ALTER TABLE
227c0 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23   */.#endif.};..#
227d0 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44  define PARSE_MOD
227e0 45 5f 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20  E_NORMAL        
227f0 30 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  0.#define PARSE_
22800 4d 4f 44 45 5f 44 45 43 4c 41 52 45 5f 56 54 41  MODE_DECLARE_VTA
22810 42 20 20 31 0a 23 64 65 66 69 6e 65 20 50 41 52  B  1.#define PAR
22820 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43  SE_MODE_RENAME_C
22830 4f 4c 55 4d 4e 20 32 0a 23 64 65 66 69 6e 65 20  OLUMN 2.#define 
22840 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d  PARSE_MODE_RENAM
22850 45 5f 54 41 42 4c 45 20 20 33 0a 0a 2f 2a 0a 2a  E_TABLE  3../*.*
22860 2a 20 53 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e  * Sizes and poin
22870 74 65 72 73 20 6f 66 20 76 61 72 69 6f 75 73 20  ters of various 
22880 70 61 72 74 73 20 6f 66 20 74 68 65 20 50 61 72  parts of the Par
22890 73 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64  se object..*/.#d
228a0 65 66 69 6e 65 20 50 41 52 53 45 5f 48 44 52 5f  efine PARSE_HDR_
228b0 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  SZ offsetof(Pars
228c0 65 2c 61 54 65 6d 70 52 65 67 29 20 2f 2a 20 52  e,aTempReg) /* R
228d0 65 63 75 72 73 69 76 65 20 70 61 72 74 20 77 2f  ecursive part w/
228e0 6f 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64  o aColCache*/.#d
228f0 65 66 69 6e 65 20 50 41 52 53 45 5f 52 45 43 55  efine PARSE_RECU
22900 52 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28  RSE_SZ offsetof(
22910 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e  Parse,sLastToken
22920 29 20 20 20 20 2f 2a 20 52 65 63 75 72 73 69 76  )    /* Recursiv
22930 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e  e part */.#defin
22940 65 20 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20  e PARSE_TAIL_SZ 
22950 28 73 69 7a 65 6f 66 28 50 61 72 73 65 29 2d 50  (sizeof(Parse)-P
22960 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29  ARSE_RECURSE_SZ)
22970 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76   /* Non-recursiv
22980 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e  e part */.#defin
22990 65 20 50 41 52 53 45 5f 54 41 49 4c 28 58 29 20  e PARSE_TAIL(X) 
229a0 28 28 28 63 68 61 72 2a 29 28 58 29 29 2b 50 41  (((char*)(X))+PA
229b0 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20  RSE_RECURSE_SZ) 
229c0 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74   /* Pointer to t
229d0 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65  ail */../*.** Re
229e0 74 75 72 6e 20 74 72 75 65 20 69 66 20 63 75 72  turn true if cur
229f0 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e  rently inside an
22a00 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
22a10 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f  _vtab() call..*/
22a20 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
22a30 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
22a40 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45  .  #define IN_DE
22a50 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c  CLARE_VTAB 0.#el
22a60 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  se.  #define IN_
22a70 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50  DECLARE_VTAB (pP
22a80 61 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65  arse->eParseMode
22a90 3d 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43  ==PARSE_MODE_DEC
22aa0 4c 41 52 45 5f 56 54 41 42 29 0a 23 65 6e 64 69  LARE_VTAB).#endi
22ab0 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
22ac0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
22ad0 54 41 42 4c 45 29 0a 20 20 23 64 65 66 69 6e 65  TABLE).  #define
22ae0 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43   IN_RENAME_OBJEC
22af0 54 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  T 0.#else.  #def
22b00 69 6e 65 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42  ine IN_RENAME_OB
22b10 4a 45 43 54 20 28 70 50 61 72 73 65 2d 3e 65 50  JECT (pParse->eP
22b20 61 72 73 65 4d 6f 64 65 3e 3d 50 41 52 53 45 5f  arseMode>=PARSE_
22b30 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55  MODE_RENAME_COLU
22b40 4d 4e 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  MN).#endif..#if 
22b50 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
22b60 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
22b70 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
22b80 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
22b90 42 4c 45 29 0a 20 20 23 64 65 66 69 6e 65 20 49  BLE).  #define I
22ba0 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52 53 45 20  N_SPECIAL_PARSE 
22bb0 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  0.#else.  #defin
22bc0 65 20 49 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52  e IN_SPECIAL_PAR
22bd0 53 45 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72  SE (pParse->ePar
22be0 73 65 4d 6f 64 65 21 3d 50 41 52 53 45 5f 4d 4f  seMode!=PARSE_MO
22bf0 44 45 5f 4e 4f 52 4d 41 4c 29 0a 23 65 6e 64 69  DE_NORMAL).#endi
22c00 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
22c10 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
22c20 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
22c30 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20  can be declared 
22c40 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75  on a stack and u
22c50 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74  sed.** to save t
22c60 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  he Parse.zAuthCo
22c70 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74  ntext value so t
22c80 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
22c90 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f  stored later..*/
22ca0 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74  .struct AuthCont
22cb0 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ext {.  const ch
22cc0 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
22cd0 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64  ;   /* Put saved
22ce0 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
22cf0 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61  ext here */.  Pa
22d00 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
22d10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
22d20 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
22d30 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69   */.};../*.** Bi
22d40 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72  tfield flags for
22d50 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72   P5 value in var
22d60 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  ious opcodes..**
22d70 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
22d80 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20  aints (enforced 
22d90 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
22da0 2a 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  *    OPFLAG_LENG
22db0 54 48 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49  THARG    == SQLI
22dc0 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a  TE_FUNC_LENGTH.*
22dd0 2a 20 20 20 20 4f 50 46 4c 41 47 5f 54 59 50 45  *    OPFLAG_TYPE
22de0 4f 46 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49  OFARG    == SQLI
22df0 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a  TE_FUNC_TYPEOF.*
22e00 2a 20 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  *    OPFLAG_BULK
22e10 43 53 52 20 20 20 20 20 20 3d 3d 20 42 54 52 45  CSR      == BTRE
22e20 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20  E_BULKLOAD.**   
22e30 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20   OPFLAG_SEEKEQ  
22e40 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45       == BTREE_SE
22e50 45 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c  EK_EQ.**    OPFL
22e60 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20  AG_FORDELETE    
22e70 3d 3d 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45  == BTREE_FORDELE
22e80 54 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  TE.**    OPFLAG_
22e90 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20  SAVEPOSITION == 
22ea0 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49  BTREE_SAVEPOSITI
22eb0 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  ON.**    OPFLAG_
22ec0 41 55 58 44 45 4c 45 54 45 20 20 20 20 3d 3d 20  AUXDELETE    == 
22ed0 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 0a  BTREE_AUXDELETE.
22ee0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22ef0 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20  G_NCHANGE       
22f00 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e  0x01    /* OP_In
22f10 73 65 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64  sert: Set to upd
22f20 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20  ate db->nChange 
22f30 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
22f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f50 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20          /* Also 
22f60 75 73 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20  used in P2 (not 
22f70 50 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65  P5) of OP_Delete
22f80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22f90 41 47 5f 4e 4f 43 48 4e 47 20 20 20 20 20 20 20  AG_NOCHNG       
22fa0 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 56   0x01    /* OP_V
22fb0 43 6f 6c 75 6d 6e 20 6e 6f 63 68 61 6e 67 65 20  Column nochange 
22fc0 66 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64  for UPDATE */.#d
22fd0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48  efine OPFLAG_EPH
22fe0 45 4d 20 20 20 20 20 20 20 20 20 30 78 30 31 20  EM         0x01 
22ff0 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a     /* OP_Column:
23000 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75   Ephemeral outpu
23010 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69  t is ok */.#defi
23020 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  ne OPFLAG_LASTRO
23030 57 49 44 20 20 20 20 20 30 78 32 30 20 20 20 20  WID     0x20    
23040 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65  /* Set to update
23050 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a   db->lastRowid *
23060 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
23070 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30  _ISUPDATE      0
23080 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f  x04    /* This O
23090 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73  P_Insert is an s
230a0 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  ql UPDATE */.#de
230b0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45  fine OPFLAG_APPE
230c0 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20  ND        0x08  
230d0 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b    /* This is lik
230e0 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
230f0 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  end */.#define O
23100 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
23110 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54  ULT 0x10    /* T
23120 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65  ry to avoid a se
23130 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72  ek in BtreeInser
23140 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  t() */.#define O
23150 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20  PFLAG_ISNOOP    
23160 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f      0x40    /* O
23170 50 5f 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72  P_Delete does pr
23180 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e  e-update-hook on
23190 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ly */.#define OP
231a0 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20  FLAG_LENGTHARG  
231b0 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50     0x40    /* OP
231c0 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65  _Column only use
231d0 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a  d for length() *
231e0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
231f0 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30  _TYPEOFARG     0
23200 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x80    /* OP_Col
23210 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
23220 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64  r typeof() */.#d
23230 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c  efine OPFLAG_BUL
23240 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20  KCSR       0x01 
23250 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20     /* OP_Open** 
23260 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c  used to open bul
23270 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66  k cursor */.#def
23280 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  ine OPFLAG_SEEKE
23290 51 20 20 20 20 20 20 20 20 30 78 30 32 20 20 20  Q        0x02   
232a0 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75   /* OP_Open** cu
232b0 72 73 6f 72 20 75 73 65 73 20 45 51 20 73 65 65  rsor uses EQ see
232c0 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  k only */.#defin
232d0 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  e OPFLAG_FORDELE
232e0 54 45 20 20 20 20 20 30 78 30 38 20 20 20 20 2f  TE     0x08    /
232f0 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64  * OP_Open should
23300 20 75 73 65 20 42 54 52 45 45 5f 46 4f 52 44 45   use BTREE_FORDE
23310 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
23320 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20  OPFLAG_P2ISREG  
23330 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20       0x10    /* 
23340 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20  P2 to OP_Open** 
23350 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75  is a register nu
23360 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mber */.#define 
23370 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20  OPFLAG_PERMUTE  
23380 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
23390 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20  OP_Compare: use 
233a0 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  the permutation 
233b0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
233c0 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 20  G_SAVEPOSITION  
233d0 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65  0x02    /* OP_De
233e0 6c 65 74 65 2f 49 6e 73 65 72 74 3a 20 73 61 76  lete/Insert: sav
233f0 65 20 63 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a  e cursor pos */.
23400 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41  #define OPFLAG_A
23410 55 58 44 45 4c 45 54 45 20 20 20 20 20 30 78 30  UXDELETE     0x0
23420 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  4    /* OP_Delet
23430 65 3a 20 69 6e 64 65 78 20 69 6e 20 61 20 44 45  e: index in a DE
23440 4c 45 54 45 20 6f 70 20 2a 2f 0a 23 64 65 66 69  LETE op */.#defi
23450 6e 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47  ne OPFLAG_NOCHNG
23460 5f 4d 41 47 49 43 20 20 30 78 36 64 20 20 20 20  _MAGIC  0x6d    
23470 2f 2a 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  /* OP_MakeRecord
23480 3a 20 73 65 72 69 61 6c 74 79 70 65 20 31 30 20  : serialtype 10 
23490 69 73 20 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20  is ok */../*. * 
234a0 45 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65  Each trigger pre
234b0 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61  sent in the data
234c0 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
234d0 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74  tored as an inst
234e0 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63  ance of. * struc
234f0 74 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a  t Trigger.. *. *
23500 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73   Pointers to ins
23510 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74  tances of struct
23520 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f   Trigger are sto
23530 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e  red in two ways.
23540 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74  . * 1. In the "t
23550 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61  rigHash" hash ta
23560 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65  ble (part of the
23570 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72   sqlite3* that r
23580 65 70 72 65 73 65 6e 74 73 20 74 68 65 0a 20 2a  epresents the. *
23590 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54      database). T
235a0 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67  his allows Trigg
235b0 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f  er structures to
235c0 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79   be retrieved by
235d0 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c   name.. * 2. All
235e0 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69   triggers associ
235f0 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67  ated with a sing
23600 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20  le table form a 
23610 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69  linked list, usi
23620 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65  ng the. *    pNe
23630 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72  xt member of str
23640 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70  uct Trigger. A p
23650 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69  ointer to the fi
23660 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
23670 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20  he. *    linked 
23680 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61  list is stored a
23690 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22  s the "pTrigger"
236a0 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61   member of the a
236b0 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20  ssociated. *    
236c0 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a  struct Table.. *
236d0 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69  . * The "step_li
236e0 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74  st" member point
236f0 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  s to the first e
23700 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b  lement of a link
23710 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61  ed list. * conta
23720 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74  ining the SQL st
23730 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
23740 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65  ed as the trigge
23750 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73  r program.. */.s
23760 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a  truct Trigger {.
23770 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
23780 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
23790 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69   name of the tri
237a0 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20  gger            
237b0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
237c0 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20   char *table;   
237d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
237e0 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f  table or view to
237f0 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
23800 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20  er applies */.  
23810 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
23820 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
23830 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f  f TK_DELETE, TK_
23840 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
23850 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75  T         */.  u
23860 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20  8 tr_tm;        
23870 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
23880 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c   TRIGGER_BEFORE,
23890 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a   TRIGGER_AFTER *
238a0 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b  /.  Expr *pWhen;
238b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
238c0 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  he WHEN clause o
238d0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
238e0 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a   (may be NULL) *
238f0 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c  /.  IdList *pCol
23900 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49  umns;       /* I
23910 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44  f this is an UPD
23920 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c  ATE OF <column-l
23930 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20  ist> trigger,.  
23940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23950 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c             the <
23960 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20  column-list> is 
23970 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
23980 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
23990 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65  ;        /* Sche
239a0 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
239b0 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53  e trigger */.  S
239c0 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d  chema *pTabSchem
239d0 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  a;     /* Schema
239e0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
239f0 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67  table */.  Trigg
23a00 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73  erStep *step_lis
23a10 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20  t; /* Link list 
23a20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  of trigger progr
23a30 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20  am steps        
23a40 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65       */.  Trigge
23a50 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  r *pNext;       
23a60 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65    /* Next trigge
23a70 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
23a80 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d  h the table */.}
23a90 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67  ;../*.** A trigg
23aa0 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42  er is either a B
23ab0 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45  EFORE or an AFTE
23ac0 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20  R trigger.  The 
23ad0 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61  following consta
23ae0 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65  nts.** determine
23af0 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66   which..**.** If
23b00 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69   there are multi
23b10 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f  ple triggers, yo
23b20 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20  u might of some 
23b30 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20  BEFORE and some 
23b40 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61  AFTER..** In tha
23b50 74 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e  t cases, the con
23b60 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e  stants below can
23b70 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65   be ORed togethe
23b80 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52  r..*/.#define TR
23b90 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a  IGGER_BEFORE  1.
23ba0 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
23bb0 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a  AFTER   2../*. *
23bc0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
23bd0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
23be0 65 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  ep is used to st
23bf0 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c  ore a single SQL
23c00 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68   statement. * th
23c10 61 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20  at is a part of 
23c20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  a trigger-progra
23c30 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63  m.. *. * Instanc
23c40 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
23c50 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f  ggerStep are sto
23c60 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20  red in a singly 
23c70 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e  linked list (lin
23c80 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65  ked. * using the
23c90 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29   "pNext" member)
23ca0 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74   referenced by t
23cb0 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
23cc0 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 20 2a 20  ember of the. * 
23cd0 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63  associated struc
23ce0 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e  t Trigger instan
23cf0 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c  ce. The first el
23d00 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e  ement of the lin
23d10 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74  ked list is. * t
23d20 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66  he first step of
23d30 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f   the trigger-pro
23d40 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20  gram.. *. * The 
23d50 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69  "op" member indi
23d60 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74 68  cates whether th
23d70 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45 22  is is a "DELETE"
23d80 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44  , "INSERT", "UPD
23d90 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45  ATE" or. * "SELE
23da0 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54  CT" statement. T
23db0 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74  he meanings of t
23dc0 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73  he other members
23dd0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
23de0 79 20 74 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f  y the. * value o
23df0 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77  f "op" as follow
23e00 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20  s:. *. * (op == 
23e10 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72  TK_INSERT). * or
23e20 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65  conf    -> store
23e30 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  s the ON CONFLIC
23e40 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70  T algorithm. * p
23e50 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74  Select   -> If t
23e60 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
23e70 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54   INTO ... SELECT
23e80 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
23e90 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
23ea0 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
23eb0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
23ec0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
23ed0 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55  nt. Otherwise NU
23ee0 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20  LL.. * zTarget  
23ef0 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d   -> Dequoted nam
23f00 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
23f10 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20  o insert into.. 
23f20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49  * pExprList -> I
23f30 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
23f40 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c  ERT INTO ... VAL
23f50 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  UES ... statemen
23f60 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
23f70 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
23f80 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65  res values to be
23f90 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72   inserted. Other
23fa0 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49  wise NULL.. * pI
23fb0 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68  dList   -> If th
23fc0 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
23fd0 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d  INTO ... (<colum
23fe0 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53  n-names>) VALUES
23ff0 20 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20 20 20   .... *         
24000 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20       statement, 
24010 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73  then this stores
24020 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65   the column-name
24030 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20  s to be. *      
24040 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64          inserted
24050 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70   into.. *. * (op
24060 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20   == TK_DELETE). 
24070 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44  * zTarget   -> D
24080 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20  equoted name of 
24090 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c  the table to del
240a0 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68  ete from.. * pWh
240b0 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
240c0 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
240d0 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  e DELETE stateme
240e0 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
240f0 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
24100 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
24110 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f  e NULL.. *. * (o
24120 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a  p == TK_UPDATE).
24130 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
24140 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
24150 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70   the table to up
24160 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20  date.. * pWhere 
24170 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
24180 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50  clause of the UP
24190 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
241a0 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
241b0 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
241c0 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
241d0 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  LL.. * pExprList
241e0 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68   -> A list of th
241f0 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64  e columns to upd
24200 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72  ate and the expr
24210 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74  essions to updat
24220 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  e. *            
24230 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73    them to. See s
24240 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64  qlite3Update() d
24250 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  ocumentation of 
24260 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20  "pChanges". *   
24270 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d             argum
24280 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75  ent.. *. */.stru
24290 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b  ct TriggerStep {
242a0 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
242b0 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
242c0 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f  f TK_DELETE, TK_
242d0 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
242e0 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a  T, TK_SELECT */.
242f0 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20    u8 orconf;    
24300 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c         /* OE_Rol
24310 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20  lback etc. */.  
24320 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20  Trigger *pTrig; 
24330 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67       /* The trig
24340 67 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74  ger that this st
24350 65 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20  ep is a part of 
24360 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65  */.  Select *pSe
24370 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c  lect;     /* SEL
24380 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72  ECT statement or
24390 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49   RHS of INSERT I
243a0 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a  NTO SELECT ... *
243b0 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65  /.  char *zTarge
243c0 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67  t;       /* Targ
243d0 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c  et table for DEL
243e0 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53  ETE, UPDATE, INS
243f0 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ERT */.  Expr *p
24400 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a  Where;        /*
24410 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
24420 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20  e for DELETE or 
24430 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a  UPDATE steps */.
24440 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70    ExprList *pExp
24450 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c  rList; /* SET cl
24460 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 20  ause for UPDATE 
24470 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64  */.  IdList *pId
24480 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  List;     /* Col
24490 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e  umn names for IN
244a0 53 45 52 54 20 2a 2f 0a 20 20 55 70 73 65 72 74  SERT */.  Upsert
244b0 20 2a 70 55 70 73 65 72 74 3b 20 20 20 20 20 2f   *pUpsert;     /
244c0 2a 20 55 70 73 65 72 74 20 63 6c 61 75 73 65 73  * Upsert clauses
244d0 20 6f 6e 20 61 6e 20 49 4e 53 45 52 54 20 2a 2f   on an INSERT */
244e0 0a 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20  .  char *zSpan; 
244f0 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69          /* Origi
24500 6e 61 6c 20 53 51 4c 20 74 65 78 74 20 6f 66 20  nal SQL text of 
24510 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
24520 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
24530 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69  Next;  /* Next i
24540 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20  n the link-list 
24550 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
24560 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73   *pLast;  /* Las
24570 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e  t element in lin
24580 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f  k-list. Valid fo
24590 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20  r 1st elem only 
245a0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
245b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
245c0 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
245d0 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62  formation used b
245e0 79 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e  y the sqliteFix.
245f0 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61  ...** routines a
24600 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20  s they walk the 
24610 70 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61  parse tree to ma
24620 6b 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65  ke database refe
24630 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63  rences.** explic
24640 69 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  it..*/.typedef s
24650 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62  truct DbFixer Db
24660 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62  Fixer;.struct Db
24670 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20  Fixer {.  Parse 
24680 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a  *pParse;      /*
24690 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e   The parsing con
246a0 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73  text.  Error mes
246b0 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65  sages written he
246c0 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
246d0 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46  pSchema;    /* F
246e0 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73  ix items to this
246f0 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
24700 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20   bVarOnly;      
24710 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61   /* Check for va
24720 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65  riable reference
24730 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73  s only */.  cons
24740 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20  t char *zDb;    
24750 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c  /* Make sure all
24760 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e   objects are con
24770 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64  tained in this d
24780 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e  atabase */.  con
24790 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  st char *zType; 
247a0 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20   /* Type of the 
247b0 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
247c0 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
247d0 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54  ges */.  const T
247e0 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20  oken *pName; /* 
247f0 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Name of the cont
24800 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
24810 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
24820 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
24830 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f  objected used to
24840 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20   accumulate the 
24850 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67  text of a string
24860 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20   where we.** do 
24870 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
24880 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65  know how big the
24890 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20   string will be 
248a0 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  in the end..*/.s
248b0 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 73 74  truct sqlite3_st
248c0 72 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  r {.  sqlite3 *d
248d0 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70  b;         /* Op
248e0 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20  tional database 
248f0 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20  for lookaside.  
24900 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20  Can be NULL */. 
24910 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20   char *zText;   
24920 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72        /* The str
24930 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f  ing collected so
24940 20 66 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e   far */.  u32  n
24950 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  Alloc;         /
24960 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63  * Amount of spac
24970 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a  e allocated in z
24980 54 65 78 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d  Text */.  u32  m
24990 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  xAlloc;        /
249a0 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65  * Maximum allowe
249b0 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30  d allocation.  0
249c0 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75   for no malloc u
249d0 73 61 67 65 20 2a 2f 0a 20 20 75 33 32 20 20 6e  sage */.  u32  n
249e0 43 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Char;          /
249f0 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  * Length of the 
24a00 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f  string so far */
24a10 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72  .  u8   accError
24a20 3b 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54  ;       /* SQLIT
24a30 45 5f 4e 4f 4d 45 4d 20 6f 72 20 53 51 4c 49 54  E_NOMEM or SQLIT
24a40 45 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38  E_TOOBIG */.  u8
24a50 20 20 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20     printfFlags; 
24a60 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49     /* SQLITE_PRI
24a70 4e 54 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20  NTF flags below 
24a80 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51  */.};.#define SQ
24a90 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45  LITE_PRINTF_INTE
24aa0 52 4e 41 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e  RNAL 0x01  /* In
24ab0 74 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20  ternal-use-only 
24ac0 63 6f 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f 77  converters allow
24ad0 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
24ae0 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46  LITE_PRINTF_SQLF
24af0 55 4e 43 20 20 30 78 30 32 20 20 2f 2a 20 53 51  UNC  0x02  /* SQ
24b00 4c 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  L function argum
24b10 65 6e 74 73 20 74 6f 20 56 58 50 72 69 6e 74 66  ents to VXPrintf
24b20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
24b30 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43  TE_PRINTF_MALLOC
24b40 45 44 20 30 78 30 34 20 20 2f 2a 20 54 72 75 65  ED 0x04  /* True
24b50 20 69 66 20 78 54 65 78 74 20 69 73 20 61 6c 6c   if xText is all
24b60 6f 63 61 74 65 64 20 73 70 61 63 65 20 2a 2f 0a  ocated space */.
24b70 0a 23 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f  .#define isMallo
24b80 63 65 64 28 58 29 20 20 28 28 28 58 29 2d 3e 70  ced(X)  (((X)->p
24b90 72 69 6e 74 66 46 6c 61 67 73 20 26 20 53 51 4c  rintfFlags & SQL
24ba0 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f  ITE_PRINTF_MALLO
24bb0 43 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a  CED)!=0).../*.**
24bc0 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
24bd0 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
24be0 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63  used to communic
24bf0 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ate information.
24c00 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49  ** from sqlite3I
24c10 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65  nit and OP_Parse
24c20 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20  Schema into the 
24c30 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
24c40 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ack..*/.typedef 
24c50 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74  struct {.  sqlit
24c60 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
24c70 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62  * The database b
24c80 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
24c90 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45   */.  char **pzE
24ca0 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72  rrMsg;    /* Err
24cb0 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65  or message store
24cc0 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20  d here */.  int 
24cd0 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
24ce0 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61  /* 0 for main da
24cf0 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54  tabase.  1 for T
24d00 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54  EMP, 2.. for ATT
24d10 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72  ACHed */.  int r
24d20 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
24d30 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74  * Result code st
24d40 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 75  ored here */.  u
24d50 33 32 20 6d 49 6e 69 74 46 6c 61 67 73 3b 20 20  32 mInitFlags;  
24d60 20 20 20 2f 2a 20 46 6c 61 67 73 20 63 6f 6e 74     /* Flags cont
24d70 72 6f 6c 6c 69 6e 67 20 65 72 72 6f 72 20 6d 65  rolling error me
24d80 73 73 61 67 65 73 20 2a 2f 0a 20 20 75 33 32 20  ssages */.  u32 
24d90 6e 49 6e 69 74 52 6f 77 3b 20 20 20 20 20 20 20  nInitRow;       
24da0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 6f 77  /* Number of row
24db0 73 20 70 72 6f 63 65 73 73 65 64 20 2a 2f 0a 7d  s processed */.}
24dc0 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a   InitData;../*.*
24dd0 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
24de0 20 66 6f 72 20 6d 49 6e 69 74 46 6c 61 67 73 0a   for mInitFlags.
24df0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 49 54 46  */.#define INITF
24e00 4c 41 47 5f 41 6c 74 65 72 54 61 62 6c 65 20 20  LAG_AlterTable  
24e10 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 69 73   0x0001  /* This
24e20 20 69 73 20 61 20 72 65 70 61 72 73 65 20 61 66   is a reparse af
24e30 74 65 72 20 41 4c 54 45 52 20 54 41 42 4c 45 20  ter ALTER TABLE 
24e40 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74  */../*.** Struct
24e50 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67  ure containing g
24e60 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74  lobal configurat
24e70 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65  ion data for the
24e80 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
24e90 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  .**.** This stru
24ea0 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61  cture also conta
24eb0 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69  ins some state i
24ec0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
24ed0 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
24ee0 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d  fig {.  int bMem
24ef0 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20  stat;           
24f00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
24f10 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f  e to enable memo
24f20 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 75  ry status */.  u
24f30 38 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20  8 bCoreMutex;   
24f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f50 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
24f60 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67  le core mutexing
24f70 20 2a 2f 0a 20 20 75 38 20 62 46 75 6c 6c 4d 75   */.  u8 bFullMu
24f80 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
24f90 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
24fa0 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d  to enable full m
24fb0 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 75 38 20  utexing */.  u8 
24fc0 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20  bOpenUri;       
24fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24fe0 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70  * True to interp
24ff0 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73  ret filenames as
25000 20 55 52 49 73 20 2a 2f 0a 20 20 75 38 20 62 55   URIs */.  u8 bU
25010 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20  seCis;          
25020 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25030 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  Use covering ind
25040 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63  ices for full-sc
25050 61 6e 73 20 2a 2f 0a 20 20 75 38 20 62 53 6d 61  ans */.  u8 bSma
25060 6c 6c 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20  llMalloc;       
25070 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76             /* Av
25080 6f 69 64 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79  oid large memory
25090 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 69 66 20   allocations if 
250a0 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 62 45 78  true */.  u8 bEx
250b0 74 72 61 53 63 68 65 6d 61 43 68 65 63 6b 73 3b  traSchemaChecks;
250c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
250d0 65 72 69 66 79 20 74 79 70 65 2c 6e 61 6d 65 2c  erify type,name,
250e0 74 62 6c 5f 6e 61 6d 65 20 69 6e 20 73 63 68 65  tbl_name in sche
250f0 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74  ma */.  int mxSt
25100 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  rlen;           
25110 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
25120 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67  imum string leng
25130 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65  th */.  int neve
25140 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20  rCorrupt;       
25150 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
25160 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73 20  abase is always 
25170 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20  well-formed */. 
25180 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65   int szLookaside
25190 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
251a0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
251b0 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73  okaside buffer s
251c0 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f  ize */.  int nLo
251d0 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
251e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
251f0 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
25200 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a  buffer count */.
25210 20 20 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c    int nStmtSpill
25220 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25230 20 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72      /* Stmt-jour
25240 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73  nal spill-to-dis
25250 6b 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20  k threshold */. 
25260 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
25270 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20  hods m;         
25280 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
25290 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
252a0 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  n interface */. 
252b0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
252c0 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20  ethods mutex;   
252d0 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
252e0 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20  mutex interface 
252f0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61  */.  sqlite3_pca
25300 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61  che_methods2 pca
25310 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65  che2;  /* Low-le
25320 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69  vel page-cache i
25330 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f  nterface */.  vo
25340 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20  id *pHeap;      
25350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25360 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20  /* Heap storage 
25370 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
25380 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
25390 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
253a0 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20  Size of pHeap[] 
253b0 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20  */.  int mnReq, 
253c0 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20  mxReq;          
253d0 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e         /* Min an
253e0 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65  d max heap reque
253f0 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73  sts sizes */.  s
25400 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d  qlite3_int64 szM
25410 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
25420 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65   /* mmap() space
25430 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a   per open file *
25440 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
25450 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 mxMmap;       
25460 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
25470 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61   value for szMma
25480 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61  p */.  void *pPa
25490 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
254a0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
254b0 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f   cache memory */
254c0 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20  .  int szPage;  
254d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254e0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
254f0 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50 61  each page in pPa
25500 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50  ge[] */.  int nP
25510 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
25520 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
25530 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
25540 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69  n pPage[] */.  i
25550 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b  nt mxParserStack
25560 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25570 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74   /* maximum dept
25580 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72 20  h of the parser 
25590 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73  stack */.  int s
255a0 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65  haredCacheEnable
255b0 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
255c0 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d 63  true if shared-c
255d0 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65  ache mode enable
255e0 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61  d */.  u32 szPma
255f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25600 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
25610 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73  mum Sorter PMA s
25620 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20  ize */.  /* The 
25630 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69  above might be i
25640 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f  nitialized to no
25650 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c  n-zero.  The fol
25660 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61  lowing need to a
25670 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69  lways.  ** initi
25680 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f  ally be zero, ho
25690 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20  wever. */.  int 
256a0 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  isInit;         
256b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
256c0 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74   True after init
256d0 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66  ialization has f
256e0 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74  inished */.  int
256f0 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20   inProgress;    
25700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25710 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69  * True while ini
25720 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70  tialization in p
25730 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74  rogress */.  int
25740 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20   isMutexInit;   
25750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25760 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74  * True after mut
25770 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c  exes are initial
25780 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
25790 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20  MallocInit;     
257a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
257b0 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
257c0 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
257d0 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68  */.  int isPCach
257e0 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  eInit;          
257f0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
25800 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
25810 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
25820 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65  int nRefInitMute
25830 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
25840 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
25850 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74  sers of pInitMut
25860 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ex */.  sqlite3_
25870 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65  mutex *pInitMute
25880 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74  x;        /* Mut
25890 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  ex used by sqlit
258a0 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20  e3_initialize() 
258b0 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67  */.  void (*xLog
258c0 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
258d0 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e  t char*); /* Fun
258e0 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e  ction for loggin
258f0 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f  g */.  void *pLo
25900 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  gArg;           
25910 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
25920 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
25930 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65   xLog() */.#ifde
25940 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
25950 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78  SQLLOG.  void(*x
25960 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71  Sqllog)(void*,sq
25970 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
25980 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  r*, int);.  void
25990 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65   *pSqllogArg;.#e
259a0 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
259b0 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45  TE_VDBE_COVERAGE
259c0 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
259d0 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66  ing callback (if
259e0 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e   not NULL) is in
259f0 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56  voked on every V
25a00 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20  DBE branch.  ** 
25a10 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20  operation.  Set 
25a20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69  the callback usi
25a30 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ng SQLITE_TESTCT
25a40 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45  RL_VDBE_COVERAGE
25a50 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ..  */.  void (*
25a60 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69  xVdbeBranch)(voi
25a70 64 2a 2c 75 6e 73 69 67 6e 65 64 20 69 53 72 63  d*,unsigned iSrc
25a80 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38  Line,u8 eThis,u8
25a90 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62   eMx);  /* Callb
25aa0 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
25ab0 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20  VdbeBranchArg;  
25ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ae0 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
25af0 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  nt */.#endif.#if
25b00 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
25b10 45 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a 20 20  E_DESERIALIZE.  
25b20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78  sqlite3_int64 mx
25b30 4d 65 6d 64 62 53 69 7a 65 3b 20 20 20 20 20 20  MemdbSize;      
25b40 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 61 78    /* Default max
25b50 20 6d 65 6d 64 62 20 73 69 7a 65 20 2a 2f 0a 23   memdb size */.#
25b60 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
25b70 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
25b80 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c    int (*xTestCal
25b90 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20  lback)(int);    
25ba0 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62      /* Invoked b
25bb0 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  y sqlite3FaultSi
25bc0 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  m() */.#endif.  
25bd0 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61  int bLocaltimeFa
25be0 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ult;            
25bf0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69    /* True to fai
25c00 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61  l localtime() ca
25c10 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 62 49 6e  lls */.  int bIn
25c20 74 65 72 6e 61 6c 46 75 6e 63 74 69 6f 6e 73 3b  ternalFunctions;
25c30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
25c40 74 65 72 6e 61 6c 20 53 51 4c 20 66 75 6e 63 74  ternal SQL funct
25c50 69 6f 6e 73 20 61 72 65 20 76 69 73 69 62 6c 65  ions are visible
25c60 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65 52   */.  int iOnceR
25c70 65 73 65 74 54 68 72 65 73 68 6f 6c 64 3b 20 20  esetThreshold;  
25c80 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20          /* When 
25c90 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63 65  to reset OP_Once
25ca0 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 75   counters */.  u
25cb0 33 32 20 73 7a 53 6f 72 74 65 72 52 65 66 3b 20  32 szSorterRef; 
25cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cd0 20 2f 2a 20 4d 69 6e 20 73 69 7a 65 20 69 6e 20   /* Min size in 
25ce0 62 79 74 65 73 20 74 6f 20 75 73 65 20 73 6f 72  bytes to use sor
25cf0 74 65 72 2d 72 65 66 73 20 2a 2f 0a 20 20 75 6e  ter-refs */.  un
25d00 73 69 67 6e 65 64 20 69 6e 74 20 69 50 72 6e 67  signed int iPrng
25d10 53 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  Seed;           
25d20 2f 2a 20 41 6c 74 65 72 6e 61 74 69 76 65 20 66  /* Alternative f
25d30 69 78 65 64 20 73 65 65 64 20 66 6f 72 20 74 68  ixed seed for th
25d40 65 20 50 52 4e 47 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e PRNG */.};../*
25d50 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69  .** This macro i
25d60 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66  s used inside of
25d70 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
25d80 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65  ents to indicate
25d90 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73   that.** the ass
25da0 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ert is only vali
25db0 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d  d on a well-form
25dc0 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e  ed database.  In
25dd0 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20  stead of:.**.** 
25de0 20 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b      assert( X );
25df0 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65  .**.** One write
25e00 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  s:.**.**     ass
25e10 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50  ert( X || CORRUP
25e20 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f  T_DB );.**.** CO
25e30 52 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65  RRUPT_DB is true
25e40 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f   during normal o
25e50 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55  peration.  CORRU
25e60 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69  PT_DB does not i
25e70 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20  ndicate.** that 
25e80 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
25e90 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75  definitely corru
25ea0 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74  pt, only that it
25eb0 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70   might be corrup
25ec0 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74  t..** For most t
25ed0 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55  est cases, CORRU
25ee0 50 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20  PT_DB is set to 
25ef0 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70  false using a sp
25f00 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33  ecial.** sqlite3
25f10 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e  _test_control().
25f20 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61    This enables a
25f30 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
25f40 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74  ts to prove.** t
25f50 68 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61  hings that are a
25f60 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77  lways true for w
25f70 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62  ell-formed datab
25f80 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ases..*/.#define
25f90 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71   CORRUPT_DB  (sq
25fa0 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65  lite3Config.neve
25fb0 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a  rCorrupt==0)../*
25fc0 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e  .** Context poin
25fd0 74 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20  ter passed down 
25fe0 74 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65  through the tree
25ff0 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  -walk..*/.struct
26000 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50 61 72 73   Walker {.  Pars
26010 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
26020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26030 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20        /* Parser 
26040 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69  context.  */.  i
26050 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61  nt (*xExprCallba
26060 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ck)(Walker*, Exp
26070 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c  r*);     /* Call
26080 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73  back for express
26090 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ions */.  int (*
260a0 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29  xSelectCallback)
260b0 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
260c0 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
260d0 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
260e0 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43   void (*xSelectC
260f0 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72  allback2)(Walker
26100 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65  *,Select*);/* Se
26110 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f  cond callback fo
26120 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 69  r SELECTs */.  i
26130 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20  nt walkerDepth; 
26140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26150 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
26160 65 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73  er of subqueries
26170 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20   */.  u8 eCode; 
26180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261a0 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65  /* A small proce
261b0 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20  ssing code */.  
261c0 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20  union {         
261d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74            /* Ext
261f0 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c  ra data for call
26200 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65  back */.    Name
26210 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20  Context *pNC;   
26220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26230 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20        /* Naming 
26240 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69  context */.    i
26250 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
26260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26270 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f           /* A co
26280 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  unter */.    int
26290 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20   iCur;          
262a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262b0 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73         /* A curs
262c0 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  or number */.   
262d0 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
262e0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  st;             
262f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52             /* FR
26300 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  OM clause */.   
26310 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74   struct SrcCount
26320 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20   *pSrcCount;    
26330 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
26340 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65  unting column re
26350 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20  ferences */.    
26360 73 74 72 75 63 74 20 43 43 75 72 48 69 6e 74 20  struct CCurHint 
26370 2a 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20 20  *pCCurHint;     
26380 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
26390 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72 48  d by codeCursorH
263a0 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74  int() */.    int
263b0 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20 20 20   *aiCol;        
263c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263d0 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61 79 20         /* array 
263e0 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65  of column indexe
263f0 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  s */.    struct 
26400 49 64 78 43 6f 76 65 72 20 2a 70 49 64 78 43 6f  IdxCover *pIdxCo
26410 76 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ver;            
26420 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20     /* Check for 
26430 69 6e 64 65 78 20 63 6f 76 65 72 61 67 65 20 2a  index coverage *
26440 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49 64 78  /.    struct Idx
26450 45 78 70 72 54 72 61 6e 73 20 2a 70 49 64 78 54  ExprTrans *pIdxT
26460 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
26470 2f 2a 20 43 6f 6e 76 65 72 74 20 69 64 78 65 64  /* Convert idxed
26480 20 65 78 70 72 20 74 6f 20 63 6f 6c 75 6d 6e 20   expr to column 
26490 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20  */.    ExprList 
264a0 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 20  *pGroupBy;      
264b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264c0 20 2f 2a 20 47 52 4f 55 50 20 42 59 20 63 6c 61   /* GROUP BY cla
264d0 75 73 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  use */.    Selec
264e0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
264f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26500 20 20 20 20 20 2f 2a 20 48 41 56 49 4e 47 20 74       /* HAVING t
26510 6f 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63  o WHERE clause c
26520 74 78 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  tx */.    struct
26530 20 57 69 6e 64 6f 77 52 65 77 72 69 74 65 20 2a   WindowRewrite *
26540 70 52 65 77 72 69 74 65 3b 20 20 20 20 20 20 20  pRewrite;       
26550 20 20 20 20 2f 2a 20 57 69 6e 64 6f 77 20 72 65      /* Window re
26560 77 72 69 74 65 20 63 6f 6e 74 65 78 74 20 2a 2f  write context */
26570 0a 20 20 20 20 73 74 72 75 63 74 20 57 68 65 72  .    struct Wher
26580 65 43 6f 6e 73 74 20 2a 70 43 6f 6e 73 74 3b 20  eConst *pConst; 
26590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
265a0 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63  * WHERE clause c
265b0 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 20 20  onstants */.    
265c0 73 74 72 75 63 74 20 52 65 6e 61 6d 65 43 74 78  struct RenameCtx
265d0 20 2a 70 52 65 6e 61 6d 65 3b 20 20 20 20 20 20   *pRename;      
265e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 45 4e            /* REN
265f0 41 4d 45 20 43 4f 4c 55 4d 4e 20 63 6f 6e 74 65  AME COLUMN conte
26600 78 74 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a  xt */.  } u;.};.
26610 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c  ./* Forward decl
26620 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20  arations */.int 
26630 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28  sqlite3WalkExpr(
26640 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
26650 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
26660 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a  ExprList(Walker*
26670 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
26680 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
26690 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  ect(Walker*, Sel
266a0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
266b0 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72  e3WalkSelectExpr
266c0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
266d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
266e0 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61  alkSelectFrom(Wa
266f0 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
26700 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
26710 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a  WalkNoop(Walker*
26720 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
26730 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 4e  lite3SelectWalkN
26740 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  oop(Walker*, Sel
26750 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
26760 65 33 53 65 6c 65 63 74 57 61 6c 6b 46 61 69 6c  e3SelectWalkFail
26770 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
26780 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
26790 45 5f 44 45 42 55 47 0a 76 6f 69 64 20 73 71 6c  E_DEBUG.void sql
267a0 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 41 73  ite3SelectWalkAs
267b0 73 65 72 74 32 28 57 61 6c 6b 65 72 2a 2c 20 53  sert2(Walker*, S
267c0 65 6c 65 63 74 2a 29 3b 0a 23 65 6e 64 69 66 0a  elect*);.#endif.
267d0 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f  ./*.** Return co
267e0 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73  de from the pars
267f0 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70  e-tree walking p
26800 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68  rimitives and th
26810 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73  eir.** callbacks
26820 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  ..*/.#define WRC
26830 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20  _Continue    0  
26840 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77   /* Continue dow
26850 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20  n into children 
26860 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50  */.#define WRC_P
26870 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f  rune       1   /
26880 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20  * Omit children 
26890 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c  but continue wal
268a0 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f  king siblings */
268b0 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f  .#define WRC_Abo
268c0 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20  rt       2   /* 
268d0 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65  Abandon the tree
268e0 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   walk */../*.** 
268f0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
26900 68 69 73 20 73 74 72 75 63 74 75 72 65 20 72 65  his structure re
26910 70 72 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f  presents a set o
26920 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54  f one or more CT
26930 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61  Es.** (common ta
26940 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29  ble expressions)
26950 20 63 72 65 61 74 65 64 20 62 79 20 61 20 73 69   created by a si
26960 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65  ngle WITH clause
26970 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68  ..*/.struct With
26980 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20   {.  int nCte;  
26990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
269b0 66 20 43 54 45 73 20 69 6e 20 74 68 65 20 57 49  f CTEs in the WI
269c0 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57  TH clause */.  W
269d0 69 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20  ith *pOuter;    
269e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
269f0 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54  * Containing WIT
26a00 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c  H clause, or NUL
26a10 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74  L */.  struct Ct
26a20 65 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  e {             
26a30 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61         /* For ea
26a40 63 68 20 43 54 45 20 69 6e 20 74 68 65 20 57 49  ch CTE in the WI
26a50 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f  TH clause.... */
26a60 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
26a70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
26a80 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
26a90 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20  this CTE */.    
26aa0 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b  ExprList *pCols;
26ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ac0 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69  /* List of expli
26ad0 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  cit column names
26ae0 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20  , or NULL */.   
26af0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
26b00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
26b10 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69   /* The definiti
26b20 6f 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a  on of this CTE *
26b30 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  /.    const char
26b40 20 2a 7a 43 74 65 45 72 72 3b 20 20 20 20 20 20   *zCteErr;      
26b50 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d        /* Error m
26b60 65 73 73 61 67 65 20 66 6f 72 20 63 69 72 63 75  essage for circu
26b70 6c 61 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a  lar references *
26b80 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a  /.  } a[1];.};..
26b90 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
26ba0 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  BUG./*.** An ins
26bb0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65  tance of the Tre
26bc0 65 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20  eView object is 
26bd0 75 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e  used for printin
26be0 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  g the content of
26bf0 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74 75  .** data structu
26c00 72 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65  res on sqlite3De
26c10 62 75 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e  bugPrintf() usin
26c20 67 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69  g a tree-like vi
26c30 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  ew..*/.struct Tr
26c40 65 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69  eeView {.  int i
26c50 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
26c60 20 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65     /* Which leve
26c70 6c 20 6f 66 20 74 68 65 20 74 72 65 65 20 77 65  l of the tree we
26c80 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20   are on */.  u8 
26c90 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20   bLine[100];    
26ca0 20 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72       /* Draw ver
26cb0 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20  tical in column 
26cc0 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73  i if bLine[i] is
26cd0 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64   true */.};.#end
26ce0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  if /* SQLITE_DEB
26cf0 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  UG */../*.** Thi
26d00 73 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64  s object is used
26d10 20 69 6e 20 76 61 72 69 6f 75 73 20 77 61 79 73   in various ways
26d20 2c 20 6d 6f 73 74 20 28 62 75 74 20 6e 6f 74 20  , most (but not 
26d30 61 6c 6c 29 20 72 65 6c 61 74 65 64 20 74 6f 20  all) related to 
26d40 77 69 6e 64 6f 77 0a 2a 2a 20 66 75 6e 63 74 69  window.** functi
26d50 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 31 29  ons..**.**   (1)
26d60 20 41 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e   A single instan
26d70 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
26d80 74 75 72 65 20 69 73 20 61 74 74 61 63 68 65 64  ture is attached
26d90 20 74 6f 20 74 68 65 0a 2a 2a 20 20 20 20 20 20   to the.**      
26da0 20 74 68 65 20 45 78 70 72 2e 79 2e 70 57 69 6e   the Expr.y.pWin
26db0 20 66 69 65 6c 64 20 66 6f 72 20 65 61 63 68 20   field for each 
26dc0 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20  window function 
26dd0 69 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  in an expression
26de0 20 74 72 65 65 2e 0a 2a 2a 20 20 20 20 20 20 20   tree..**       
26df0 54 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64  This object hold
26e00 73 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f  s the informatio
26e10 6e 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  n contained in t
26e20 68 65 20 4f 56 45 52 20 63 6c 61 75 73 65 2c 0a  he OVER clause,.
26e30 2a 2a 20 20 20 20 20 20 20 70 6c 75 73 20 61 64  **       plus ad
26e40 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20  ditional fields 
26e50 75 73 65 64 20 64 75 72 69 6e 67 20 63 6f 64 65  used during code
26e60 20 67 65 6e 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a   generation..**.
26e70 2a 2a 20 20 20 28 32 29 20 41 6c 6c 20 77 69 6e  **   (2) All win
26e80 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e  dow functions in
26e90 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54   a single SELECT
26ea0 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 2d 6c   form a linked-l
26eb0 69 73 74 0a 2a 2a 20 20 20 20 20 20 20 61 74 74  ist.**       att
26ec0 61 63 68 65 64 20 74 6f 20 53 65 6c 65 63 74 2e  ached to Select.
26ed0 70 57 69 6e 2e 20 20 54 68 65 20 57 69 6e 64 6f  pWin.  The Windo
26ee0 77 2e 70 46 75 6e 63 20 61 6e 64 20 57 69 6e 64  w.pFunc and Wind
26ef0 6f 77 2e 70 45 78 70 72 0a 2a 2a 20 20 20 20 20  ow.pExpr.**     
26f00 20 20 66 69 65 6c 64 73 20 70 6f 69 6e 74 20 62    fields point b
26f10 61 63 6b 20 74 6f 20 74 68 65 20 65 78 70 72 65  ack to the expre
26f20 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68  ssion that is th
26f30 65 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  e window functio
26f40 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 33 29 20 54  n..**.**   (3) T
26f50 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20  he terms of the 
26f60 57 49 4e 44 4f 57 20 63 6c 61 75 73 65 20 6f 66  WINDOW clause of
26f70 20 61 20 53 45 4c 45 43 54 20 61 72 65 20 69 6e   a SELECT are in
26f80 73 74 61 6e 63 65 73 20 6f 66 20 74 68 69 73 0a  stances of this.
26f90 2a 2a 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  **       object 
26fa0 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  on a linked list
26fb0 20 61 74 74 61 63 68 65 64 20 74 6f 20 53 65 6c   attached to Sel
26fc0 65 63 74 2e 70 57 69 6e 44 65 66 6e 2e 0a 2a 2a  ect.pWinDefn..**
26fd0 0a 2a 2a 20 20 20 28 34 29 20 46 6f 72 20 61 6e  .**   (4) For an
26fe0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
26ff0 69 6f 6e 20 77 69 74 68 20 61 20 46 49 4c 54 45  ion with a FILTE
27000 52 20 63 6c 61 75 73 65 2c 20 61 6e 20 69 6e 73  R clause, an ins
27010 74 61 6e 63 65 0a 2a 2a 20 20 20 20 20 20 20 6f  tance.**       o
27020 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73  f this object is
27030 20 73 74 6f 72 65 64 20 69 6e 20 45 78 70 72 2e   stored in Expr.
27040 79 2e 70 57 69 6e 20 77 69 74 68 20 65 46 72 6d  y.pWin with eFrm
27050 54 79 70 65 20 73 65 74 20 74 6f 0a 2a 2a 20 20  Type set to.**  
27060 20 20 20 20 20 54 4b 5f 46 49 4c 54 45 52 2e 20       TK_FILTER. 
27070 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
27080 20 6f 6e 6c 79 20 66 69 65 6c 64 20 75 73 65 64   only field used
27090 20 69 73 20 57 69 6e 64 6f 77 2e 70 46 69 6c 74   is Window.pFilt
270a0 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 73  er..**.** The us
270b0 65 73 20 28 31 29 20 61 6e 64 20 28 32 29 20 61  es (1) and (2) a
270c0 72 65 20 72 65 61 6c 6c 79 20 74 68 65 20 73 61  re really the sa
270d0 6d 65 20 57 69 6e 64 6f 77 20 6f 62 6a 65 63 74  me Window object
270e0 20 74 68 61 74 20 6a 75 73 74 20 68 61 70 70 65   that just happe
270f0 6e 73 0a 2a 2a 20 74 6f 20 62 65 20 61 63 63 65  ns.** to be acce
27100 73 73 69 62 6c 65 20 69 6e 20 74 77 6f 20 64 69  ssible in two di
27110 66 66 65 72 65 6e 74 20 77 61 79 73 2e 20 20 55  fferent ways.  U
27120 73 65 20 63 61 73 65 20 28 33 29 20 61 72 65 20  se case (3) are 
27130 73 65 70 61 72 61 74 65 20 6f 62 6a 65 63 74 73  separate objects
27140 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 6e 64  ..*/.struct Wind
27150 6f 77 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  ow {.  char *zNa
27160 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
27170 2a 20 4e 61 6d 65 20 6f 66 20 77 69 6e 64 6f 77  * Name of window
27180 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a   (may be NULL) *
27190 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b  /.  char *zBase;
271a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
271b0 61 6d 65 20 6f 66 20 62 61 73 65 20 77 69 6e 64  ame of base wind
271c0 6f 77 20 66 6f 72 20 63 68 61 69 6e 69 6e 67 20  ow for chaining 
271d0 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f  (may be NULL) */
271e0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 50 61  .  ExprList *pPa
271f0 72 74 69 74 69 6f 6e 3b 20 20 20 2f 2a 20 50 41  rtition;   /* PA
27200 52 54 49 54 49 4f 4e 20 42 59 20 63 6c 61 75 73  RTITION BY claus
27210 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
27220 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 20 2f  *pOrderBy;     /
27230 2a 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  * ORDER BY claus
27240 65 20 2a 2f 0a 20 20 75 38 20 65 46 72 6d 54 79  e */.  u8 eFrmTy
27250 70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  pe;            /
27260 2a 20 54 4b 5f 52 41 4e 47 45 2c 20 54 4b 5f 47  * TK_RANGE, TK_G
27270 52 4f 55 50 53 2c 20 54 4b 5f 52 4f 57 53 2c 20  ROUPS, TK_ROWS, 
27280 6f 72 20 30 20 2a 2f 0a 20 20 75 38 20 65 53 74  or 0 */.  u8 eSt
27290 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  art;            
272a0 20 20 2f 2a 20 55 4e 42 4f 55 4e 44 45 44 2c 20    /* UNBOUNDED, 
272b0 43 55 52 52 45 4e 54 2c 20 50 52 45 43 45 44 49  CURRENT, PRECEDI
272c0 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57 49 4e 47 20  NG or FOLLOWING 
272d0 2a 2f 0a 20 20 75 38 20 65 45 6e 64 3b 20 20 20  */.  u8 eEnd;   
272e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
272f0 55 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52 52 45  UNBOUNDED, CURRE
27300 4e 54 2c 20 50 52 45 43 45 44 49 4e 47 20 6f 72  NT, PRECEDING or
27310 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20   FOLLOWING */.  
27320 75 38 20 62 49 6d 70 6c 69 63 69 74 46 72 61 6d  u8 bImplicitFram
27330 65 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20  e;      /* True 
27340 69 66 20 66 72 61 6d 65 20 77 61 73 20 69 6d 70  if frame was imp
27350 6c 69 63 69 74 6c 79 20 73 70 65 63 69 66 69 65  licitly specifie
27360 64 20 2a 2f 0a 20 20 75 38 20 65 45 78 63 6c 75  d */.  u8 eExclu
27370 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  de;            /
27380 2a 20 54 4b 5f 4e 4f 2c 20 54 4b 5f 43 55 52 52  * TK_NO, TK_CURR
27390 45 4e 54 2c 20 54 4b 5f 54 49 45 53 2c 20 54 4b  ENT, TK_TIES, TK
273a0 5f 47 52 4f 55 50 2c 20 6f 72 20 30 20 2a 2f 0a  _GROUP, or 0 */.
273b0 20 20 45 78 70 72 20 2a 70 53 74 61 72 74 3b 20    Expr *pStart; 
273c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
273d0 72 65 73 73 69 6f 6e 20 66 6f 72 20 22 3c 65 78  ression for "<ex
273e0 70 72 3e 20 50 52 45 43 45 44 49 4e 47 22 20 2a  pr> PRECEDING" *
273f0 2f 0a 20 20 45 78 70 72 20 2a 70 45 6e 64 3b 20  /.  Expr *pEnd; 
27400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
27410 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 22 3c  xpression for "<
27420 65 78 70 72 3e 20 46 4f 4c 4c 4f 57 49 4e 47 22  expr> FOLLOWING"
27430 20 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 2a 70   */.  Window **p
27440 70 54 68 69 73 3b 20 20 20 20 20 20 20 20 2f 2a  pThis;        /*
27450 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   Pointer to this
27460 20 6f 62 6a 65 63 74 20 69 6e 20 53 65 6c 65 63   object in Selec
27470 74 2e 70 57 69 6e 20 6c 69 73 74 20 2a 2f 0a 20  t.pWin list */. 
27480 20 57 69 6e 64 6f 77 20 2a 70 4e 65 78 74 57 69   Window *pNextWi
27490 6e 3b 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  n;       /* Next
274a0 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
274b0 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68   belonging to th
274c0 69 73 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 45  is SELECT */.  E
274d0 78 70 72 20 2a 70 46 69 6c 74 65 72 3b 20 20 20  xpr *pFilter;   
274e0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 49         /* The FI
274f0 4c 54 45 52 20 65 78 70 72 65 73 73 69 6f 6e 20  LTER expression 
27500 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 46  */.  FuncDef *pF
27510 75 6e 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  unc;         /* 
27520 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  The function */.
27530 20 20 69 6e 74 20 69 45 70 68 43 73 72 3b 20 20    int iEphCsr;  
27540 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
27550 74 69 74 69 6f 6e 20 62 75 66 66 65 72 20 6f 72  tition buffer or
27560 20 50 65 65 72 20 62 75 66 66 65 72 20 2a 2f 0a   Peer buffer */.
27570 20 20 69 6e 74 20 72 65 67 41 63 63 75 6d 3b 20    int regAccum; 
27580 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63            /* Acc
27590 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 69 6e  umulator */.  in
275a0 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20  t regResult;    
275b0 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 72 69 6d        /* Interim
275c0 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69 6e 74   result */.  int
275d0 20 63 73 72 41 70 70 3b 20 20 20 20 20 20 20 20   csrApp;        
275e0 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e       /* Function
275f0 20 63 75 72 73 6f 72 20 28 75 73 65 64 20 62 79   cursor (used by
27600 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69   min/max) */.  i
27610 6e 74 20 72 65 67 41 70 70 3b 20 20 20 20 20 20  nt regApp;      
27620 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69         /* Functi
27630 6f 6e 20 72 65 67 69 73 74 65 72 20 28 61 6c 73  on register (als
27640 6f 20 75 73 65 64 20 62 79 20 6d 69 6e 2f 6d 61  o used by min/ma
27650 78 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 50  x) */.  int regP
27660 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  art;            
27670 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 65 67 69  /* Array of regi
27680 73 74 65 72 73 20 66 6f 72 20 50 41 52 54 49 54  sters for PARTIT
27690 49 4f 4e 20 42 59 20 76 61 6c 75 65 73 20 2a 2f  ION BY values */
276a0 0a 20 20 45 78 70 72 20 2a 70 4f 77 6e 65 72 3b  .  Expr *pOwner;
276b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
276c0 70 72 65 73 73 69 6f 6e 20 6f 62 6a 65 63 74 20  pression object 
276d0 74 68 69 73 20 77 69 6e 64 6f 77 20 69 73 20 61  this window is a
276e0 74 74 61 63 68 65 64 20 74 6f 20 2a 2f 0a 20 20  ttached to */.  
276f0 69 6e 74 20 6e 42 75 66 66 65 72 43 6f 6c 3b 20  int nBufferCol; 
27700 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
27710 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
27720 62 75 66 66 65 72 20 74 61 62 6c 65 20 2a 2f 0a  buffer table */.
27730 20 20 69 6e 74 20 69 41 72 67 43 6f 6c 3b 20 20    int iArgCol;  
27740 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66            /* Off
27750 73 65 74 20 6f 66 20 66 69 72 73 74 20 61 72 67  set of first arg
27760 75 6d 65 6e 74 20 66 6f 72 20 74 68 69 73 20 66  ument for this f
27770 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  unction */.  int
27780 20 72 65 67 4f 6e 65 3b 20 20 20 20 20 20 20 20   regOne;        
27790 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
277a0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 63 6f 6e 73   containing cons
277b0 74 61 6e 74 20 76 61 6c 75 65 20 31 20 2a 2f 0a  tant value 1 */.
277c0 20 20 69 6e 74 20 72 65 67 53 74 61 72 74 52 6f    int regStartRo
277d0 77 69 64 3b 0a 20 20 69 6e 74 20 72 65 67 45 6e  wid;.  int regEn
277e0 64 52 6f 77 69 64 3b 0a 20 20 75 38 20 62 45 78  dRowid;.  u8 bEx
277f0 70 72 41 72 67 73 3b 20 20 20 20 20 20 20 20 20  prArgs;         
27800 20 20 2f 2a 20 44 65 66 65 72 20 65 76 61 6c 75    /* Defer evalu
27810 61 74 69 6f 6e 20 6f 66 20 77 69 6e 64 6f 77 20  ation of window 
27820 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e  function argumen
27830 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ts.             
27840 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
27850 64 75 65 20 74 6f 20 74 68 65 20 53 51 4c 49 54  due to the SQLIT
27860 45 5f 53 55 42 54 59 50 45 20 66 6c 61 67 20 2a  E_SUBTYPE flag *
27870 2f 0a 7d 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  /.};..#ifndef SQ
27880 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57  LITE_OMIT_WINDOW
27890 46 55 4e 43 0a 76 6f 69 64 20 73 71 6c 69 74 65  FUNC.void sqlite
278a0 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 73 71  3WindowDelete(sq
278b0 6c 69 74 65 33 2a 2c 20 57 69 6e 64 6f 77 2a 29  lite3*, Window*)
278c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69  ;.void sqlite3Wi
278d0 6e 64 6f 77 55 6e 6c 69 6e 6b 46 72 6f 6d 53 65  ndowUnlinkFromSe
278e0 6c 65 63 74 28 57 69 6e 64 6f 77 2a 29 3b 0a 76  lect(Window*);.v
278f0 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  oid sqlite3Windo
27900 77 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  wListDelete(sqli
27910 74 65 33 20 2a 64 62 2c 20 57 69 6e 64 6f 77 20  te3 *db, Window 
27920 2a 70 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c  *p);.Window *sql
27930 69 74 65 33 57 69 6e 64 6f 77 41 6c 6c 6f 63 28  ite3WindowAlloc(
27940 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
27950 2c 20 45 78 70 72 2a 2c 20 69 6e 74 20 2c 20 45  , Expr*, int , E
27960 78 70 72 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20  xpr*, u8);.void 
27970 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74  sqlite3WindowAtt
27980 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
27990 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69  *, Window*);.voi
279a0 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 4c  d sqlite3WindowL
279b0 69 6e 6b 28 53 65 6c 65 63 74 20 2a 70 53 65 6c  ink(Select *pSel
279c0 2c 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 29 3b  , Window *pWin);
279d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64  .int sqlite3Wind
279e0 6f 77 43 6f 6d 70 61 72 65 28 50 61 72 73 65 2a  owCompare(Parse*
279f0 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f  , Window*, Windo
27a00 77 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  w*, int);.void s
27a10 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 64 65  qlite3WindowCode
27a20 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 57 69 6e  Init(Parse*, Win
27a30 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dow*);.void sqli
27a40 74 65 33 57 69 6e 64 6f 77 43 6f 64 65 53 74 65  te3WindowCodeSte
27a50 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
27a60 2a 2c 20 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69  *, WhereInfo*, i
27a70 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
27a80 6c 69 74 65 33 57 69 6e 64 6f 77 52 65 77 72 69  lite3WindowRewri
27a90 74 65 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  te(Parse*, Selec
27aa0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
27ab0 45 78 70 61 6e 64 53 75 62 71 75 65 72 79 28 50  ExpandSubquery(P
27ac0 61 72 73 65 2a 2c 20 73 74 72 75 63 74 20 53 72  arse*, struct Sr
27ad0 63 4c 69 73 74 5f 69 74 65 6d 2a 29 3b 0a 76 6f  cList_item*);.vo
27ae0 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
27af0 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 57  Update(Parse*, W
27b00 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 2c  indow*, Window*,
27b10 20 46 75 6e 63 44 65 66 2a 29 3b 0a 57 69 6e 64   FuncDef*);.Wind
27b20 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f  ow *sqlite3Windo
27b30 77 44 75 70 28 73 71 6c 69 74 65 33 20 2a 64 62  wDup(sqlite3 *db
27b40 2c 20 45 78 70 72 20 2a 70 4f 77 6e 65 72 2c 20  , Expr *pOwner, 
27b50 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64  Window *p);.Wind
27b60 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f  ow *sqlite3Windo
27b70 77 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  wListDup(sqlite3
27b80 20 2a 64 62 2c 20 57 69 6e 64 6f 77 20 2a 70 29   *db, Window *p)
27b90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69  ;.void sqlite3Wi
27ba0 6e 64 6f 77 46 75 6e 63 74 69 6f 6e 73 28 76 6f  ndowFunctions(vo
27bb0 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
27bc0 33 57 69 6e 64 6f 77 43 68 61 69 6e 28 50 61 72  3WindowChain(Par
27bd0 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69  se*, Window*, Wi
27be0 6e 64 6f 77 2a 29 3b 0a 57 69 6e 64 6f 77 20 2a  ndow*);.Window *
27bf0 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 73 73  sqlite3WindowAss
27c00 65 6d 62 6c 65 28 50 61 72 73 65 2a 2c 20 57 69  emble(Parse*, Wi
27c10 6e 64 6f 77 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ndow*, ExprList*
27c20 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b  , ExprList*, Tok
27c30 65 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  en*);.#else.# de
27c40 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 6e 64  fine sqlite3Wind
27c50 6f 77 44 65 6c 65 74 65 28 61 2c 62 29 0a 23 20  owDelete(a,b).# 
27c60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
27c70 6e 64 6f 77 46 75 6e 63 74 69 6f 6e 73 28 29 0a  ndowFunctions().
27c80 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27c90 57 69 6e 64 6f 77 41 74 74 61 63 68 28 61 2c 62  WindowAttach(a,b
27ca0 2c 63 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ,c).#endif../*.*
27cb0 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70  * Assuming zIn p
27cc0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
27cd0 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46  st byte of a UTF
27ce0 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a  -8 character,.**
27cf0 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20   advance zIn to 
27d00 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72  point to the fir
27d10 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e  st byte of the n
27d20 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63  ext UTF-8 charac
27d30 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
27d40 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38  SQLITE_SKIP_UTF8
27d50 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20  (zIn) {         
27d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
27d70 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29  .  if( (*(zIn++)
27d80 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20  )>=0xc0 ){      
27d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27da0 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68          \.    wh
27db0 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63  ile( (*zIn & 0xc
27dc0 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b  0)==0x80 ){ zIn+
27dd0 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  +; }            
27de0 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20   \.  }          
27df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e10 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f            \.}../
27e20 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
27e30 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72  *_BKPT macros ar
27e40 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f  e substitutes fo
27e50 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  r the error code
27e60 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61  s with.** the sa
27e70 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68  me name but with
27e80 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75  out the _BKPT su
27e90 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63  ffix.  These mac
27ea0 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f  ros invoke.** ro
27eb0 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f  utines that repo
27ec0 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62  rt the line-numb
27ed0 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  er on which the 
27ee0 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64  error originated
27ef0 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65  .** using sqlite
27f00 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f  3_log().  The ro
27f10 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76  utines also prov
27f20 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74  ide a convenient
27f30 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74   place.** to set
27f40 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61   a debugger brea
27f50 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  kpoint..*/.int s
27f60 71 6c 69 74 65 33 52 65 70 6f 72 74 45 72 72 6f  qlite3ReportErro
27f70 72 28 69 6e 74 20 69 45 72 72 2c 20 69 6e 74 20  r(int iErr, int 
27f80 6c 69 6e 65 6e 6f 2c 20 63 6f 6e 73 74 20 63 68  lineno, const ch
27f90 61 72 20 2a 7a 54 79 70 65 29 3b 0a 69 6e 74 20  ar *zType);.int 
27fa0 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
27fb0 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
27fc0 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
27fd0 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
27fe0 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
27ff0 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51  int);.#define SQ
28000 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
28010 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  T sqlite3Corrupt
28020 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
28030 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
28040 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74  ISUSE_BKPT sqlit
28050 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f  e3MisuseError(__
28060 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
28070 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f  SQLITE_CANTOPEN_
28080 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74  BKPT sqlite3Cant
28090 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  openError(__LINE
280a0 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54  __).#ifdef SQLIT
280b0 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73 71  E_DEBUG.  int sq
280c0 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28  lite3NomemError(
280d0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
280e0 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72  te3IoerrnomemErr
280f0 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  or(int);.  int s
28100 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e  qlite3CorruptPgn
28110 6f 45 72 72 6f 72 28 69 6e 74 2c 50 67 6e 6f 29  oError(int,Pgno)
28120 3b 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ;.# define SQLIT
28130 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c  E_NOMEM_BKPT sql
28140 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f  ite3NomemError(_
28150 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e  _LINE__).# defin
28160 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  e SQLITE_IOERR_N
28170 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65  OMEM_BKPT sqlite
28180 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72  3IoerrnomemError
28190 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66  (__LINE__).# def
281a0 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
281b0 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74  PT_PGNO(P) sqlit
281c0 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72 72  e3CorruptPgnoErr
281d0 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28 50 29 29  or(__LINE__,(P))
281e0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
281f0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50  SQLITE_NOMEM_BKP
28200 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23  T SQLITE_NOMEM.#
28210 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
28220 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  OERR_NOMEM_BKPT 
28230 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
28240 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  EM.# define SQLI
28250 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28  TE_CORRUPT_PGNO(
28260 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  P) sqlite3Corrup
28270 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  tError(__LINE__)
28280 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
28290 54 53 33 20 61 6e 64 20 46 54 53 34 20 62 6f 74  TS3 and FTS4 bot
282a0 68 20 72 65 71 75 69 72 65 20 76 69 72 74 75 61  h require virtua
282b0 6c 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 0a  l table support.
282c0 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
282d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
282e0 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64 65 66  ALTABLE).# undef
282f0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
28300 54 53 33 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  TS3.# undef SQLI
28310 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a 23  TE_ENABLE_FTS4.#
28320 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53  endif../*.** FTS
28330 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65  4 is really an e
28340 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53  xtension for FTS
28350 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65  3.  It is enable
28360 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53  d using the.** S
28370 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
28380 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f  3 macro.  But to
28390 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e   avoid confusion
283a0 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a   we also call.**
283b0 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
283c0 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f  LE_FTS4 macro to
283d0 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69   serve as an ali
283e0 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e  as for SQLITE_EN
283f0 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69  ABLE_FTS3..*/.#i
28400 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
28410 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26  _ENABLE_FTS4) &&
28420 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
28430 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20  _ENABLE_FTS3).# 
28440 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
28450 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64  ABLE_FTS3 1.#end
28460 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74  if../*.** The ct
28470 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20  ype.h header is 
28480 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41  needed for non-A
28490 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49  SCII systems.  I
284a0 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65  t is also.** nee
284b0 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e  ded by FTS3 when
284c0 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65   FTS3 is include
284d0 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d  d in the amalgam
284e0 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64  ation..*/.#if !d
284f0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53  efined(SQLITE_AS
28500 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64  CII) || \.    (d
28510 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
28520 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65  ABLE_FTS3) && de
28530 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41  fined(SQLITE_AMA
28540 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e  LGAMATION)).# in
28550 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a  clude <ctype.h>.
28560 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
28570 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
28580 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61  os mimic the sta
28590 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75  ndard library fu
285a0 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28  nctions toupper(
285b0 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c  ),.** isspace(),
285c0 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69   isalnum(), isdi
285d0 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67  git() and isxdig
285e0 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65  it(), respective
285f0 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74  ly. The.** sqlit
28600 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20  e versions only 
28610 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63  work for ASCII c
28620 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72  haracters, regar
28630 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e  dless of locale.
28640 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
28650 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65  E_ASCII.# define
28660 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
28670 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74  x)  ((x)&~(sqlit
28680 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
28690 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
286a0 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73  x20)).# define s
286b0 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
286c0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
286d0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
286e0 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20  ar)(x)]&0x01).# 
286f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
28700 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69  alnum(x)   (sqli
28710 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
28720 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
28730 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73  0x06).# define s
28740 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
28750 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
28760 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
28770 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20  ar)(x)]&0x02).# 
28780 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
28790 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69  digit(x)   (sqli
287a0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
287b0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
287c0 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73  0x04).# define s
287d0 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
287e0 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65  )  (sqlite3Ctype
287f0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
28800 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20  ar)(x)]&0x08).# 
28810 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
28820 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69  lower(x)   (sqli
28830 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
28840 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
28850 78 29 5d 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x)]).# define sq
28860 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20  lite3Isquote(x) 
28870 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
28880 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
28890 72 29 28 78 29 5d 26 30 78 38 30 29 0a 23 65 6c  r)(x)]&0x80).#el
288a0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
288b0 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20  te3Toupper(x)   
288c0 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65  toupper((unsigne
288d0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
288e0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
288f0 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65  ace(x)   isspace
28900 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
28910 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
28920 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
28930 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67    isalnum((unsig
28940 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
28950 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
28960 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70  alpha(x)   isalp
28970 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ha((unsigned cha
28980 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
28990 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
289a0 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73  )   isdigit((uns
289b0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
289c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
289d0 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78  Isxdigit(x)  isx
289e0 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
289f0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
28a00 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
28a10 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28  r(x)   tolower((
28a20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
28a30 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
28a40 74 65 33 49 73 71 75 6f 74 65 28 78 29 20 20 20  te3Isquote(x)   
28a50 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29 3d 3d  ((x)=='"'||(x)==
28a60 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27 7c 7c  '\''||(x)=='['||
28a70 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64 69 66  (x)=='`').#endif
28a80 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 49 64  .int sqlite3IsId
28a90 43 68 61 72 28 75 38 29 3b 0a 0a 2f 2a 0a 2a 2a  Char(u8);../*.**
28aa0 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69   Internal functi
28ab0 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f  on prototypes.*/
28ac0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 49  .int sqlite3StrI
28ad0 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  Cmp(const char*,
28ae0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
28af0 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  t sqlite3Strlen3
28b00 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  0(const char*);.
28b10 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
28b20 74 72 6c 65 6e 33 30 4e 4e 28 43 29 20 28 73 74  trlen30NN(C) (st
28b30 72 6c 65 6e 28 43 29 26 30 78 33 66 66 66 66 66  rlen(C)&0x3fffff
28b40 66 66 29 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  ff).char *sqlite
28b50 33 43 6f 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75  3ColumnType(Colu
28b60 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66  mn*,char*);.#def
28b70 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49  ine sqlite3StrNI
28b80 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e  Cmp sqlite3_strn
28b90 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65  icmp..int sqlite
28ba0 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64  3MallocInit(void
28bb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
28bc0 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a  allocEnd(void);.
28bd0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
28be0 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a  loc(u64);.void *
28bf0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72  sqlite3MallocZer
28c00 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  o(u64);.void *sq
28c10 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
28c20 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  o(sqlite3*, u64)
28c30 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
28c40 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74  bMallocRaw(sqlit
28c50 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  e3*, u64);.void 
28c60 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
28c70 52 61 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20  RawNN(sqlite3*, 
28c80 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  u64);.char *sqli
28c90 74 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69  te3DbStrDup(sqli
28ca0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
28cb0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
28cc0 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65  DbStrNDup(sqlite
28cd0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
28ce0 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  u64);.char *sqli
28cf0 74 65 33 44 62 53 70 61 6e 44 75 70 28 73 71 6c  te3DbSpanDup(sql
28d00 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
28d10 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
28d20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61  void *sqlite3Rea
28d30 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34 29  lloc(void*, u64)
28d40 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
28d50 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73  bReallocOrFree(s
28d60 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a  qlite3 *, void *
28d70 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
28d80 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73  lite3DbRealloc(s
28d90 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a  qlite3 *, void *
28da0 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c  , u64);.void sql
28db0 69 74 65 33 44 62 46 72 65 65 28 73 71 6c 69 74  ite3DbFree(sqlit
28dc0 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  e3*, void*);.voi
28dd0 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e  d sqlite3DbFreeN
28de0 4e 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  N(sqlite3*, void
28df0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  *);.int sqlite3M
28e00 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29  allocSize(void*)
28e10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d  ;.int sqlite3DbM
28e20 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65  allocSize(sqlite
28e30 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  3*, void*);.void
28e40 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c   *sqlite3PageMal
28e50 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  loc(int);.void s
28e60 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76  qlite3PageFree(v
28e70 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
28e80 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74  te3MemSetDefault
28e90 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66 20  (void);.#ifndef 
28ea0 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
28eb0 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  E.void sqlite3Be
28ec0 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28  nignMallocHooks(
28ed0 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20  void (*)(void), 
28ee0 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b  void (*)(void));
28ef0 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
28f00 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c  te3HeapNearlyFul
28f10 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20  l(void);../*.** 
28f20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  On systems with 
28f30 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63  ample stack spac
28f40 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f  e and that suppo
28f50 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b  rt alloca(), mak
28f60 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f  e.** use of allo
28f70 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73  ca() to obtain s
28f80 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61  pace for large a
28f90 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73  utomatic objects
28fa0 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a  .  By default,.*
28fb0 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  * obtain space f
28fc0 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a  rom malloc()..**
28fd0 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29  .** The alloca()
28fe0 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72   routine never r
28ff0 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68  eturns NULL.  Th
29000 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f  is will cause co
29010 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74  de paths.** that
29020 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74   deal with sqlit
29030 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66  e3StackAlloc() f
29040 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e  ailures to be un
29050 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69  reachable..*/.#i
29060 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f  fdef SQLITE_USE_
29070 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20  ALLOCA.# define 
29080 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
29090 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f  cRaw(D,N)   allo
290a0 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  ca(N).# define s
290b0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
290c0 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65  Zero(D,N)  memse
290d0 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20  t(alloca(N), 0, 
290e0 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
290f0 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50  te3StackFree(D,P
29100 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
29110 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
29120 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c  ocRaw(D,N)   sql
29130 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
29140 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  D,N).# define sq
29150 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a  lite3StackAllocZ
29160 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65  ero(D,N)  sqlite
29170 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c  3DbMallocZero(D,
29180 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
29190 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50  te3StackFree(D,P
291a0 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  )       sqlite3D
291b0 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69  bFree(D,P).#endi
291c0 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c  f../* Do not all
291d0 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59 53 35 20  ow both MEMSYS5 
291e0 61 6e 64 20 4d 45 4d 53 59 53 33 20 74 6f 20 62  and MEMSYS3 to b
291f0 65 20 64 65 66 69 6e 65 64 20 74 6f 67 65 74 68  e defined togeth
29200 65 72 2e 20 20 49 66 20 74 68 65 79 0a 2a 2a 20  er.  If they.** 
29210 61 72 65 2c 20 64 69 73 61 62 6c 65 20 4d 45 4d  are, disable MEM
29220 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65 66 20 53  SYS3.*/.#ifdef S
29230 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
29240 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS5.const sqlit
29250 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
29260 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
29270 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 75 6e 64  sys5(void);.#und
29280 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
29290 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64 69 66 0a  _MEMSYS3.#endif.
292a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
292b0 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e  ABLE_MEMSYS3.con
292c0 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
292d0 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
292e0 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69  emGetMemsys3(voi
292f0 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66  d);.#endif...#if
29300 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45  ndef SQLITE_MUTE
29310 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33  X_OMIT.  sqlite3
29320 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
29330 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66  onst *sqlite3Def
29340 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b  aultMutex(void);
29350 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
29360 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
29370 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78  sqlite3NoopMutex
29380 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
29390 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
293a0 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b  MutexAlloc(int);
293b0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
293c0 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20  texInit(void);. 
293d0 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65   int sqlite3Mute
293e0 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64  xEnd(void);.#end
293f0 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
29400 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49  SQLITE_MUTEX_OMI
29410 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
29420 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50  QLITE_MUTEX_NOOP
29430 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
29440 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 76 6f  MemoryBarrier(vo
29450 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  id);.#else.# def
29460 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72  ine sqlite3Memor
29470 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e 64 69  yBarrier().#endi
29480 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  f..sqlite3_int64
29490 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61   sqlite3StatusVa
294a0 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  lue(int);.void s
294b0 71 6c 69 74 65 33 53 74 61 74 75 73 55 70 28 69  qlite3StatusUp(i
294c0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
294d0 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77 6e  qlite3StatusDown
294e0 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  (int, int);.void
294f0 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 48 69   sqlite3StatusHi
29500 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69 6e 74  ghwater(int, int
29510 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4c 6f  );.int sqlite3Lo
29520 6f 6b 61 73 69 64 65 55 73 65 64 28 73 71 6c 69  okasideUsed(sqli
29530 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a 0a 2f 2a 20  te3*,int*);../* 
29540 41 63 63 65 73 73 20 74 6f 20 6d 75 74 65 78 65  Access to mutexe
29550 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  s used by sqlite
29560 33 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 73 71  3_status() */.sq
29570 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
29580 69 74 65 33 50 63 61 63 68 65 31 4d 75 74 65 78  ite3Pcache1Mutex
29590 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f  (void);.sqlite3_
295a0 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 61  mutex *sqlite3Ma
295b0 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64 29 3b  llocMutex(void);
295c0 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
295d0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54  LITE_ENABLE_MULT
295e0 49 54 48 52 45 41 44 45 44 5f 43 48 45 43 4b 53  ITHREADED_CHECKS
295f0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
29600 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29  LITE_MUTEX_OMIT)
29610 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 74  .void sqlite3Mut
29620 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69  exWarnOnContenti
29630 6f 6e 28 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  on(sqlite3_mutex
29640 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
29650 6e 65 20 73 71 6c 69 74 65 33 4d 75 74 65 78 57  ne sqlite3MutexW
29660 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28  arnOnContention(
29670 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  x).#endif..#ifnd
29680 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
29690 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
296a0 64 65 66 69 6e 65 20 45 58 50 37 35 34 20 28 28  define EXP754 ((
296b0 28 75 36 34 29 30 78 37 66 66 29 3c 3c 35 32 29  (u64)0x7ff)<<52)
296c0 0a 23 20 64 65 66 69 6e 65 20 4d 41 4e 37 35 34  .# define MAN754
296d0 20 28 28 28 28 75 36 34 29 31 29 3c 3c 35 32 29   ((((u64)1)<<52)
296e0 2d 31 29 0a 23 20 64 65 66 69 6e 65 20 49 73 4e  -1).# define IsN
296f0 61 4e 28 58 29 20 28 28 28 58 29 26 45 58 50 37  aN(X) (((X)&EXP7
29700 35 34 29 3d 3d 45 58 50 37 35 34 20 26 26 20 28  54)==EXP754 && (
29710 28 58 29 26 4d 41 4e 37 35 34 29 21 3d 30 29 0a  (X)&MAN754)!=0).
29720 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e    int sqlite3IsN
29730 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73  aN(double);.#els
29740 65 0a 23 20 64 65 66 69 6e 65 20 49 73 4e 61 4e  e.# define IsNaN
29750 28 58 29 20 20 20 20 20 20 20 20 20 30 0a 23 20  (X)         0.# 
29760 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
29770 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66  NaN(X)  0.#endif
29780 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
29790 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
297a0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68  wing structure h
297b0 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  olds information
297c0 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75   about SQL.** fu
297d0 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74  nctions argument
297e0 73 20 74 68 61 74 20 61 72 65 20 74 68 65 20 70  s that are the p
297f0 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65  arameters to the
29800 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69   printf() functi
29810 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72  on..*/.struct Pr
29820 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a  intfArguments {.
29830 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20    int nArg;     
29840 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
29850 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  tal number of ar
29860 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  guments */.  int
29870 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20 20   nUsed;         
29880 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
29890 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65  of arguments use
298a0 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71  d so far */.  sq
298b0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70  lite3_value **ap
298c0 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72  Arg;   /* The ar
298d0 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f  gument values */
298e0 0a 7d 3b 0a 0a 63 68 61 72 20 2a 73 71 6c 69 74  .};..char *sqlit
298f0 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  e3MPrintf(sqlite
29900 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
29910 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ...);.char *sqli
29920 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69  te3VMPrintf(sqli
29930 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
29940 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20  , va_list);.#if 
29950 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
29960 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
29970 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f  (SQLITE_HAVE_OS_
29980 54 52 41 43 45 29 0a 20 20 76 6f 69 64 20 73 71  TRACE).  void sq
29990 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
299a0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  (const char*, ..
299b0 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  .);.#endif.#if d
299c0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
299d0 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  ST).  void *sqli
299e0 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72  te3TestTextToPtr
299f0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
29a00 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
29a10 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
29a20 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
29a30 72 65 65 56 69 65 77 45 78 70 72 28 54 72 65 65  reeViewExpr(Tree
29a40 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70  View*, const Exp
29a50 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20  r*, u8);.  void 
29a60 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 42  sqlite3TreeViewB
29a70 61 72 65 45 78 70 72 4c 69 73 74 28 54 72 65 65  areExprList(Tree
29a80 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70  View*, const Exp
29a90 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
29aa0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
29ab0 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
29ac0 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20  List(TreeView*, 
29ad0 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c  const ExprList*,
29ae0 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a   u8, const char*
29af0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
29b00 33 54 72 65 65 56 69 65 77 53 72 63 4c 69 73 74  3TreeViewSrcList
29b10 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
29b20 74 20 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 76  t SrcList*);.  v
29b30 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
29b40 69 65 77 53 65 6c 65 63 74 28 54 72 65 65 56 69  iewSelect(TreeVi
29b50 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63  ew*, const Selec
29b60 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20  t*, u8);.  void 
29b70 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57  sqlite3TreeViewW
29b80 69 74 68 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ith(TreeView*, c
29b90 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75 38 29 3b  onst With*, u8);
29ba0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29bb0 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a  OMIT_WINDOWFUNC.
29bc0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
29bd0 65 65 56 69 65 77 57 69 6e 64 6f 77 28 54 72 65  eeViewWindow(Tre
29be0 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69  eView*, const Wi
29bf0 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a 20 20 76 6f  ndow*, u8);.  vo
29c00 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
29c10 65 77 57 69 6e 46 75 6e 63 28 54 72 65 65 56 69  ewWinFunc(TreeVi
29c20 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 6e 64 6f  ew*, const Windo
29c30 77 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a  w*, u8);.#endif.
29c40 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71  #endif...void sq
29c50 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63  lite3SetString(c
29c60 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  har **, sqlite3*
29c70 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
29c80 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
29c90 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rMsg(Parse*, con
29ca0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
29cb0 69 6e 74 20 73 71 6c 69 74 65 33 45 72 72 6f 72  int sqlite3Error
29cc0 54 6f 50 61 72 73 65 72 28 73 71 6c 69 74 65 33  ToParser(sqlite3
29cd0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
29ce0 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72  ite3Dequote(char
29cf0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29d00 44 65 71 75 6f 74 65 45 78 70 72 28 45 78 70 72  DequoteExpr(Expr
29d10 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29d20 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a  TokenInit(Token*
29d30 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  ,char*);.int sql
29d40 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28  ite3KeywordCode(
29d50 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
29d60 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
29d70 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72  sqlite3RunParser
29d80 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
29d90 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  har*, char **);.
29da0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
29db0 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29  shCoding(Parse*)
29dc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
29dd0 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b  TempReg(Parse*);
29de0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
29df0 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73  easeTempReg(Pars
29e00 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  e*,int);.int sql
29e10 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65  ite3GetTempRange
29e20 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
29e30 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
29e40 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  eTempRange(Parse
29e50 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
29e60 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d   sqlite3ClearTem
29e70 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a  pRegCache(Parse*
29e80 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
29e90 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74  _DEBUG.int sqlit
29ea0 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65  e3NoTempsInRange
29eb0 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29  (Parse*,int,int)
29ec0 3b 0a 23 65 6e 64 69 66 0a 45 78 70 72 20 2a 73  ;.#endif.Expr *s
29ed0 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28  qlite3ExprAlloc(
29ee0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
29ef0 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  st Token*,int);.
29f00 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
29f10 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
29f20 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
29f30 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74  d sqlite3ExprAtt
29f40 61 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69  achSubtrees(sqli
29f50 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  te3*,Expr*,Expr*
29f60 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73  ,Expr*);.Expr *s
29f70 71 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73  qlite3PExpr(Pars
29f80 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20  e*, int, Expr*, 
29f90 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
29fa0 69 74 65 33 50 45 78 70 72 41 64 64 53 65 6c 65  ite3PExprAddSele
29fb0 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ct(Parse*, Expr*
29fc0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72  , Select*);.Expr
29fd0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64   *sqlite3ExprAnd
29fe0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45  (Parse*,Expr*, E
29ff0 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
2a000 69 74 65 33 45 78 70 72 53 69 6d 70 6c 69 66 69  ite3ExprSimplifi
2a010 65 64 41 6e 64 4f 72 28 45 78 70 72 2a 29 3b 0a  edAndOr(Expr*);.
2a020 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
2a030 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a  rFunction(Parse*
2a040 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65  ,ExprList*, Toke
2a050 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  n*, int);.void s
2a060 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e  qlite3ExprAssign
2a070 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a  VarNumber(Parse*
2a080 2c 20 45 78 70 72 2a 2c 20 75 33 32 29 3b 0a 76  , Expr*, u32);.v
2a090 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44  oid sqlite3ExprD
2a0a0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
2a0b0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2a0c0 69 74 65 33 45 78 70 72 55 6e 6d 61 70 41 6e 64  ite3ExprUnmapAnd
2a0d0 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 45  Delete(Parse*, E
2a0e0 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20  xpr*);.ExprList 
2a0f0 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
2a100 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78  Append(Parse*,Ex
2a110 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  prList*,Expr*);.
2a120 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
2a130 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 56  3ExprListAppendV
2a140 65 63 74 6f 72 28 50 61 72 73 65 2a 2c 45 78 70  ector(Parse*,Exp
2a150 72 4c 69 73 74 2a 2c 49 64 4c 69 73 74 2a 2c 45  rList*,IdList*,E
2a160 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2a170 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 6f  te3ExprListSetSo
2a180 72 74 4f 72 64 65 72 28 45 78 70 72 4c 69 73 74  rtOrder(ExprList
2a190 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
2a1a0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
2a1b0 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45  SetName(Parse*,E
2a1c0 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c  xprList*,Token*,
2a1d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2a1e0 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 70 61  e3ExprListSetSpa
2a1f0 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  n(Parse*,ExprLis
2a200 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  t*,const char*,c
2a210 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2a220 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
2a230 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
2a240 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33  , ExprList*);.u3
2a250 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  2 sqlite3ExprLis
2a260 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70  tFlags(const Exp
2a270 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
2a280 69 74 65 33 49 6e 64 65 78 48 61 73 44 75 70 6c  ite3IndexHasDupl
2a290 69 63 61 74 65 52 6f 6f 74 50 61 67 65 28 49 6e  icateRootPage(In
2a2a0 64 65 78 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  dex*);.int sqlit
2a2b0 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c  e3Init(sqlite3*,
2a2c0 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71   char**);.int sq
2a2d0 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
2a2e0 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68  k(void*, int, ch
2a2f0 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69  ar**, char**);.i
2a300 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e  nt sqlite3InitOn
2a310 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  e(sqlite3*, int,
2a320 20 63 68 61 72 2a 2a 2c 20 75 33 32 29 3b 0a 76   char**, u32);.v
2a330 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d  oid sqlite3Pragm
2a340 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  a(Parse*,Token*,
2a350 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
2a360 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
2a370 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2a380 41 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c  ABLE.Module *sql
2a390 69 74 65 33 50 72 61 67 6d 61 56 74 61 62 52 65  ite3PragmaVtabRe
2a3a0 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 2c  gister(sqlite3*,
2a3b0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
2a3c0 65 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  e);.#endif.void 
2a3d0 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
2a3e0 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
2a3f0 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  on(sqlite3*);.vo
2a400 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f  id sqlite3ResetO
2a410 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33  neSchema(sqlite3
2a420 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2a430 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61  ite3CollapseData
2a440 62 61 73 65 41 72 72 61 79 28 73 71 6c 69 74 65  baseArray(sqlite
2a450 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
2a460 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43  3CommitInternalC
2a470 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29  hanges(sqlite3*)
2a480 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
2a490 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  leteColumnNames(
2a4a0 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29  sqlite3*,Table*)
2a4b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c  ;.int sqlite3Col
2a4c0 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73 74  umnsFromExprList
2a4d0 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
2a4e0 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29  *,i16*,Column**)
2a4f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
2a500 6c 65 63 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70  lectAddColumnTyp
2a510 65 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61  eAndCollation(Pa
2a520 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65  rse*,Table*,Sele
2a530 63 74 2a 2c 63 68 61 72 29 3b 0a 54 61 62 6c 65  ct*,char);.Table
2a540 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53   *sqlite3ResultS
2a550 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65  etOfSelect(Parse
2a560 2a 2c 53 65 6c 65 63 74 2a 2c 63 68 61 72 29 3b  *,Select*,char);
2a570 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
2a580 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
2a590 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65  se *, int);.Inde
2a5a0 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72  x *sqlite3Primar
2a5b0 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a  yKeyIndex(Table*
2a5c0 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f  );.i16 sqlite3Co
2a5d0 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65  lumnOfIndex(Inde
2a5e0 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73  x*, i16);.void s
2a5f0 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
2a600 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
2a610 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
2a620 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49  t,int);.#if SQLI
2a630 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e  TE_ENABLE_HIDDEN
2a640 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20  _COLUMNS.  void 
2a650 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f  sqlite3ColumnPro
2a660 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28  pertiesFromName(
2a670 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29  Table*, Column*)
2a680 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2a690 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72   sqlite3ColumnPr
2a6a0 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65  opertiesFromName
2a6b0 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  (T,C) /* no-op *
2a6c0 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  /.#endif.void sq
2a6d0 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50  lite3AddColumn(P
2a6e0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
2a6f0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2a700 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72  e3AddNotNull(Par
2a710 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
2a720 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72  sqlite3AddPrimar
2a730 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  yKey(Parse*, Exp
2a740 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
2a750 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2a760 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73  ite3AddCheckCons
2a770 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45  traint(Parse*, E
2a780 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2a790 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c  te3AddDefaultVal
2a7a0 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ue(Parse*,Expr*,
2a7b0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
2a7c0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2a7d0 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65  qlite3AddCollate
2a7e0 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
2a7f0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2a800 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65  e3EndTable(Parse
2a810 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
2a820 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  u8,Select*);.int
2a830 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69   sqlite3ParseUri
2a840 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  (const char*,con
2a850 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65  st char*,unsigne
2a860 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20  d int*,.        
2a870 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
2a880 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a  te3_vfs**,char**
2a890 2c 63 68 61 72 20 2a 2a 29 3b 0a 23 69 66 64 65  ,char **);.#ifde
2a8a0 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44  f SQLITE_HAS_COD
2a8b0 45 43 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  EC.  int sqlite3
2a8c0 43 6f 64 65 63 51 75 65 72 79 50 61 72 61 6d 65  CodecQueryParame
2a8d0 74 65 72 73 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ters(sqlite3*,co
2a8e0 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
2a8f0 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  char*);.#else.# 
2a900 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2a910 64 65 63 51 75 65 72 79 50 61 72 61 6d 65 74 65  decQueryParamete
2a920 72 73 28 41 2c 42 2c 43 29 20 30 0a 23 65 6e 64  rs(A,B,C) 0.#end
2a930 69 66 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65  if.Btree *sqlite
2a940 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73  3DbNameToBtree(s
2a950 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
2a960 61 72 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  ar*);..#ifdef SQ
2a970 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
2a980 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2a990 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49  FaultSim(X) SQLI
2a9a0 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e  TE_OK.#else.  in
2a9b0 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  t sqlite3FaultSi
2a9c0 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  m(int);.#endif..
2a9d0 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42  Bitvec *sqlite3B
2a9e0 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32 29  itvecCreate(u32)
2a9f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
2aa00 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c  vecTest(Bitvec*,
2aa10 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u32);.int sqlit
2aa20 65 33 42 69 74 76 65 63 54 65 73 74 4e 6f 74 4e  e3BitvecTestNotN
2aa30 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75 33 32  ull(Bitvec*, u32
2aa40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
2aa50 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c  tvecSet(Bitvec*,
2aa60 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u32);.void sqli
2aa70 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42  te3BitvecClear(B
2aa80 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69  itvec*, u32, voi
2aa90 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
2aaa0 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42  3BitvecDestroy(B
2aab0 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c  itvec*);.u32 sql
2aac0 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42  ite3BitvecSize(B
2aad0 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66  itvec*);.#ifndef
2aae0 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
2aaf0 4c 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  LE.int sqlite3Bi
2ab00 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28  tvecBuiltinTest(
2ab10 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64 69  int,int*);.#endi
2ab20 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74  f..RowSet *sqlit
2ab30 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c  e3RowSetInit(sql
2ab40 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
2ab50 69 74 65 33 52 6f 77 53 65 74 44 65 6c 65 74 65  ite3RowSetDelete
2ab60 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
2ab70 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72  lite3RowSetClear
2ab80 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
2ab90 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
2aba0 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b  t(RowSet*, i64);
2abb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
2abc0 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20  etTest(RowSet*, 
2abd0 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34 29  int iBatch, i64)
2abe0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
2abf0 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c  SetNext(RowSet*,
2ac00 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71   i64*);..void sq
2ac10 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28  lite3CreateView(
2ac20 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
2ac30 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  ken*,Token*,Expr
2ac40 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  List*,Select*,in
2ac50 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  t,int);..#if !de
2ac60 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2ac70 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69  T_VIEW) || !defi
2ac80 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2ac90 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20  VIRTUALTABLE).  
2aca0 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47  int sqlite3ViewG
2acb0 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61  etColumnNames(Pa
2acc0 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65  rse*,Table*);.#e
2acd0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2ace0 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
2acf0 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65  nNames(A,B) 0.#e
2ad00 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45  ndif..#if SQLITE
2ad10 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
2ad20 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62  .  int sqlite3Db
2ad30 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d  MaskAllZero(yDbM
2ad40 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ask);.#endif.voi
2ad50 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62  d sqlite3DropTab
2ad60 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
2ad70 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
2ad80 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
2ad90 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
2ada0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
2adb0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2adc0 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c  3DeleteTable(sql
2add0 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
2ade0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 72 65 65  void sqlite3Free
2adf0 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 20  Index(sqlite3*, 
2ae00 49 6e 64 65 78 2a 29 3b 0a 23 69 66 6e 64 65 66  Index*);.#ifndef
2ae10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
2ae20 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69  OINCREMENT.  voi
2ae30 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
2ae40 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73  rementBegin(Pars
2ae50 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f  e *pParse);.  vo
2ae60 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
2ae70 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65  crementEnd(Parse
2ae80 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65   *pParse);.#else
2ae90 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2aea0 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
2aeb0 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20  gin(X).# define 
2aec0 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
2aed0 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69  mentEnd(X).#endi
2aee0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  f.void sqlite3In
2aef0 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63  sert(Parse*, Src
2af00 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  List*, Select*, 
2af10 49 64 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 55 70  IdList*, int, Up
2af20 73 65 72 74 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  sert*);.void *sq
2af30 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61  lite3ArrayAlloca
2af40 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64  te(sqlite3*,void
2af50 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29  *,int,int*,int*)
2af60 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
2af70 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 50 61  3IdListAppend(Pa
2af80 72 73 65 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54  rse*, IdList*, T
2af90 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2afa0 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49  te3IdListIndex(I
2afb0 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  dList*,const cha
2afc0 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  r*);.SrcList *sq
2afd0 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61  lite3SrcListEnla
2afe0 72 67 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rge(Parse*, SrcL
2aff0 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
2b000 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
2b010 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 50  3SrcListAppend(P
2b020 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2b030 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
2b040 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
2b050 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46  e3SrcListAppendF
2b060 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20  romTerm(Parse*, 
2b070 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
2b080 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  , Token*,.      
2b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0b0 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c  Token*, Select*,
2b0c0 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29   Expr*, IdList*)
2b0d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
2b0e0 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50  cListIndexedBy(P
2b0f0 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20  arse *, SrcList 
2b100 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69  *, Token *);.voi
2b110 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
2b120 46 75 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c  FuncArgs(Parse*,
2b130 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
2b140 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2b150 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75  e3IndexedByLooku
2b160 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63  p(Parse *, struc
2b170 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
2b180 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2b190 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54  rcListShiftJoinT
2b1a0 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76  ype(SrcList*);.v
2b1b0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
2b1c0 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28  stAssignCursors(
2b1d0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2b1e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
2b1f0 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  dListDelete(sqli
2b200 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a  te3*, IdList*);.
2b210 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
2b220 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
2b230 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49  3*, SrcList*);.I
2b240 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c  ndex *sqlite3All
2b250 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74  ocateIndexObject
2b260 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e  (sqlite3*,i16,in
2b270 74 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20  t,char**);.void 
2b280 73 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64  sqlite3CreateInd
2b290 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ex(Parse*,Token*
2b2a0 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a  ,Token*,SrcList*
2b2b0 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54  ,ExprList*,int,T
2b2c0 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20  oken*,.         
2b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2e0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
2b2f0 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
2b300 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72  te3DropIndex(Par
2b310 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
2b320 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2b330 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53  Select(Parse*, S
2b340 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65  elect*, SelectDe
2b350 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
2b360 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50  lite3SelectNew(P
2b370 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
2b380 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
2b390 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  xprList*,.      
2b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3b0 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73     Expr*,ExprLis
2b3c0 74 2a 2c 75 33 32 2c 45 78 70 72 2a 29 3b 0a 76  t*,u32,Expr*);.v
2b3d0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
2b3e0 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
2b3f0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c  , Select*);.Tabl
2b400 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  e *sqlite3SrcLis
2b410 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20  tLookup(Parse*, 
2b420 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  SrcList*);.int s
2b430 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79  qlite3IsReadOnly
2b440 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2b450 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2b460 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72  te3OpenTable(Par
2b470 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69  se*, int iCur, i
2b480 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20  nt iDb, Table*, 
2b490 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65  int);.#if define
2b4a0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2b4b0 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49  UPDATE_DELETE_LI
2b4c0 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  MIT) && !defined
2b4d0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42  (SQLITE_OMIT_SUB
2b4e0 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c  QUERY).Expr *sql
2b4f0 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50  ite3LimitWhere(P
2b500 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
2b510 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
2b520 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e  xpr*,char*);.#en
2b530 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2b540 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65  DeleteFrom(Parse
2b550 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
2b560 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45  r*, ExprList*, E
2b570 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2b580 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a  te3Update(Parse*
2b590 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
2b5a0 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c  List*,Expr*,int,
2b5b0 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
2b5c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b5d0 20 20 20 20 55 70 73 65 72 74 2a 29 3b 0a 57 68      Upsert*);.Wh
2b5e0 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  ereInfo *sqlite3
2b5f0 57 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65  WhereBegin(Parse
2b600 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
2b610 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c  ,ExprList*,ExprL
2b620 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76  ist*,u16,int);.v
2b630 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65  oid sqlite3Where
2b640 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  End(WhereInfo*);
2b650 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 57  .LogEst sqlite3W
2b660 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75  hereOutputRowCou
2b670 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nt(WhereInfo*);.
2b680 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
2b690 49 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65  IsDistinct(Where
2b6a0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
2b6b0 74 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65  te3WhereIsOrdere
2b6c0 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  d(WhereInfo*);.i
2b6d0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f  nt sqlite3WhereO
2b6e0 72 64 65 72 42 79 4c 69 6d 69 74 4f 70 74 4c 61  rderByLimitOptLa
2b6f0 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  bel(WhereInfo*);
2b700 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
2b710 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49  eIsSorted(WhereI
2b720 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
2b730 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c  e3WhereContinueL
2b740 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29  abel(WhereInfo*)
2b750 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
2b760 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65  reBreakLabel(Whe
2b770 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
2b780 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50  lite3WhereOkOneP
2b790 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20  ass(WhereInfo*, 
2b7a0 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f  int*);.#define O
2b7b0 4e 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20  NEPASS_OFF      
2b7c0 30 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20  0        /* Use 
2b7d0 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61  of ONEPASS not a
2b7e0 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e  llowed */.#defin
2b7f0 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45  e ONEPASS_SINGLE
2b800 20 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f     1        /* O
2b810 4e 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72  NEPASS valid for
2b820 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70   a single row up
2b830 64 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  date */.#define 
2b840 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20  ONEPASS_MULTI   
2b850 20 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45   2        /* ONE
2b860 50 41 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f  PASS is valid fo
2b870 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  r multiple rows 
2b880 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  */.void sqlite3E
2b890 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78  xprCodeLoadIndex
2b8a0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49  Column(Parse*, I
2b8b0 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ndex*, int, int,
2b8c0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2b8d0 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
2b8e0 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  umn(Parse*, Tabl
2b8f0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
2b900 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  t, u8);.void sql
2b910 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
2b920 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62  olumnOfTable(Vdb
2b930 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
2b940 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2b950 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2b960 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  Move(Parse*, int
2b970 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2b980 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
2b990 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
2b9a0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2b9b0 74 65 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28  te3ExprCodeCopy(
2b9c0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2b9d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2b9e0 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61  3ExprCodeFactora
2b9f0 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ble(Parse*, Expr
2ba00 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2ba10 69 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e  ite3ExprCodeAtIn
2ba20 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  it(Parse*, Expr*
2ba30 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2ba40 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28  te3ExprCodeTemp(
2ba50 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2ba60 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2ba70 33 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28  3ExprCodeTarget(
2ba80 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2ba90 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2baa0 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68  3ExprCodeAndCach
2bab0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
2bac0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2bad0 65 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69  e3ExprCodeExprLi
2bae0 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  st(Parse*, ExprL
2baf0 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ist*, int, int, 
2bb00 75 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  u8);.#define SQL
2bb10 49 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20  ITE_ECEL_DUP    
2bb20 20 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c    0x01  /* Deep,
2bb30 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70   not shallow cop
2bb40 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ies */.#define S
2bb50 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f  QLITE_ECEL_FACTO
2bb60 52 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63  R   0x02  /* Fac
2bb70 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74  tor out constant
2bb80 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e   terms */.#defin
2bb90 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45  e SQLITE_ECEL_RE
2bba0 46 20 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20  F      0x04  /* 
2bbb0 55 73 65 20 45 78 70 72 4c 69 73 74 2e 75 2e 78  Use ExprList.u.x
2bbc0 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a  .iOrderByCol */.
2bbd0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
2bbe0 43 45 4c 5f 4f 4d 49 54 52 45 46 20 20 30 78 30  CEL_OMITREF  0x0
2bbf0 38 20 20 2f 2a 20 4f 6d 69 74 20 69 66 20 45 78  8  /* Omit if Ex
2bc00 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65  prList.u.x.iOrde
2bc10 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73  rByCol */.void s
2bc20 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65  qlite3ExprIfTrue
2bc30 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2bc40 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2bc50 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c  sqlite3ExprIfFal
2bc60 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  se(Parse*, Expr*
2bc70 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2bc80 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
2bc90 61 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20  alseDup(Parse*, 
2bca0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
2bcb0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
2bcc0 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65  FindTable(sqlite
2bcd0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
2bce0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64  const char*);.#d
2bcf0 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 56 49 45  efine LOCATE_VIE
2bd00 57 20 20 20 20 30 78 30 31 0a 23 64 65 66 69 6e  W    0x01.#defin
2bd10 65 20 4c 4f 43 41 54 45 5f 4e 4f 45 52 52 20 20  e LOCATE_NOERR  
2bd20 20 30 78 30 32 0a 54 61 62 6c 65 20 2a 73 71 6c   0x02.Table *sql
2bd30 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28  ite3LocateTable(
2bd40 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73  Parse*,u32 flags
2bd50 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
2bd60 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
2bd70 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
2bd80 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a  TableItem(Parse*
2bd90 2c 75 33 32 20 66 6c 61 67 73 2c 73 74 72 75 63  ,u32 flags,struc
2bda0 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
2bdb0 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
2bdc0 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74  3FindIndex(sqlit
2bdd0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
2bde0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
2bdf0 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
2be00 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28  kAndDeleteTable(
2be10 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
2be20 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2be30 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2be40 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69  DeleteIndex(sqli
2be50 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
2be60 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2be70 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a  te3Vacuum(Parse*
2be80 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 2a 29 3b 0a  ,Token*,Expr*);.
2be90 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61  int sqlite3RunVa
2bea0 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c  cuum(char**, sql
2beb0 69 74 65 33 2a 2c 20 69 6e 74 2c 20 73 71 6c 69  ite3*, int, sqli
2bec0 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 63 68 61  te3_value*);.cha
2bed0 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72  r *sqlite3NameFr
2bee0 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a  omToken(sqlite3*
2bef0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2bf00 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72  qlite3ExprCompar
2bf10 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20  e(Parse*,Expr*, 
2bf20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
2bf30 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70   sqlite3ExprComp
2bf40 61 72 65 53 6b 69 70 28 45 78 70 72 2a 2c 20 45  areSkip(Expr*, E
2bf50 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
2bf60 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43  sqlite3ExprListC
2bf70 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a  ompare(ExprList*
2bf80 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2bf90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2bfa0 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 50 61  prImpliesExpr(Pa
2bfb0 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  rse*,Expr*, Expr
2bfc0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2bfd0 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 4e  ite3ExprImpliesN
2bfe0 6f 6e 4e 75 6c 6c 52 6f 77 28 45 78 70 72 2a 2c  onNullRow(Expr*,
2bff0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2c000 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
2c010 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74  regates(NameCont
2c020 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
2c030 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
2c040 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d  alyzeAggList(Nam
2c050 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69  eContext*,ExprLi
2c060 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
2c070 33 45 78 70 72 43 6f 76 65 72 65 64 42 79 49 6e  3ExprCoveredByIn
2c080 64 65 78 28 45 78 70 72 2a 2c 20 69 6e 74 20 69  dex(Expr*, int i
2c090 43 75 72 2c 20 49 6e 64 65 78 20 2a 70 49 64 78  Cur, Index *pIdx
2c0a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75  );.int sqlite3Fu
2c0b0 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72  nctionUsesThisSr
2c0c0 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74  c(Expr*, SrcList
2c0d0 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65  *);.Vdbe *sqlite
2c0e0 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29  3GetVdbe(Parse*)
2c0f0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2c100 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64  _UNTESTABLE.void
2c110 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65   sqlite3PrngSave
2c120 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69  State(void);.voi
2c130 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73  d sqlite3PrngRes
2c140 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b  toreState(void);
2c150 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2c160 69 74 65 33 46 61 73 74 50 72 6e 67 49 6e 69 74  ite3FastPrngInit
2c170 28 46 61 73 74 50 72 6e 67 2a 29 3b 0a 76 6f 69  (FastPrng*);.voi
2c180 64 20 73 71 6c 69 74 65 33 46 61 73 74 52 61 6e  d sqlite3FastRan
2c190 64 6f 6d 6e 65 73 73 28 46 61 73 74 50 72 6e 67  domness(FastPrng
2c1a0 2a 2c 20 69 6e 74 20 4e 2c 20 76 6f 69 64 20 2a  *, int N, void *
2c1b0 50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  P);.void sqlite3
2c1c0 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69  RollbackAll(sqli
2c1d0 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
2c1e0 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
2c1f0 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  ySchema(Parse*, 
2c200 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2c210 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65  e3CodeVerifyName
2c220 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  dSchema(Parse*, 
2c230 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29  const char *zDb)
2c240 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
2c250 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  ginTransaction(P
2c260 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
2c270 64 20 73 71 6c 69 74 65 33 45 6e 64 54 72 61 6e  d sqlite3EndTran
2c280 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69  saction(Parse*,i
2c290 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2c2a0 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65  3Savepoint(Parse
2c2b0 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b  *, int, Token*);
2c2c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f  .void sqlite3Clo
2c2d0 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c  seSavepoints(sql
2c2e0 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ite3 *);.void sq
2c2f0 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41  lite3LeaveMutexA
2c300 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71  ndCloseZombie(sq
2c310 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
2c320 69 74 65 33 45 78 70 72 49 64 54 6f 54 72 75 65  ite3ExprIdToTrue
2c330 46 61 6c 73 65 28 45 78 70 72 2a 29 3b 0a 69 6e  False(Expr*);.in
2c340 74 20 73 71 6c 69 74 65 33 45 78 70 72 54 72 75  t sqlite3ExprTru
2c350 74 68 56 61 6c 75 65 28 63 6f 6e 73 74 20 45 78  thValue(const Ex
2c360 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2c370 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28  3ExprIsConstant(
2c380 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2c390 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
2c3a0 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b  tNotJoin(Expr*);
2c3b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2c3c0 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63  IsConstantOrFunc
2c3d0 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b  tion(Expr*, u8);
2c3e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2c3f0 49 73 43 6f 6e 73 74 61 6e 74 4f 72 47 72 6f 75  IsConstantOrGrou
2c400 70 42 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  pBy(Parse*, Expr
2c410 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
2c420 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
2c430 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78  TableConstant(Ex
2c440 70 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66  pr*,int);.#ifdef
2c450 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
2c460 55 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20  URSOR_HINTS.int 
2c470 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61  sqlite3ExprConta
2c480 69 6e 73 53 75 62 71 75 65 72 79 28 45 78 70 72  insSubquery(Expr
2c490 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  *);.#endif.int s
2c4a0 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65  qlite3ExprIsInte
2c4b0 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29  ger(Expr*, int*)
2c4c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2c4d0 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74  rCanBeNull(const
2c4e0 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
2c4f0 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41  ite3ExprNeedsNoA
2c500 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f  ffinityChange(co
2c510 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29  nst Expr*, char)
2c520 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52  ;.int sqlite3IsR
2c530 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a  owid(const char*
2c540 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
2c550 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65  enerateRowDelete
2c560 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62  (.    Parse*,Tab
2c570 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74  le*,Trigger*,int
2c580 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c  ,int,int,i16,u8,
2c590 75 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64  u8,u8,int);.void
2c5a0 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
2c5b0 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50  RowIndexDelete(P
2c5c0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
2c5d0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
2c5e0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2c5f0 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79  GenerateIndexKey
2c600 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
2c610 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20   int, int, int, 
2c620 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29  int*,Index*,int)
2c630 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2c640 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65  solvePartIdxLabe
2c650 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69  l(Parse*,int);.i
2c660 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 52 65  nt sqlite3ExprRe
2c670 66 65 72 65 6e 63 65 73 55 70 64 61 74 65 64 43  ferencesUpdatedC
2c680 6f 6c 75 6d 6e 28 45 78 70 72 2a 2c 69 6e 74 2a  olumn(Expr*,int*
2c690 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2c6a0 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74  te3GenerateConst
2c6b0 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73  raintChecks(Pars
2c6c0 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69  e*,Table*,int*,i
2c6d0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a  nt,int,int,int,.
2c6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c700 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69       u8,u8,int,i
2c710 6e 74 2a 2c 69 6e 74 2a 2c 55 70 73 65 72 74 2a  nt*,int*,Upsert*
2c720 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2c730 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49  _ENABLE_NULL_TRI
2c740 4d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  M.  void sqlite3
2c750 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28  SetMakeRecordP5(
2c760 56 64 62 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23  Vdbe*,Table*);.#
2c770 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2c780 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f  lite3SetMakeReco
2c790 72 64 50 35 28 41 2c 42 29 0a 23 65 6e 64 69 66  rdP5(A,B).#endif
2c7a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
2c7b0 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50  pleteInsertion(P
2c7c0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
2c7d0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  ,int,int,int*,in
2c7e0 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20  t,int,int);.int 
2c7f0 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
2c800 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65  AndIndices(Parse
2c810 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
2c820 75 38 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e  u8, int, u8*, in
2c830 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20  t*, int*);.void 
2c840 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74  sqlite3BeginWrit
2c850 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65  eOperation(Parse
2c860 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
2c870 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57  id sqlite3MultiW
2c880 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f  rite(Parse*);.vo
2c890 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f  id sqlite3MayAbo
2c8a0 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  rt(Parse*);.void
2c8b0 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73   sqlite3HaltCons
2c8c0 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
2c8d0 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20  nt, int, char*, 
2c8e0 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  i8, u8);.void sq
2c8f0 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74  lite3UniqueConst
2c900 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
2c910 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  t, Index*);.void
2c920 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e   sqlite3RowidCon
2c930 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
2c940 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78  int, Table*);.Ex
2c950 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44  pr *sqlite3ExprD
2c960 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
2c970 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74  *,int);.ExprList
2c980 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
2c990 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78  tDup(sqlite3*,Ex
2c9a0 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72  prList*,int);.Sr
2c9b0 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
2c9c0 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  cListDup(sqlite3
2c9d0 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b  *,SrcList*,int);
2c9e0 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
2c9f0 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  IdListDup(sqlite
2ca00 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c  3*,IdList*);.Sel
2ca10 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
2ca20 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53  ctDup(sqlite3*,S
2ca30 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 46 75 6e  elect*,int);.Fun
2ca40 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 75 6e  cDef *sqlite3Fun
2ca50 63 74 69 6f 6e 53 65 61 72 63 68 28 69 6e 74 2c  ctionSearch(int,
2ca60 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
2ca70 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74  id sqlite3Insert
2ca80 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e  BuiltinFuncs(Fun
2ca90 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63  cDef*,int);.Func
2caa0 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Def *sqlite3Find
2cab0 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
2cac0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
2cad0 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73  t,u8,u8);.void s
2cae0 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75  qlite3RegisterBu
2caf0 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76  iltinFunctions(v
2cb00 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
2cb10 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69  e3RegisterDateTi
2cb20 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  meFunctions(void
2cb30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2cb40 65 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63  egisterPerConnec
2cb50 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74  tionBuiltinFunct
2cb60 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
2cb70 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
2cb80 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33  yCheckOk(sqlite3
2cb90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2cba0 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72  afetyCheckSickOr
2cbb0 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  Ok(sqlite3*);.vo
2cbc0 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65  id sqlite3Change
2cbd0 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69  Cookie(Parse*, i
2cbe0 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
2cbf0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
2cc00 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64  IEW) && !defined
2cc10 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
2cc20 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74  GGER).void sqlit
2cc30 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65  e3MaterializeVie
2cc40 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  w(Parse*, Table*
2cc50 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73  , Expr*, ExprLis
2cc60 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23  t*,Expr*,int);.#
2cc70 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
2cc80 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
2cc90 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ER.  void sqlite
2cca0 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61  3BeginTrigger(Pa
2ccb0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b  rse*, Token*,Tok
2ccc0 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69  en*,int,int,IdLi
2ccd0 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20  st*,SrcList*,.  
2cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ccf0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69           Expr*,i
2cd00 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
2cd10 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72   sqlite3FinishTr
2cd20 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
2cd30 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65  iggerStep*, Toke
2cd40 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  n*);.  void sqli
2cd50 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50  te3DropTrigger(P
2cd60 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2cd70 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2cd80 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
2cd90 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  Ptr(Parse*, Trig
2cda0 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  ger*);.  Trigger
2cdb0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
2cdc0 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20  sExist(Parse *, 
2cdd0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Table*, int, Exp
2cde0 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61  rList*, int *pMa
2cdf0 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  sk);.  Trigger *
2ce00 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
2ce10 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
2ce20 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  e *);.  void sql
2ce30 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
2ce40 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
2ce50 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  er *, int, ExprL
2ce60 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  ist*, int, Table
2ce70 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   *,.            
2ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce90 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
2cea0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
2ceb0 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
2cec0 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67  ct(Parse *, Trig
2ced0 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  ger *, Table *, 
2cee0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
2cef0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65    void sqliteVie
2cf00 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a  wTriggers(Parse*
2cf10 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
2cf20 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29   int, ExprList*)
2cf30 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2cf40 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65  DeleteTriggerSte
2cf50 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  p(sqlite3*, Trig
2cf60 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69  gerStep*);.  Tri
2cf70 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
2cf80 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74  3TriggerSelectSt
2cf90 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  ep(sqlite3*,Sele
2cfa0 63 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ct*,.           
2cfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2cfd0 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
2cfe0 68 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  har*);.  Trigger
2cff0 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
2d000 67 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 50  ggerInsertStep(P
2d010 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64  arse*,Token*, Id
2d020 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
2d030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
2d050 65 6c 65 63 74 2a 2c 75 38 2c 55 70 73 65 72 74  elect*,u8,Upsert
2d060 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d080 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
2d090 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
2d0a0 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  r*);.  TriggerSt
2d0b0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
2d0c0 65 72 55 70 64 61 74 65 53 74 65 70 28 50 61 72  erUpdateStep(Par
2d0d0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  se*,Token*,ExprL
2d0e0 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c  ist*, Expr*, u8,
2d0f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d110 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
2d120 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
2d130 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
2d140 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
2d150 44 65 6c 65 74 65 53 74 65 70 28 50 61 72 73 65  DeleteStep(Parse
2d160 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c  *,Token*, Expr*,
2d170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d190 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
2d1a0 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
2d1b0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2d1c0 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  3DeleteTrigger(s
2d1d0 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
2d1e0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2d1f0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2d200 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
2d210 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
2d220 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  *);.  u32 sqlite
2d230 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
2d240 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Parse*,Trigger*,
2d250 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e  ExprList*,int,in
2d260 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23  t,Table*,int);.#
2d270 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
2d280 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
2d290 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20  ((p)->pToplevel 
2d2a0 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c  ? (p)->pToplevel
2d2b0 20 3a 20 28 70 29 29 0a 23 20 64 65 66 69 6e 65   : (p)).# define
2d2c0 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76   sqlite3IsToplev
2d2d0 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70  el(p) ((p)->pTop
2d2e0 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a  level==0).#else.
2d2f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2d300 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c  TriggersExist(B,
2d310 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66  C,D,E,F) 0.# def
2d320 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74  ine sqlite3Delet
2d330 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20  eTrigger(A,B).# 
2d340 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72  define sqlite3Dr
2d350 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42  opTriggerPtr(A,B
2d360 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2d370 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2d380 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a  eTrigger(A,B,C).
2d390 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2d3a0 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41  CodeRowTrigger(A
2d3b0 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49  ,B,C,D,E,F,G,H,I
2d3c0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2d3d0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
2d3e0 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45  Direct(A,B,C,D,E
2d3f0 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,F).# define sql
2d400 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
2d410 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65  X, Y) 0.# define
2d420 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
2d430 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66  level(p) p.# def
2d440 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70  ine sqlite3IsTop
2d450 6c 65 76 65 6c 28 70 29 20 31 0a 23 20 64 65 66  level(p) 1.# def
2d460 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
2d470 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c  erColmask(A,B,C,
2d480 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69  D,E,F,G) 0.#endi
2d490 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  f..int sqlite3Jo
2d4a0 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  inType(Parse*, T
2d4b0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
2d4c0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2d4d0 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67  ite3CreateForeig
2d4e0 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  nKey(Parse*, Exp
2d4f0 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  rList*, Token*, 
2d500 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  ExprList*, int);
2d510 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
2d520 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  erForeignKey(Par
2d530 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64  se*, int);.#ifnd
2d540 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
2d550 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76  UTHORIZATION.  v
2d560 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52  oid sqlite3AuthR
2d570 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ead(Parse*,Expr*
2d580 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74  ,Schema*,SrcList
2d590 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
2d5a0 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65  3AuthCheck(Parse
2d5b0 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
2d5c0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
2d5d0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
2d5e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
2d5f0 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72  hContextPush(Par
2d600 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74  se*, AuthContext
2d610 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2d620 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
2d630 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75  uthContextPop(Au
2d640 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69  thContext*);.  i
2d650 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  nt sqlite3AuthRe
2d660 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f  adCol(Parse*, co
2d670 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73  nst char *, cons
2d680 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
2d690 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2d6a0 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61  qlite3AuthRead(a
2d6b0 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65  ,b,c,d).# define
2d6c0 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
2d6d0 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20  k(a,b,c,d,e)    
2d6e0 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69  SQLITE_OK.# defi
2d6f0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
2d700 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29  ntextPush(a,b,c)
2d710 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2d720 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
2d730 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a  a)  ((void)(a)).
2d740 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2d750 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a  te3Attach(Parse*
2d760 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  , Expr*, Expr*, 
2d770 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2d780 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65  ite3Detach(Parse
2d790 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
2d7a0 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44  sqlite3FixInit(D
2d7b0 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c  bFixer*, Parse*,
2d7c0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2d7d0 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
2d7e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
2d7f0 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a  SrcList(DbFixer*
2d800 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74  , SrcList*);.int
2d810 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63   sqlite3FixSelec
2d820 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65  t(DbFixer*, Sele
2d830 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
2d840 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72  3FixExpr(DbFixer
2d850 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
2d860 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73  qlite3FixExprLis
2d870 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  t(DbFixer*, Expr
2d880 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2d890 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65  te3FixTriggerSte
2d8a0 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67  p(DbFixer*, Trig
2d8b0 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73  gerStep*);.int s
2d8c0 71 6c 69 74 65 33 52 65 61 6c 53 61 6d 65 41 73  qlite3RealSameAs
2d8d0 49 6e 74 28 64 6f 75 62 6c 65 2c 73 71 6c 69 74  Int(double,sqlit
2d8e0 65 33 5f 69 6e 74 36 34 29 3b 0a 69 6e 74 20 73  e3_int64);.int s
2d8f0 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74  qlite3AtoF(const
2d900 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65   char *z, double
2d910 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
2d920 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32   sqlite3GetInt32
2d930 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69  (const char *, i
2d940 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2d950 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72  3Atoi(const char
2d960 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2d970 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e  TE_OMIT_UTF16.in
2d980 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79  t sqlite3Utf16By
2d990 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64  teLen(const void
2d9a0 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68   *pData, int nCh
2d9b0 61 72 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  ar);.#endif.int 
2d9c0 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c  sqlite3Utf8CharL
2d9d0 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  en(const char *p
2d9e0 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29  Data, int nByte)
2d9f0 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66  ;.u32 sqlite3Utf
2da00 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a  8Read(const u8**
2da10 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
2da20 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f  3LogEst(u64);.Lo
2da30 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
2da40 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67  stAdd(LogEst,Log
2da50 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  Est);.#ifndef SQ
2da60 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2da70 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71  LTABLE.LogEst sq
2da80 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44  lite3LogEstFromD
2da90 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23  ouble(double);.#
2daa0 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
2dab0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2dac0 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 29  STMT_SCANSTATUS)
2dad0 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   || \.    define
2dae0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2daf0 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20 20 20  STAT4) || \.    
2db00 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
2db10 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54 45 44  XPLAIN_ESTIMATED
2db20 5f 52 4f 57 53 29 0a 75 36 34 20 73 71 6c 69 74  _ROWS).u64 sqlit
2db30 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f  e3LogEstToInt(Lo
2db40 67 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a 56 4c  gEst);.#endif.VL
2db50 69 73 74 20 2a 73 71 6c 69 74 65 33 56 4c 69 73  ist *sqlite3VLis
2db60 74 41 64 64 28 73 71 6c 69 74 65 33 2a 2c 56 4c  tAdd(sqlite3*,VL
2db70 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
2db80 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f 6e 73 74  ,int,int);.const
2db90 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4c   char *sqlite3VL
2dba0 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 56 4c 69  istNumToName(VLi
2dbb0 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  st*,int);.int sq
2dbc0 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d 65 54 6f  lite3VListNameTo
2dbd0 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f 6e 73 74  Num(VList*,const
2dbe0 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a   char*,int);../*
2dbf0 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20  .** Routines to 
2dc00 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76  read and write v
2dc10 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
2dc20 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20  ntegers.  These 
2dc30 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65  used to.** be de
2dc40 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62  fined locally, b
2dc50 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68  ut now we use th
2dc60 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65  e varint routine
2dc70 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a  s in the util.c.
2dc80 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20  ** file..*/.int 
2dc90 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
2dca0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
2dcb0 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65   u64);.u8 sqlite
2dcc0 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74  3GetVarint(const
2dcd0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
2dce0 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c  , u64 *);.u8 sql
2dcf0 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
2dd00 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2dd10 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69  har *, u32 *);.i
2dd20 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt sqlite3Varint
2dd30 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a  Len(u64 v);../*.
2dd40 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  ** The common ca
2dd50 73 65 20 69 73 20 66 6f 72 20 61 20 76 61 72 69  se is for a vari
2dd60 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c  nt to be a singl
2dd70 65 20 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f  e byte.  They fo
2dd80 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f  llowing.** macro
2dd90 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d  s handle the com
2dda0 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74  mon case without
2ddb0 20 61 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c   a procedure cal
2ddc0 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c  l, but then call
2ddd0 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72  .** the procedur
2dde0 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72  e for larger var
2ddf0 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ints..*/.#define
2de00 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42   getVarint32(A,B
2de10 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41  )  \.  (u8)((*(A
2de20 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42 29  )<(u8)0x80)?((B)
2de30 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71  =(u32)*(A)),1:sq
2de40 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
2de50 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29  ((A),(u32 *)&(B)
2de60 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  )).#define putVa
2de70 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
2de80 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29 3c   (u8)(((u32)(B)<
2de90 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29  (u32)0x80)?(*(A)
2dea0 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  =(unsigned char)
2deb0 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74  (B)),1:\.  sqlit
2dec0 65 33 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c  e3PutVarint((A),
2ded0 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65  (B))).#define ge
2dee0 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
2def0 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66  e3GetVarint.#def
2df00 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20  ine putVarint   
2df10 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
2df20 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  t...const char *
2df30 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
2df40 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65 33 2a  nityStr(sqlite3*
2df50 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  , Index*);.void 
2df60 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69  sqlite3TableAffi
2df70 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c  nity(Vdbe*, Tabl
2df80 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73  e*, int);.char s
2df90 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66  qlite3CompareAff
2dfa0 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
2dfb0 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69  r, char aff2);.i
2dfc0 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41  nt sqlite3IndexA
2dfd0 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a  ffinityOk(Expr *
2dfe0 70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f  pExpr, char idx_
2dff0 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20  affinity);.char 
2e000 73 71 6c 69 74 65 33 54 61 62 6c 65 43 6f 6c 75  sqlite3TableColu
2e010 6d 6e 41 66 66 69 6e 69 74 79 28 54 61 62 6c 65  mnAffinity(Table
2e020 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c  *,int);.char sql
2e030 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74 79  ite3ExprAffinity
2e040 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69  (Expr *pExpr);.i
2e050 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34  nt sqlite3Atoi64
2e060 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36  (const char*, i6
2e070 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  4*, int, u8);.in
2e080 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65  t sqlite3DecOrHe
2e090 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61  xToI64(const cha
2e0a0 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20  r*, i64*);.void 
2e0b0 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68  sqlite3ErrorWith
2e0c0 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  Msg(sqlite3*, in
2e0d0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  t, const char*,.
2e0e0 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
2e0f0 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c  3Error(sqlite3*,
2e100 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2e110 65 33 53 79 73 74 65 6d 45 72 72 6f 72 28 73 71  e3SystemError(sq
2e120 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
2e130 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42  d *sqlite3HexToB
2e140 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  lob(sqlite3*, co
2e150 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
2e160 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48   n);.u8 sqlite3H
2e170 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a  exToInt(int h);.
2e180 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61  int sqlite3TwoPa
2e190 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  rtName(Parse *, 
2e1a0 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
2e1b0 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69  , Token **);..#i
2e1c0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2e1d0 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a  _NEED_ERR_NAME).
2e1e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2e1f0 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b  te3ErrName(int);
2e200 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2e210 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 45  SQLITE_ENABLE_DE
2e220 53 45 52 49 41 4c 49 5a 45 0a 69 6e 74 20 73 71  SERIALIZE.int sq
2e230 6c 69 74 65 33 4d 65 6d 64 62 49 6e 69 74 28 76  lite3MemdbInit(v
2e240 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f  oid);.#endif..co
2e250 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2e260 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e  3ErrStr(int);.in
2e270 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  t sqlite3ReadSch
2e280 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73  ema(Parse *pPars
2e290 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
2e2a0 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28  ite3FindCollSeq(
2e2b0 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c  sqlite3*,u8 enc,
2e2c0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74   const char*,int
2e2d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
2e2e0 42 69 6e 61 72 79 28 63 6f 6e 73 74 20 43 6f 6c  Binary(const Col
2e2f0 6c 53 65 71 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  lSeq*);.CollSeq 
2e300 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f  *sqlite3LocateCo
2e310 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
2e320 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  rse, const char*
2e330 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  zName);.CollSeq 
2e340 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c  *sqlite3ExprColl
2e350 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
2e360 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b  e, Expr *pExpr);
2e370 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2e380 33 45 78 70 72 4e 4e 43 6f 6c 6c 53 65 71 28 50  3ExprNNCollSeq(P
2e390 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
2e3a0 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
2e3b0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53  sqlite3ExprCollS
2e3c0 65 71 4d 61 74 63 68 28 50 61 72 73 65 2a 2c 45  eqMatch(Parse*,E
2e3d0 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  xpr*,Expr*);.Exp
2e3e0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
2e3f0 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61  dCollateToken(Pa
2e400 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
2e410 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
2e420 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  , int);.Expr *sq
2e430 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
2e440 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a  ateString(Parse*
2e450 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,Expr*,const cha
2e460 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
2e470 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74  e3ExprSkipCollat
2e480 65 28 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  e(Expr*);.Expr *
2e490 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43  sqlite3ExprSkipC
2e4a0 6f 6c 6c 61 74 65 41 6e 64 4c 69 6b 65 6c 79 28  ollateAndLikely(
2e4b0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2e4c0 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28  te3CheckCollSeq(
2e4d0 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71  Parse *, CollSeq
2e4e0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2e4f0 57 72 69 74 61 62 6c 65 53 63 68 65 6d 61 28 73  WritableSchema(s
2e500 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
2e510 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74  lite3CheckObject
2e520 4e 61 6d 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e  Name(Parse*, con
2e530 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
2e540 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
2e550 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2e560 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71  dbeSetChanges(sq
2e570 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69  lite3 *, int);.i
2e580 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  nt sqlite3AddInt
2e590 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
2e5a0 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36  t sqlite3SubInt6
2e5b0 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
2e5c0 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34   sqlite3MulInt64
2e5d0 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
2e5e0 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28  sqlite3AbsInt32(
2e5f0 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  int);.#ifdef SQL
2e600 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e  ITE_ENABLE_8_3_N
2e610 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65  AMES.void sqlite
2e620 33 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e  3FileSuffix3(con
2e630 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29  st char*, char*)
2e640 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2e650 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
2e660 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a  ix3(X,Y).#endif.
2e670 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  u8 sqlite3GetBoo
2e680 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  lean(const char 
2e690 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76  *z,u8);..const v
2e6a0 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  oid *sqlite3Valu
2e6b0 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61  eText(sqlite3_va
2e6c0 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73  lue*, u8);.int s
2e6d0 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73  qlite3ValueBytes
2e6e0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
2e6f0 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
2e700 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71  e3ValueSetStr(sq
2e710 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e  lite3_value*, in
2e720 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c  t, const void *,
2e730 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  u8,.            
2e740 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64              void
2e750 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
2e760 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
2e770 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61  tNull(sqlite3_va
2e780 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  lue*);.void sqli
2e790 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c  te3ValueFree(sql
2e7a0 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 23 69  ite3_value*);.#i
2e7b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
2e7c0 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c  ESTABLE.void sql
2e7d0 69 74 65 33 52 65 73 75 6c 74 49 6e 74 52 65 61  ite3ResultIntRea
2e7e0 6c 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  l(sqlite3_contex
2e7f0 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 73 71 6c 69  t*);.#endif.sqli
2e800 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74  te3_value *sqlit
2e810 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74  e3ValueNew(sqlit
2e820 65 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  e3 *);.#ifndef S
2e830 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
2e840 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
2e850 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a  f16to8(sqlite3 *
2e860 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
2e870 6e 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a  nt, u8);.#endif.
2e880 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
2e890 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33  FromExpr(sqlite3
2e8a0 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20   *, Expr *, u8, 
2e8b0 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
2e8c0 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e **);.void sqli
2e8d0 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66  te3ValueApplyAff
2e8e0 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61  inity(sqlite3_va
2e8f0 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a  lue *, u8, u8);.
2e900 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41  #ifndef SQLITE_A
2e910 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65  MALGAMATION.exte
2e920 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
2e930 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70  d char sqlite3Op
2e940 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a  codeProperty[];.
2e950 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61  extern const cha
2e960 72 20 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41  r sqlite3StrBINA
2e970 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  RY[];.extern con
2e980 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2e990 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c   sqlite3UpperToL
2e9a0 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  ower[];.extern c
2e9b0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2e9c0 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d  ar sqlite3CtypeM
2e9d0 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ap[];.extern con
2e9e0 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33  st Token sqlite3
2e9f0 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74  IntTokens[];.ext
2ea00 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73  ern SQLITE_WSD s
2ea10 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
2ea20 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  fig sqlite3Confi
2ea30 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63 44 65  g;.extern FuncDe
2ea40 66 48 61 73 68 20 73 71 6c 69 74 65 33 42 75 69  fHash sqlite3Bui
2ea50 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23  ltinFunctions;.#
2ea60 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2ea70 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e  IT_WSD.extern in
2ea80 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67  t sqlite3Pending
2ea90 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e  Byte;.#endif.#en
2eaa0 64 69 66 0a 23 69 66 64 65 66 20 56 44 42 45 5f  dif.#ifdef VDBE_
2eab0 50 52 4f 46 49 4c 45 0a 65 78 74 65 72 6e 20 73  PROFILE.extern s
2eac0 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20 73 71  qlite3_uint64 sq
2ead0 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74  lite3NProfileCnt
2eae0 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
2eaf0 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76  lite3RootPageMov
2eb00 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ed(sqlite3*, int
2eb10 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2eb20 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78  d sqlite3Reindex
2eb30 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
2eb40 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
2eb50 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74  qlite3AlterFunct
2eb60 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
2eb70 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e   sqlite3AlterRen
2eb80 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ameTable(Parse*,
2eb90 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
2eba0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ebb0 41 6c 74 65 72 52 65 6e 61 6d 65 43 6f 6c 75 6d  AlterRenameColum
2ebc0 6e 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  n(Parse*, SrcLis
2ebd0 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
2ebe0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2ebf0 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75  GetToken(const u
2ec00 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
2ec10 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  int *);.void sql
2ec20 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28  ite3NestedParse(
2ec30 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
2ec40 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
2ec50 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
2ec60 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
2ec70 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a  sqlite3*, int);.
2ec80 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
2ec90 52 68 73 4f 66 49 4e 28 50 61 72 73 65 2a 2c 20  RhsOfIN(Parse*, 
2eca0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
2ecb0 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73   sqlite3CodeSubs
2ecc0 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78  elect(Parse*, Ex
2ecd0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2ece0 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72  e3SelectPrep(Par
2ecf0 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
2ed00 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69  meContext*);.voi
2ed10 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  d sqlite3SelectW
2ed20 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f  rongNumTermsErro
2ed30 72 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  r(Parse *pParse,
2ed40 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74   Select *p);.int
2ed50 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61   sqlite3MatchSpa
2ed60 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72  nName(const char
2ed70 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2ed80 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2ed90 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
2eda0 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70  qlite3ResolveExp
2edb0 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  rNames(NameConte
2edc0 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  xt*, Expr*);.int
2edd0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
2ede0 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d  xprListNames(Nam
2edf0 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c  eContext*, ExprL
2ee00 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
2ee10 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74  te3ResolveSelect
2ee20 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65  Names(Parse*, Se
2ee30 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
2ee40 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xt*);.int sqlite
2ee50 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65  3ResolveSelfRefe
2ee60 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62  rence(Parse*,Tab
2ee70 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78  le*,int,Expr*,Ex
2ee80 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
2ee90 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65  lite3ResolveOrde
2eea0 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c  rGroupBy(Parse*,
2eeb0 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69   Select*, ExprLi
2eec0 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
2eed0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2eee0 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62  olumnDefault(Vdb
2eef0 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  e *, Table *, in
2ef00 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2ef10 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68  lite3AlterFinish
2ef20 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
2ef30 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69  *, Token *);.voi
2ef40 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65  d sqlite3AlterBe
2ef50 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ginAddColumn(Par
2ef60 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29  se *, SrcList *)
2ef70 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52  ;.void *sqlite3R
2ef80 65 6e 61 6d 65 54 6f 6b 65 6e 4d 61 70 28 50 61  enameTokenMap(Pa
2ef90 72 73 65 2a 2c 20 76 6f 69 64 2a 2c 20 54 6f 6b  rse*, void*, Tok
2efa0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2efb0 65 33 52 65 6e 61 6d 65 54 6f 6b 65 6e 52 65 6d  e3RenameTokenRem
2efc0 61 70 28 50 61 72 73 65 2a 2c 20 76 6f 69 64 20  ap(Parse*, void 
2efd0 2a 70 54 6f 2c 20 76 6f 69 64 20 2a 70 46 72 6f  *pTo, void *pFro
2efe0 6d 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  m);.void sqlite3
2eff0 52 65 6e 61 6d 65 45 78 70 72 55 6e 6d 61 70 28  RenameExprUnmap(
2f000 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
2f010 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61  void sqlite3Rena
2f020 6d 65 45 78 70 72 6c 69 73 74 55 6e 6d 61 70 28  meExprlistUnmap(
2f030 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2f040 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
2f050 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50  ite3GetCollSeq(P
2f060 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53  arse*, u8, CollS
2f070 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  eq *, const char
2f080 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  *);.char sqlite3
2f090 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e  AffinityType(con
2f0a0 73 74 20 63 68 61 72 2a 2c 20 43 6f 6c 75 6d 6e  st char*, Column
2f0b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2f0c0 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20  Analyze(Parse*, 
2f0d0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
2f0e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f  .int sqlite3Invo
2f0f0 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75  keBusyHandler(Bu
2f100 73 79 48 61 6e 64 6c 65 72 2a 2c 20 73 71 6c 69  syHandler*, sqli
2f110 74 65 33 5f 66 69 6c 65 2a 29 3b 0a 69 6e 74 20  te3_file*);.int 
2f120 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71  sqlite3FindDb(sq
2f130 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
2f140 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
2f150 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a  DbName(sqlite3 *
2f160 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2f170 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c  .int sqlite3Anal
2f180 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33  ysisLoad(sqlite3
2f190 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64  *,int iDB);.void
2f1a0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e   sqlite3DeleteIn
2f1b0 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74  dexSamples(sqlit
2f1c0 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  e3*,Index*);.voi
2f1d0 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74  d sqlite3Default
2f1e0 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a  RowEst(Index*);.
2f1f0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
2f200 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  sterLikeFunction
2f210 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  s(sqlite3*, int)
2f220 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c  ;.int sqlite3IsL
2f230 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  ikeFunction(sqli
2f240 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c  te3*,Expr*,int*,
2f250 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
2f260 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28  ite3SchemaClear(
2f270 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20  void *);.Schema 
2f280 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65  *sqlite3SchemaGe
2f290 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72  t(sqlite3 *, Btr
2f2a0 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ee *);.int sqlit
2f2b0 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28  e3SchemaToIndex(
2f2c0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68  sqlite3 *db, Sch
2f2d0 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  ema *);.KeyInfo 
2f2e0 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41  *sqlite3KeyInfoA
2f2f0 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e  lloc(sqlite3*,in
2f300 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
2f310 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66  ite3KeyInfoUnref
2f320 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49  (KeyInfo*);.KeyI
2f330 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2f340 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29  nfoRef(KeyInfo*)
2f350 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
2f360 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78  e3KeyInfoOfIndex
2f370 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29  (Parse*, Index*)
2f380 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
2f390 65 33 4b 65 79 49 6e 66 6f 46 72 6f 6d 45 78 70  e3KeyInfoFromExp
2f3a0 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78  rList(Parse*, Ex
2f3b0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
2f3c0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 48  t);.int sqlite3H
2f3d0 61 73 45 78 70 6c 69 63 69 74 4e 75 6c 6c 73 28  asExplicitNulls(
2f3e0 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2f3f0 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
2f400 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c  TE_DEBUG.int sql
2f410 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69  ite3KeyInfoIsWri
2f420 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29  teable(KeyInfo*)
2f430 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
2f440 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73  ite3CreateFunc(s
2f450 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
2f460 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
2f470 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64  , void *,.  void
2f480 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2f490 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2f4a0 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
2f4b0 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
2f4c0 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
2f4d0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20  ite3_value **), 
2f4e0 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
2f4f0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20  te3_context*),. 
2f500 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
2f510 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76  3_context*),.  v
2f520 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
2f530 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
2f540 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20  ite3_value **), 
2f550 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
2f560 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29  r *pDestructor.)
2f570 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 6f  ;.void sqlite3No
2f580 6f 70 44 65 73 74 72 75 63 74 6f 72 28 76 6f 69  opDestructor(voi
2f590 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
2f5a0 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74 65  3OomFault(sqlite
2f5b0 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
2f5c0 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74 65  3OomClear(sqlite
2f5d0 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
2f5e0 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20  ApiExit(sqlite3 
2f5f0 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  *db, int);.int s
2f600 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61  qlite3OpenTempDa
2f610 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b  tabase(Parse *);
2f620 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ..void sqlite3St
2f630 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63  rAccumInit(StrAc
2f640 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20  cum*, sqlite3*, 
2f650 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  char*, int, int)
2f660 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53  ;.char *sqlite3S
2f670 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74  trAccumFinish(St
2f680 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73  rAccum*);.void s
2f690 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73 74  qlite3SelectDest
2f6a0 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a  Init(SelectDest*
2f6b0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20  ,int,int);.Expr 
2f6c0 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f  *sqlite3CreateCo
2f6d0 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33  lumnExpr(sqlite3
2f6e0 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69   *, SrcList *, i
2f6f0 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20  nt, int);..void 
2f700 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73  sqlite3BackupRes
2f710 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63  tart(sqlite3_bac
2f720 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  kup *);.void sql
2f730 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74 65  ite3BackupUpdate
2f740 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
2f750 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75  *, Pgno, const u
2f760 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  8 *);..#ifndef S
2f770 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55  QLITE_OMIT_SUBQU
2f780 45 52 59 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  ERY.int sqlite3E
2f790 78 70 72 43 68 65 63 6b 49 4e 28 50 61 72 73 65  xprCheckIN(Parse
2f7a0 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65 6c 73 65  *, Expr*);.#else
2f7b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2f7c0 33 45 78 70 72 43 68 65 63 6b 49 4e 28 78 2c 79  3ExprCheckIN(x,y
2f7d0 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64  ) SQLITE_OK.#end
2f7e0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
2f7f0 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 69  E_ENABLE_STAT4.i
2f800 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50  nt sqlite3Stat4P
2f810 72 6f 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20  robeSetValue(.  
2f820 20 20 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c    Parse*,Index*,
2f830 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a  UnpackedRecord**
2f840 2c 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  ,Expr*,int,int,i
2f850 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2f860 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45  3Stat4ValueFromE
2f870 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  xpr(Parse*, Expr
2f880 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76  *, u8, sqlite3_v
2f890 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  alue**);.void sq
2f8a0 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 46  lite3Stat4ProbeF
2f8b0 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f  ree(UnpackedReco
2f8c0 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  rd*);.int sqlite
2f8d0 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c  3Stat4Column(sql
2f8e0 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69  ite3*, const voi
2f8f0 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71  d*, int, int, sq
2f900 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
2f910 63 68 61 72 20 73 71 6c 69 74 65 33 49 6e 64 65  char sqlite3Inde
2f920 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  xColumnAffinity(
2f930 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a  sqlite3*, Index*
2f940 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  , int);.#endif..
2f950 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
2f960 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e  ace to the LEMON
2f970 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65  -generated parse
2f980 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  r.*/.#ifndef SQL
2f990 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
2f9a0 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
2f9b0 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64  ParserAlloc(void
2f9c0 2a 28 2a 29 28 75 36 34 29 2c 20 50 61 72 73 65  *(*)(u64), Parse
2f9d0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2f9e0 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69  e3ParserFree(voi
2f9f0 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64  d*, void(*)(void
2fa00 2a 29 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  *));.#endif.void
2fa10 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76   sqlite3Parser(v
2fa20 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e  oid*, int, Token
2fa30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61  );.int sqlite3Pa
2fa40 72 73 65 72 46 61 6c 6c 62 61 63 6b 28 69 6e 74  rserFallback(int
2fa50 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43  );.#ifdef YYTRAC
2fa60 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20  KMAXSTACKDEPTH. 
2fa70 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73   int sqlite3Pars
2fa80 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64  erStackPeak(void
2fa90 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  *);.#endif..void
2faa0 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64   sqlite3AutoLoad
2fab0 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
2fac0 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  e3*);.#ifndef SQ
2fad0 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
2fae0 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20  XTENSION.  void 
2faf0 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
2fb00 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
2fb10 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2fb20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
2fb30 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69  ensions(X).#endi
2fb40 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2fb50 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
2fb60 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CHE.  void sqlit
2fb70 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73  e3TableLock(Pars
2fb80 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  e *, int, int, u
2fb90 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  8, const char *)
2fba0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
2fbb0 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  e sqlite3TableLo
2fbc0 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65  ck(v,w,x,y,z).#e
2fbd0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2fbe0 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73  ITE_TEST.  int s
2fbf0 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e  qlite3Utf8To8(un
2fc00 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23  signed char*);.#
2fc10 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2fc20 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2fc30 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
2fc40 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
2fc50 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73  r(Y).#  define s
2fc60 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58  qlite3VtabSync(X
2fc70 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20  ,Y) SQLITE_OK.# 
2fc80 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2fc90 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23  tabRollback(X).#
2fca0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2fcb0 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20  VtabCommit(X).# 
2fcc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2fcd0 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a  tabInSync(db) 0.
2fce0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2fcf0 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20  3VtabLock(X).#  
2fd00 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2fd10 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64  abUnlock(X).#  d
2fd20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2fd30 62 4d 6f 64 75 6c 65 55 6e 72 65 66 28 44 2c 58  bModuleUnref(D,X
2fd40 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2fd50 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
2fd60 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
2fd70 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
2fd80 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c  int(X, Y, Z) SQL
2fd90 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
2fda0 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c   sqlite3GetVTabl
2fdb0 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65  e(X,Y)  ((VTable
2fdc0 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f  *)0).#else.   vo
2fdd0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c  id sqlite3VtabCl
2fde0 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ear(sqlite3 *db,
2fdf0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69   Table*);.   voi
2fe00 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73  d sqlite3VtabDis
2fe10 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20  connect(sqlite3 
2fe20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a  *db, Table *p);.
2fe30 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2fe40 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a  abSync(sqlite3 *
2fe50 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69  db, Vdbe*);.   i
2fe60 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  nt sqlite3VtabRo
2fe70 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a  llback(sqlite3 *
2fe80 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  db);.   int sqli
2fe90 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71  te3VtabCommit(sq
2fea0 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76  lite3 *db);.   v
2feb0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c  oid sqlite3VtabL
2fec0 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
2fed0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2fee0 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20  abUnlock(VTable 
2fef0 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
2ff00 74 65 33 56 74 61 62 4d 6f 64 75 6c 65 55 6e 72  te3VtabModuleUnr
2ff10 65 66 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75  ef(sqlite3*,Modu
2ff20 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  le*);.   void sq
2ff30 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
2ff40 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20  ist(sqlite3*);. 
2ff50 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2ff60 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74  bSavepoint(sqlit
2ff70 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  e3 *, int, int);
2ff80 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
2ff90 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
2ffa0 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f  (Vdbe*, sqlite3_
2ffb0 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c  vtab*);.   VTabl
2ffc0 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61  e *sqlite3GetVTa
2ffd0 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61  ble(sqlite3*, Ta
2ffe0 62 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65  ble*);.   Module
2fff0 20 2a 73 71 6c 69 74 65 33 56 74 61 62 43 72 65   *sqlite3VtabCre
30000 61 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20  ateModule(.     
30010 73 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20 63  sqlite3*,.     c
30020 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20  onst char*,.    
30030 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
30040 6f 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69  odule*,.     voi
30050 64 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a 29  d*,.     void(*)
30060 28 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20  (void*).   );.# 
30070 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
30080 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28  tabInSync(db) ((
30090 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26  db)->nVTrans>0 &
300a0 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d  & (db)->aVTrans=
300b0 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  =0).#endif.int s
300c0 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d  qlite3VtabEponym
300d0 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72  ousTableInit(Par
300e0 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f  se*,Module*);.vo
300f0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 45 70  id sqlite3VtabEp
30100 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61  onymousTableClea
30110 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c  r(sqlite3*,Modul
30120 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
30130 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c  3VtabMakeWritabl
30140 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  e(Parse*,Table*)
30150 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
30160 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  abBeginParse(Par
30170 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
30180 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  en*, Token*, int
30190 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
301a0 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50  tabFinishParse(P
301b0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
301c0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
301d0 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b  ArgInit(Parse*);
301e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
301f0 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65  bArgExtend(Parse
30200 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
30210 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
30220 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  reate(sqlite3*, 
30230 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
30240 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74  *, char **);.int
30250 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
30260 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20  Connect(Parse*, 
30270 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
30280 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
30290 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  roy(sqlite3*, in
302a0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  t, const char *)
302b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
302c0 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a  bBegin(sqlite3 *
302d0 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e  , VTable *);.Fun
302e0 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61  cDef *sqlite3Vta
302f0 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f  bOverloadFunctio
30300 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63  n(sqlite3 *,Func
30310 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20  Def*, int nArg, 
30320 45 78 70 72 2a 29 3b 0a 73 71 6c 69 74 65 33 5f  Expr*);.sqlite3_
30330 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d  int64 sqlite3Stm
30340 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c  tCurrentTime(sql
30350 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a  ite3_context*);.
30360 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50  int sqlite3VdbeP
30370 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64  arameterIndex(Vd
30380 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  be*, const char*
30390 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
303a0 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69  te3TransferBindi
303b0 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ngs(sqlite3_stmt
303c0 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74   *, sqlite3_stmt
303d0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
303e0 33 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72  3ParserReset(Par
303f0 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  se*);.#ifdef SQL
30400 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 4f 52 4d 41  ITE_ENABLE_NORMA
30410 4c 49 5a 45 0a 63 68 61 72 20 2a 73 71 6c 69 74  LIZE.char *sqlit
30420 65 33 4e 6f 72 6d 61 6c 69 7a 65 28 56 64 62 65  e3Normalize(Vdbe
30430 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
30440 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
30450 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62  te3Reprepare(Vdb
30460 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
30470 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65  3ExprListCheckLe
30480 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70  ngth(Parse*, Exp
30490 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
304a0 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ar*);.CollSeq *s
304b0 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70  qlite3BinaryComp
304c0 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  areCollSeq(Parse
304d0 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72   *, Expr *, Expr
304e0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
304f0 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e  TempInMemory(con
30500 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f  st sqlite3*);.co
30510 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
30520 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
30530 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  (int);.#ifndef S
30540 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
30550 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63   int sqlite3Chec
30560 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c  kpoint(sqlite3*,
30570 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
30580 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71   int*);.  int sq
30590 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48  lite3WalDefaultH
305a0 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ook(void*,sqlite
305b0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
305c0 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e  nt);.#endif.#ifn
305d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
305e0 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69  CTE.  With *sqli
305f0 74 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65  te3WithAdd(Parse
30600 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45  *,With*,Token*,E
30610 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a  xprList*,Select*
30620 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
30630 33 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69  3WithDelete(sqli
30640 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76  te3*,With*);.  v
30650 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50  oid sqlite3WithP
30660 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68  ush(Parse*, With
30670 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64  *, u8);.#else.#d
30680 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74  efine sqlite3Wit
30690 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65  hPush(x,y,z).#de
306a0 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
306b0 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64  Delete(x,y).#end
306c0 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
306d0 45 5f 4f 4d 49 54 5f 55 50 53 45 52 54 0a 20 20  E_OMIT_UPSERT.  
306e0 55 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33 55  Upsert *sqlite3U
306f0 70 73 65 72 74 4e 65 77 28 73 71 6c 69 74 65 33  psertNew(sqlite3
30700 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
30710 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
30720 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
30730 65 33 55 70 73 65 72 74 44 65 6c 65 74 65 28 73  e3UpsertDelete(s
30740 71 6c 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29  qlite3*,Upsert*)
30750 3b 0a 20 20 55 70 73 65 72 74 20 2a 73 71 6c 69  ;.  Upsert *sqli
30760 74 65 33 55 70 73 65 72 74 44 75 70 28 73 71 6c  te3UpsertDup(sql
30770 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a  ite3*,Upsert*);.
30780 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 70 73    int sqlite3Ups
30790 65 72 74 41 6e 61 6c 79 7a 65 54 61 72 67 65 74  ertAnalyzeTarget
307a0 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
307b0 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 76 6f 69  ,Upsert*);.  voi
307c0 64 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  d sqlite3UpsertD
307d0 6f 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 55  oUpdate(Parse*,U
307e0 70 73 65 72 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e  psert*,Table*,In
307f0 64 65 78 2a 2c 69 6e 74 29 3b 0a 23 65 6c 73 65  dex*,int);.#else
30800 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
30810 55 70 73 65 72 74 4e 65 77 28 76 2c 77 2c 78 2c  UpsertNew(v,w,x,
30820 79 2c 7a 29 20 28 28 55 70 73 65 72 74 2a 29 30  y,z) ((Upsert*)0
30830 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ).#define sqlite
30840 33 55 70 73 65 72 74 44 65 6c 65 74 65 28 78 2c  3UpsertDelete(x,
30850 79 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  y).#define sqlit
30860 65 33 55 70 73 65 72 74 44 75 70 28 78 2c 79 29  e3UpsertDup(x,y)
30870 20 20 20 20 20 20 20 28 28 55 70 73 65 72 74 2a         ((Upsert*
30880 29 30 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20  )0).#endif.../* 
30890 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72  Declarations for
308a0 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b   functions in fk
308b0 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65  ey.c. All of the
308c0 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  se are replaced 
308d0 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72  by.** no-op macr
308e0 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49  os if OMIT_FOREI
308f0 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65  GN_KEY is define
30900 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
30910 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  no foreign.** ke
30920 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  y functionality 
30930 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66  is available. If
30940 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73   OMIT_TRIGGER is
30950 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20   defined but.** 
30960 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
30970 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f   is not, only so
30980 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
30990 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e  ons are no-oped.
309a0 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65   In.** this case
309b0 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72   foreign keys ar
309c0 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f  e parsed, but no
309d0 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61   other functiona
309e0 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69  lity is.** provi
309f0 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74  ded (enforcement
30a00 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e   of FK constrain
30a10 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20  ts requires the 
30a20 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73  triggers sub-sys
30a30 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tem)..*/.#if !de
30a40 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
30a50 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26  T_FOREIGN_KEY) &
30a60 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
30a70 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
30a80 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
30a90 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61  Check(Parse*, Ta
30aa0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
30ab0 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  int*, int);.  vo
30ac0 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  id sqlite3FkDrop
30ad0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
30ae0 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29  cList *, Table*)
30af0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
30b00 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a  FkActions(Parse*
30b10 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69  , Table*, ExprLi
30b20 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  st*, int, int*, 
30b30 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
30b40 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61  te3FkRequired(Pa
30b50 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
30b60 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20  t*, int);.  u32 
30b70 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
30b80 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
30b90 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65  ;.  FKey *sqlite
30ba0 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61  3FkReferences(Ta
30bb0 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  ble *);.#else.  
30bc0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
30bd0 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64  kActions(a,b,c,d
30be0 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
30bf0 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61  sqlite3FkCheck(a
30c00 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
30c10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
30c20 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a  ropTable(a,b,c).
30c30 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
30c40 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20  3FkOldmask(a,b) 
30c50 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66          0.  #def
30c60 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71  ine sqlite3FkReq
30c70 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20  uired(a,b,c,d)  
30c80 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71    0.  #define sq
30c90 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65  lite3FkReference
30ca0 73 28 61 29 20 20 20 20 20 20 20 20 30 0a 23 65  s(a)        0.#e
30cb0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
30cc0 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
30cd0 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  _KEY.  void sqli
30ce0 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69  te3FkDelete(sqli
30cf0 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  te3 *, Table*);.
30d00 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c    int sqlite3FkL
30d10 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  ocateIndex(Parse
30d20 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49  *,Table*,FKey*,I
30d30 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23  ndex**,int**);.#
30d40 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
30d50 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61  qlite3FkDelete(a
30d60 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,b).  #define sq
30d70 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
30d80 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65  ex(a,b,c,d,e).#e
30d90 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61  ndif.../*.** Ava
30da0 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a  ilable fault inj
30db0 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20  ectors.  Should 
30dc0 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69  be numbered begi
30dd0 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f  nning with 0..*/
30de0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
30df0 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41  FAULTINJECTOR_MA
30e00 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69  LLOC     0.#defi
30e10 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
30e20 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20  NJECTOR_COUNT   
30e30 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
30e40 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
30e50 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63   code in fault.c
30e60 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69   used for identi
30e70 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a  fying "benign".*
30e80 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  * malloc failure
30e90 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20  s. This is only 
30ea0 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54  present if SQLIT
30eb0 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20  E_UNTESTABLE.** 
30ec0 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a  is not defined..
30ed0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
30ee0 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 76  E_UNTESTABLE.  v
30ef0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
30f00 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
30f10 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  d);.  void sqlit
30f20 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
30f30 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20  c(void);.#else. 
30f40 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
30f50 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
30f60 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  c().  #define sq
30f70 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
30f80 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f  lloc().#endif../
30f90 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  *.** Allowed ret
30fa0 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
30fb0 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
30fc0 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ex().*/.#define 
30fd0 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20  IN_INDEX_ROWID  
30fe0 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61        1   /* Sea
30ff0 72 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66  rch the rowid of
31000 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64   the table */.#d
31010 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45  efine IN_INDEX_E
31020 50 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20  PH          2   
31030 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68  /* Search an eph
31040 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f  emeral b-tree */
31050 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
31060 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33  X_INDEX_ASC    3
31070 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
31080 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a  ndex ASCENDING *
31090 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
310a0 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20  EX_INDEX_DESC   
310b0 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20  4   /* Existing 
310c0 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47  index DESCENDING
310d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
310e0 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20  NDEX_NOOP       
310f0 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c    5   /* No tabl
31100 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65  e available. Use
31110 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a   comparisons */.
31120 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c  /*.** Allowed fl
31130 61 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20  ags for the 3rd 
31140 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
31150 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
31160 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  )..*/.#define IN
31170 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20  _INDEX_NOOP_OK  
31180 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b     0x0001  /* OK
31190 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e   to return IN_IN
311a0 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66  DEX_NOOP */.#def
311b0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d  ine IN_INDEX_MEM
311c0 42 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20  BERSHIP  0x0002 
311d0 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
311e0 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73  used for members
311f0 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66  hip test */.#def
31200 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f  ine IN_INDEX_LOO
31210 50 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20  P        0x0004 
31220 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
31230 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a  used as a loop *
31240 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  /.int sqlite3Fin
31250 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a  dInIndex(Parse *
31260 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69  , Expr *, u32, i
31270 6e 74 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  nt*, int*, int*)
31280 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  ;..int sqlite3Jo
31290 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
312a0 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63  3_vfs *, const c
312b0 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66  har *, sqlite3_f
312c0 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ile *, int, int)
312d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75  ;.int sqlite3Jou
312e0 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33  rnalSize(sqlite3
312f0 5f 76 66 73 20 2a 29 3b 0a 23 69 66 20 64 65 66  _vfs *);.#if def
31300 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
31310 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29  LE_ATOMIC_WRITE)
31320 20 5c 0a 20 7c 7c 20 64 65 66 69 6e 65 64 28 53   \. || defined(S
31330 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54  QLITE_ENABLE_BAT
31340 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29  CH_ATOMIC_WRITE)
31350 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
31360 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69  urnalCreate(sqli
31370 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6e  te3_file *);.#en
31380 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
31390 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72  JournalIsInMemor
313a0 79 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  y(sqlite3_file *
313b0 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  p);.void sqlite3
313c0 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  MemJournalOpen(s
313d0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
313e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
313f0 72 53 65 74 48 65 69 67 68 74 41 6e 64 46 6c 61  rSetHeightAndFla
31400 67 73 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  gs(Parse *pParse
31410 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69 66 20  , Expr *p);.#if 
31420 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
31430 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 73 71  DEPTH>0.  int sq
31440 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
31450 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b  eight(Select *);
31460 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78  .  int sqlite3Ex
31470 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50 61  prCheckHeight(Pa
31480 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  rse*, int);.#els
31490 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
314a0 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69  te3SelectExprHei
314b0 67 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69  ght(x) 0.  #defi
314c0 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  ne sqlite3ExprCh
314d0 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23  eckHeight(x,y).#
314e0 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74  endif..u32 sqlit
314f0 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74  e3Get4byte(const
31500 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u8*);.void sqli
31510 74 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c  te3Put4byte(u8*,
31520 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53   u32);..#ifdef S
31530 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c  QLITE_ENABLE_UNL
31540 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69  OCK_NOTIFY.  voi
31550 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
31560 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74  ionBlocked(sqlit
31570 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29  e3 *, sqlite3 *)
31580 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
31590 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b  ConnectionUnlock
315a0 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ed(sqlite3 *db);
315b0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
315c0 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28  onnectionClosed(
315d0 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65  sqlite3 *db);.#e
315e0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
315f0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42  lite3ConnectionB
31600 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64  locked(x,y).  #d
31610 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
31620 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
31630 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  x).  #define sql
31640 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
31650 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a  osed(x).#endif..
31660 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
31670 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BUG.  void sqlit
31680 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49  e3ParserTrace(FI
31690 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65  LE*, char *);.#e
316a0 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
316b0 28 59 59 43 4f 56 45 52 41 47 45 29 0a 20 20 69  (YYCOVERAGE).  i
316c0 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  nt sqlite3Parser
316d0 43 6f 76 65 72 61 67 65 28 46 49 4c 45 2a 29 3b  Coverage(FILE*);
316e0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
316f0 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  f the SQLITE_ENA
31700 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73  BLE IOTRACE exis
31710 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62  ts then the glob
31720 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73  al variable.** s
31730 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73  qlite3IoTrace is
31740 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
31750 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74  printf-like rout
31760 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70  ine used to.** p
31770 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67  rint I/O tracing
31780 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69   messages..*/.#i
31790 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
317a0 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66  LE_IOTRACE.# def
317b0 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20  ine IOTRACE(A)  
317c0 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61  if( sqlite3IoTra
317d0 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54  ce ){ sqlite3IoT
317e0 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64  race A; }.  void
317f0 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
31800 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53  aceSql(Vdbe*);.S
31810 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45  QLITE_API SQLITE
31820 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51  _EXTERN void (SQ
31830 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69  LITE_CDECL *sqli
31840 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73  te3IoTrace)(cons
31850 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65  t char*,...);.#e
31860 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  lse.# define IOT
31870 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65  RACE(A).# define
31880 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
31890 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66  aceSql(X).#endif
318a0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f  ../*.** These ro
318b0 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c  utines are avail
318c0 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d  able for the mem
318d0 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65  2.c debugging me
318e0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a  mory allocator.*
318f0 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72  * only.  They ar
31900 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79  e used to verify
31910 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20   that different 
31920 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72  "types" of memor
31930 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  y.** allocations
31940 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72   are properly tr
31950 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73  acked by the sys
31960 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  tem..**.** sqlit
31970 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
31980 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79  e() sets the "ty
31990 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61  pe" of an alloca
319a0 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a  tion to one of.*
319b0 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20  * the MEMTYPE_* 
319c0 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62  macros defined b
319d0 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20  elow.  The type 
319e0 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73  must be a bitmas
319f0 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67  k with.** a sing
31a00 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a  le bit set..**.*
31a10 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
31a20 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72  gHasType() retur
31a30 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f  ns true if any o
31a40 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
31a50 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
31a60 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
31a70 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
31a80 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
31a90 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
31aa0 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  ..** sqlite3Memd
31ab0 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73  ebugHasType() is
31ac0 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73   intended for us
31ad0 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28  e inside assert(
31ae0 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  ) statements..**
31af0 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
31b00 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75  bugNoType() retu
31b10 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65  rns true if none
31b20 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20   of the bits in 
31b30 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72  its second.** ar
31b40 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65  gument match the
31b50 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65   type set by the
31b60 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65   previous sqlite
31b70 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
31b80 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70  ()..**.** Perhap
31b90 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72  s the most impor
31ba0 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68  tant point is th
31bb0 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
31bc0 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41  ween MEMTYPE_HEA
31bd0 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45  P.** and MEMTYPE
31be0 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20  _LOOKASIDE.  If 
31bf0 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73  an allocation is
31c00 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
31c10 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a  DE, that means.*
31c20 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20  * it might have 
31c30 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62  been allocated b
31c40 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63  y lookaside, exc
31c50 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69  ept the allocati
31c60 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61  on was.** too la
31c70 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  rge or lookaside
31c80 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c   was already ful
31c90 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74  l.  It is import
31ca0 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  ant to verify.**
31cb0 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e   that allocation
31cc0 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  s that might hav
31cd0 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64  e been satisfied
31ce0 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72   by lookaside ar
31cf0 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20  e not.** passed 
31d00 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b  back to non-look
31d10 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
31d20 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20  tines.  Asserts 
31d30 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65  such as the.** e
31d40 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65  xample above are
31d50 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e   placed on the n
31d60 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
31d70 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20  e() routines to 
31d80 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63  verify.** this c
31d90 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a  onstraint..**.**
31da0 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20   All of this is 
31db0 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64  no-op for a prod
31dc0 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49  uction build.  I
31dd0 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74  t only comes int
31de0 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74  o.** play when t
31df0 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  he SQLITE_MEMDEB
31e00 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  UG compile-time 
31e10 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  option is used..
31e20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
31e30 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64  _MEMDEBUG.  void
31e40 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
31e50 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  SetType(void*,u8
31e60 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
31e70 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
31e80 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74  void*,u8);.  int
31e90 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
31ea0 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  NoType(void*,u8)
31eb0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
31ec0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
31ed0 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a  SetType(X,Y)  /*
31ee0 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69   no-op */.# defi
31ef0 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
31f00 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20  ugHasType(X,Y)  
31f10 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  1.# define sqlit
31f20 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
31f30 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66  (X,Y)   1.#endif
31f40 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
31f50 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31  _HEAP       0x01
31f60 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61    /* General hea
31f70 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  p allocations */
31f80 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
31f90 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32  _LOOKASIDE  0x02
31fa0 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d    /* Heap that m
31fb0 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c  ight have been l
31fc0 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66  ookaside */.#def
31fd0 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43  ine MEMTYPE_PCAC
31fe0 48 45 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20  HE     0x04  /* 
31ff0 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63  Page cache alloc
32000 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
32010 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72   Threading inter
32020 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  face.*/.#if SQLI
32030 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
32040 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69  READS>0.int sqli
32050 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65 28  te3ThreadCreate(
32060 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76  SQLiteThread**,v
32070 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76  oid*(*)(void*),v
32080 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
32090 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c  e3ThreadJoin(SQL
320a0 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64  iteThread*, void
320b0 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  **);.#endif..#if
320c0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
320d0 45 4e 41 42 4c 45 5f 44 42 50 41 47 45 5f 56 54  ENABLE_DBPAGE_VT
320e0 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  AB) || defined(S
320f0 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20  QLITE_TEST).int 
32100 73 71 6c 69 74 65 33 44 62 70 61 67 65 52 65 67  sqlite3DbpageReg
32110 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b  ister(sqlite3*);
32120 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
32130 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
32140 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20 7c  E_DBSTAT_VTAB) |
32150 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
32160 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74  _TEST).int sqlit
32170 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65 72  e3DbstatRegister
32180 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64  (sqlite3*);.#end
32190 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  if..int sqlite3E
321a0 78 70 72 56 65 63 74 6f 72 53 69 7a 65 28 45 78  xprVectorSize(Ex
321b0 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
321c0 73 71 6c 69 74 65 33 45 78 70 72 49 73 56 65 63  sqlite3ExprIsVec
321d0 74 6f 72 28 45 78 70 72 20 2a 70 45 78 70 72 29  tor(Expr *pExpr)
321e0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 56  ;.Expr *sqlite3V
321f0 65 63 74 6f 72 46 69 65 6c 64 53 75 62 65 78 70  ectorFieldSubexp
32200 72 28 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 45  r(Expr*, int);.E
32210 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
32220 46 6f 72 56 65 63 74 6f 72 46 69 65 6c 64 28 50  ForVectorField(P
32230 61 72 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74 29  arse*,Expr*,int)
32240 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 65  ;.void sqlite3Ve
32250 63 74 6f 72 45 72 72 6f 72 4d 73 67 28 50 61 72  ctorErrorMsg(Par
32260 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 23 69  se*, Expr*);..#i
32270 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
32280 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f  T_COMPILEOPTION_
32290 44 49 41 47 53 0a 63 6f 6e 73 74 20 63 68 61 72  DIAGS.const char
322a0 20 2a 2a 73 71 6c 69 74 65 33 43 6f 6d 70 69 6c   **sqlite3Compil
322b0 65 4f 70 74 69 6f 6e 73 28 69 6e 74 20 2a 70 6e  eOptions(int *pn
322c0 4f 70 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65  Opt);.#endif..#e
322d0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 49 4e  ndif /* SQLITEIN
322e0 54 5f 48 20 2a 2f 0a                             T_H */.