/ Hex Artifact Content
Login

Artifact 29ac7a59845826fb6523a6b2b77474c954ddedb8368526901b0c7b8df5c2f56e:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  ed(__PTRDIFF_TYP
1f20: 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61  E__)  /* This ca
1f30: 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66  se should work f
1f40: 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69  or GCC */.# defi
1f50: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
1f60: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
1f70: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1f80: 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  __)(X)).# define
1f90: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
1fa0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f  NT(X)  ((int)(__
1fb0: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
1fc0: 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  X)).#elif !defin
1fd0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20  ed(__GNUC__)    
1fe0: 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20     /* Works for 
1ff0: 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20  compilers other 
2000: 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64  than LLVM */.# d
2010: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2020: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2030: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
2040: 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X]).# define SQL
2050: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2060: 29 20 20 28 28 69 6e 74 29 28 28 28 63 68 61 72  )  ((int)(((char
2070: 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a  *)X)-(char*)0)).
2080: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41  #elif defined(HA
2090: 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f  VE_STDINT_H)   /
20a0: 2a 20 55 73 65 20 74 68 69 73 20 63 61 73 65 20  * Use this case 
20b0: 69 66 20 77 65 20 68 61 76 65 20 41 4e 53 49 20  if we have ANSI 
20c0: 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66  headers */.# def
20d0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
20e0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
20f0: 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  *)(intptr_t)(X))
2100: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2110: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2120: 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29  ((int)(intptr_t)
2130: 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  (X)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
6950: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 28 64 65  |    \.      (de
6960: 66 69 6e 65 64 28 5f 5f 54 4f 53 5f 41 49 58 5f  fined(__TOS_AIX_
6970: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
6980: 5f 36 34 42 49 54 5f 5f 29 29 0a 23 20 20 20 64  _64BIT__)).#   d
6990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
69a0: 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20  SIZE 4.# else.# 
69b0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
69c0: 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69  PTRSIZE 8.# endi
69d0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  f.#endif../* The
69e0: 20 75 70 74 72 20 74 79 70 65 20 69 73 20 61 6e   uptr type is an
69f0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6a00: 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
6a10: 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72  o hold a pointer
6a20: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6a30: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20  HAVE_STDINT_H). 
6a40: 20 74 79 70 65 64 65 66 20 75 69 6e 74 70 74 72   typedef uintptr
6a50: 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53  _t uptr;.#elif S
6a60: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34  QLITE_PTRSIZE==4
6a70: 0a 20 20 74 79 70 65 64 65 66 20 75 33 32 20 75  .  typedef u32 u
6a80: 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ptr;.#else.  typ
6a90: 65 64 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23  edef u64 uptr;.#
6aa0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6ab0: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6ac0: 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63  ,S,E) macro chec
6ad0: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69  ks to see if poi
6ae0: 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f  nter P points to
6af0: 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65  .** something be
6b00: 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69  tween S (inclusi
6b10: 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75  ve) and E (exclu
6b20: 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  sive)..**.** In 
6b30: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69  other words, S i
6b40: 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 45  s a buffer and E
6b50: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6b60: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
6b70: 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64  after.** the end
6b80: 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20 54   of buffer S.  T
6b90: 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e  his macro return
6ba0: 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e  s true if P poin
6bb0: 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a  ts to something.
6bc0: 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  ** contained wit
6bd0: 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 53  hin the buffer S
6be0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
6bf0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
6c00: 29 20 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28  ) (((uptr)(P)>=(
6c10: 75 70 74 72 29 28 53 29 29 26 26 28 28 75 70 74  uptr)(S))&&((upt
6c20: 72 29 28 50 29 3c 28 75 70 74 72 29 28 45 29 29  r)(P)<(uptr)(E))
6c30: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  ).../*.** Macros
6c40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
6c50: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
6c60: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
6c70: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
6c80: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
6c90: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
6ca0: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
6cb0: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
6cc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
6cd0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
6ce0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
6cf0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
6d00: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
6d10: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
6d20: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
6d30: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
6d40: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
6d50: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6d60: 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  =0 is set, then 
6d70: 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65  byte-order is de
6d80: 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72  termined.** at r
6d90: 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e  un-time..*/.#ifn
6da0: 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  def SQLITE_BYTEO
6db0: 52 44 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65  RDER.# if define
6dc0: 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64  d(i386)     || d
6dd0: 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29  efined(__i386__)
6de0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d     || defined(_M
6df0: 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20  _IX86) ||    \. 
6e00: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38      defined(__x8
6e10: 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64  6_64) || defined
6e20: 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20  (__x86_64__) || 
6e30: 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20  defined(_M_X64) 
6e40: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
6e50: 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20  fined(_M_AMD64) 
6e60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52  || defined(_M_AR
6e70: 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  M)     || define
6e80: 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20  d(__x86)   ||   
6e90: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6ea0: 5f 5f 61 72 6d 5f 5f 29 20 20 7c 7c 20 64 65 66  __arm__)  || def
6eb0: 69 6e 65 64 28 5f 4d 5f 41 52 4d 36 34 29 0a 23  ined(_M_ARM64).#
6ec0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6ed0: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32  _BYTEORDER    12
6ee0: 33 34 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65  34.# elif define
6ef0: 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64  d(sparc)    || d
6f00: 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a  efined(__ppc__).
6f10: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6f20: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34  E_BYTEORDER    4
6f30: 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  321.# else.#   d
6f40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
6f50: 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66  EORDER 0.# endif
6f60: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
6f70: 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33  TE_BYTEORDER==43
6f80: 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  21.# define SQLI
6f90: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
6fa0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
6fb0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30  E_LITTLEENDIAN 0
6fc0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6fd0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
6fe0: 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c  LITE_UTF16BE.#el
6ff0: 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  if SQLITE_BYTEOR
7000: 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69  DER==1234.# defi
7010: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
7020: 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e  IAN    0.# defin
7030: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7040: 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65  NDIAN 1.# define
7050: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
7060: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
7070: 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65  6LE.#else.# ifde
7080: 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
7090: 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e  ATION.  const in
70a0: 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31  t sqlite3one = 1
70b0: 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72  ;.# else.  exter
70c0: 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69  n const int sqli
70d0: 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a  te3one;.# endif.
70e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
70f0: 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28  BIGENDIAN    (*(
7100: 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33  char *)(&sqlite3
7110: 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e  one)==0).# defin
7120: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7130: 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29  NDIAN (*(char *)
7140: 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31  (&sqlite3one)==1
7150: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
7160: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 28  E_UTF16NATIVE  (
7170: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
7180: 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a  ?SQLITE_UTF16BE:
7190: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a  SQLITE_UTF16LE).
71a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f  #endif../*.** Co
71b0: 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20  nstants for the 
71c0: 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c  largest and smal
71d0: 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34  lest possible 64
71e0: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
71f0: 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d  gers..** These m
7200: 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e  acros are design
7210: 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65  ed to work corre
7220: 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d  ctly on both 32-
7230: 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a  bit and 64-bit.*
7240: 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a  * compilers..*/.
7250: 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f  #define LARGEST_
7260: 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66 66  INT64  (0xffffff
7270: 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66 66  ff|(((i64)0x7fff
7280: 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66  ffff)<<32)).#def
7290: 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  ine SMALLEST_INT
72a0: 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20  64 (((i64)-1) - 
72b0: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a  LARGEST_INT64)..
72c0: 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61  /*.** Round up a
72d0: 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e   number to the n
72e0: 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69  ext larger multi
72f0: 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20  ple of 8.  This 
7300: 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f  is used.** to fo
7310: 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e  rce 8-byte align
7320: 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61  ment on 64-bit a
7330: 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f  rchitectures..*/
7340: 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28  .#define ROUND8(
7350: 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26  x)     (((x)+7)&
7360: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64  ~7)../*.** Round
7370: 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61   down to the nea
7380: 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66  rest multiple of
7390: 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f   8.*/.#define RO
73a0: 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29  UNDDOWN8(x) ((x)
73b0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65  &~7)../*.** Asse
73c0: 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e  rt that the poin
73d0: 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64  ter X is aligned
73e0: 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f   to an 8-byte bo
73f0: 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a  undary.  This.**
7400: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f   macro is used o
7410: 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72  nly within asser
7420: 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68  t() to verify th
7430: 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73  at the code gets
7440: 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e  .** all alignmen
7450: 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63  t restrictions c
7460: 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78  orrect..**.** Ex
7470: 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f  cept, if SQLITE_
7480: 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d  4_BYTE_ALIGNED_M
7490: 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64  ALLOC is defined
74a0: 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e  , then the.** un
74b0: 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28  derlying malloc(
74c0: 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  ) implementation
74d0: 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73   might return us
74e0: 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a   4-byte aligned.
74f0: 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e  ** pointers.  In
7500: 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79   that case, only
7510: 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61   verify 4-byte a
7520: 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66  lignment..*/.#if
7530: 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54  def SQLITE_4_BYT
7540: 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43  E_ALIGNED_MALLOC
7550: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
7560: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
7570: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
7580: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29  ) - (char*)0)&3)
7590: 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
75a0: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
75b0: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
75c0: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
75d0: 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23  har*)0)&7)==0).#
75e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73  endif../*.** Dis
75f0: 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61  able MMAP on pla
7600: 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20  tforms where it 
7610: 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20  is known to not 
7620: 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69  work.*/.#if defi
7630: 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29  ned(__OpenBSD__)
7640: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e   || defined(__QN
7650: 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20  XNTO__).# undef 
7660: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
7670: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7680: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7690: 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ZE 0.#endif../*.
76a0: 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d  ** Default maxim
76b0: 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72  um size of memor
76c0: 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79  y used by memory
76d0: 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74  -mapped I/O in t
76e0: 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66  he VFS.*/.#ifdef
76f0: 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63   __APPLE__.# inc
7700: 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64  lude <TargetCond
7710: 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64  itionals.h>.#end
7720: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
7730: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
7740: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
7750: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
7760: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
7770: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
7780: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
7790: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
77a0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
77b0: 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66  _sun) \.  || def
77c0: 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f  ined(__FreeBSD__
77d0: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
77e0: 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a  (__DragonFly__).
77f0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
7800: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
7810: 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32  0x7fff0000  /* 2
7820: 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65  147418112 */.# e
7830: 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53  lse.#   define S
7840: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
7850: 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 0.# endif.#e
7860: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
7870: 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a  default MMAP_SIZ
7880: 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c  E is zero on all
7890: 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c   platforms.  Or,
78a0: 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65   even if a large
78b0: 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41  r.** default MMA
78c0: 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66  P_SIZE is specif
78d0: 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ied at compile-t
78e0: 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74  ime, make sure t
78f0: 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e  hat it does.** n
7900: 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61  ot exceed the ma
7910: 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e  ximum mmap size.
7920: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
7930: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7940: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7950: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
7960: 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a  P_SIZE 0.#endif.
7970: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
7980: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
7990: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
79a0: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
79b0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
79c0: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
79d0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
79e0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
79f0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
7a00: 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65  ../*.** Only one
7a10: 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   of SQLITE_ENABL
7a20: 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54  E_STAT3 or SQLIT
7a30: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63  E_ENABLE_STAT4 c
7a40: 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a  an be defined..*
7a50: 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69  * Priority is gi
7a60: 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e  ven to SQLITE_EN
7a70: 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20  ABLE_STAT4.  If 
7a80: 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e  either are defin
7a90: 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69  ed, also.** defi
7aa0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7ab0: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
7ac0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
7ad0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20  _ENABLE_STAT4.# 
7ae0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
7af0: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
7b00: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7b10: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
7b20: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
7b30: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
7b40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
7b50: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
7b60: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
7b70: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
7b80: 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53  _STAT4.# undef S
7b90: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7ba0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64  T3_OR_STAT4.#end
7bb0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54  if../*.** SELECT
7bc0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69  TRACE_ENABLED wi
7bd0: 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f  ll be either 1 o
7be0: 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  r 0 depending on
7bf0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a   whether or not.
7c00: 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75  ** the Select qu
7c10: 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72  ery generator tr
7c20: 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74  acing logic is t
7c30: 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66  urned on..*/.#if
7c40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
7c50: 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41  ENABLE_SELECTTRA
7c60: 43 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c  CE).# define SEL
7c70: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
7c80: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
7c90: 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  e SELECTTRACE_EN
7ca0: 41 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a  ABLED 0.#endif..
7cb0: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
7cc0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
7cd0: 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
7ce0: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
7cf0: 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a  e busy-handler.*
7d00: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  * callback for a
7d10: 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61   given sqlite ha
7d20: 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndle..**.** The 
7d30: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
7d40: 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  er member of the
7d50: 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63   sqlite struct c
7d60: 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79  ontains the busy
7d70: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
7d80: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
7d90: 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72  ndle. Each pager
7da0: 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20   opened via the 
7db0: 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65  sqlite.** handle
7dc0: 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69   is passed a poi
7dd0: 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62  nter to sqlite.b
7de0: 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20  usyHandler. The 
7df0: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
7e00: 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72  callback is curr
7e10: 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e  ently invoked on
7e20: 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70  ly from within p
7e30: 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64  ager.c..*/.typed
7e40: 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61  ef struct BusyHa
7e50: 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65  ndler BusyHandle
7e60: 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61  r;.struct BusyHa
7e70: 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  ndler {.  int (*
7e80: 78 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f  xBusyHandler)(vo
7e90: 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54  id *,int);  /* T
7ea0: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
7eb0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73   */.  void *pBus
7ec0: 79 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  yArg;           
7ed0: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
7ee0: 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c   arg to busy cal
7ef0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
7f00: 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  Busy;           
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7f20: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
7f30: 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20   each busy call 
7f40: 2a 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69  */.  u8 bExtraFi
7f50: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
7f60: 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64         /* Includ
7f70: 65 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61  e sqlite3_file a
7f80: 73 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a  s callback arg *
7f90: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65  /.};../*.** Name
7fa0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
7fb0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20  atabase table.  
7fc0: 54 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  The master datab
7fd0: 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  ase table.** is 
7fe0: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20  a special table 
7ff0: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e  that holds the n
8000: 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75  ames and attribu
8010: 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73  tes of all.** us
8020: 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  er tables and in
8030: 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  dices..*/.#defin
8040: 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20  e MASTER_NAME   
8050: 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74      "sqlite_mast
8060: 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50  er".#define TEMP
8070: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73  _MASTER_NAME  "s
8080: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
8090: 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f  r"../*.** The ro
80a0: 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d  ot-page of the m
80b0: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
80c0: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
80d0: 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20   MASTER_ROOT    
80e0: 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
80f0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65  name of the sche
8100: 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  ma table..*/.#de
8110: 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c  fine SCHEMA_TABL
8120: 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45  E(x)  ((!OMIT_TE
8130: 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45  MPDB)&&(x==1)?TE
8140: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d  MP_MASTER_NAME:M
8150: 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a  ASTER_NAME)../*.
8160: 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65  ** A convenience
8170: 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75   macro that retu
8180: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
8190: 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a  f elements in.**
81a0: 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64   an array..*/.#d
81b0: 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28  efine ArraySize(
81c0: 58 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a  X)    ((int)(siz
81d0: 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b  eof(X)/sizeof(X[
81e0: 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  0])))../*.** Det
81f0: 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72  ermine if the ar
8200: 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65  gument is a powe
8210: 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66  r of two.*/.#def
8220: 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f  ine IsPowerOfTwo
8230: 28 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31  (X) (((X)&((X)-1
8240: 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  ))==0)../*.** Th
8250: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75  e following valu
8260: 65 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f  e as a destructo
8270: 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73  r means to use s
8280: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a  qlite3DbFree()..
8290: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62  ** The sqlite3Db
82a0: 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72  Free() routine r
82b0: 65 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61  equires two para
82c0: 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f  meters instead o
82d0: 66 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72  f the.** one par
82e0: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
82f0: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
8300: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
8310: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a  ve to introduce.
8320: 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61  ** this magic va
8330: 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64  lue that the cod
8340: 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c  e knows to handl
8350: 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20  e differently.  
8360: 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77  Any.** pointer w
8370: 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73  ill work here as
8380: 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64   long as it is d
8390: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c  istinct from SQL
83a0: 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e  ITE_STATIC.** an
83b0: 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  d SQLITE_TRANSIE
83c0: 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NT..*/.#define S
83d0: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20  QLITE_DYNAMIC   
83e0: 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75  ((sqlite3_destru
83f0: 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65  ctor_type)sqlite
8400: 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a  3MallocSize)../*
8410: 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f  .** When SQLITE_
8420: 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69  OMIT_WSD is defi
8430: 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ned, it means th
8440: 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c  at the target pl
8450: 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e  atform does.** n
8460: 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61  ot support Writa
8470: 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20  ble Static Data 
8480: 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c  (WSD) such as gl
8490: 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20  obal and static 
84a0: 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c  variables..** Al
84b0: 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74  l variables must
84c0: 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68   either be on th
84d0: 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d  e stack or dynam
84e0: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
84f0: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61   from.** the hea
8500: 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20  p.  When WSD is 
8510: 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  unsupported, the
8520: 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72   variable declar
8530: 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64  ations scattered
8540: 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74  .** throughout t
8550: 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d  he SQLite code m
8560: 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ust become const
8570: 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54  ants instead.  T
8580: 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a  he SQLITE_WSD.**
8590: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
85a0: 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e  or this purpose.
85b0: 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66    And instead of
85c0: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65   referencing the
85d0: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72   variable.** dir
85e0: 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74  ectly, we use it
85f0: 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20  s constant as a 
8600: 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68  key to lookup th
8610: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8620: 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74  ated.** buffer t
8630: 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76  hat holds real v
8640: 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f  ariable.  The co
8650: 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74  nstant is also t
8660: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a  he initializer.*
8670: 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69  * for the run-ti
8680: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  me allocated buf
8690: 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  fer..**.** In th
86a0: 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65  e usual case whe
86b0: 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72  re WSD is suppor
86c0: 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  ted, the SQLITE_
86d0: 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a  WSD and GLOBAL.*
86e0: 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20  * macros become 
86f0: 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20  no-ops and have 
8700: 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65  zero performance
8710: 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64   impact..*/.#ifd
8720: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
8730: 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  SD.  #define SQL
8740: 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20  ITE_WSD const.  
8750: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
8760: 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65  ,v) (*(t*)sqlite
8770: 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64  3_wsd_find((void
8780: 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76  *)&(v), sizeof(v
8790: 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ))).  #define sq
87a0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
87b0: 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20  g GLOBAL(struct 
87c0: 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73  Sqlite3Config, s
87d0: 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20  qlite3Config).  
87e0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f  int sqlite3_wsd_
87f0: 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20  init(int N, int 
8800: 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  J);.  void *sqli
8810: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69  te3_wsd_find(voi
8820: 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65  d *K, int L);.#e
8830: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51  lse.  #define SQ
8840: 4c 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69  LITE_WSD.  #defi
8850: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76  ne GLOBAL(t,v) v
8860: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
8870: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73  e3GlobalConfig s
8880: 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e  qlite3Config.#en
8890: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
88a0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
88b0: 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70  are used to supp
88c0: 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61  ress compiler wa
88d0: 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a  rnings and to.**
88e0: 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74   make it clear t
88f0: 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20  o human readers 
8900: 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  when a function 
8910: 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c  parameter is del
8920: 69 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66  iberately.** lef
8930: 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20  t unused within 
8940: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
8950: 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75  nction. This usu
8960: 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65  ally happens whe
8970: 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20  n.** a function 
8980: 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20  is called via a 
8990: 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
89a0: 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  . For example th
89b0: 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
89c0: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
89d0: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
89e0: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
89f0: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
8a00: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
8a10: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
8a20: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
8a30: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
8a40: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
8a50: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
8a60: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
8a70: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
8a80: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
8a90: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
8aa0: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
8ab0: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
8ac0: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
8ad0: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
8ae0: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
8af0: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
8b00: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
8b10: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
8b20: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
8b30: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
8b40: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
8b50: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
8b60: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
8b70: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
8b80: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
8b90: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
8ba0: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
8bb0: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
8bc0: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
8bd0: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
8be0: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
8bf0: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
8c00: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
8c10: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
8c20: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
8c30: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
8c40: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
8c50: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
8c60: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
8c70: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
8c80: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
8c90: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
8ca0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
8cb0: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
8cc0: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
8cd0: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
8ce0: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
8cf0: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
8d00: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
8d10: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8d20: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
8d30: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
8d40: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
8d50: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
8d60: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
8d70: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
8d80: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
8d90: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
8da0: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
8db0: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
8dc0: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
8dd0: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
8de0: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
8df0: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
8e00: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
8e10: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
8e20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e30: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
8e40: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
8e50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e60: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
8e70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e80: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
8e90: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
8ea0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
8eb0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
8ec0: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
8ed0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8ee0: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
8ef0: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
8f00: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
8f10: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
8f20: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
8f30: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
8f40: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
8f50: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
8f60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
8f70: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
8f80: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
8f90: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
8fa0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
8fb0: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
8fc0: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
8fd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8fe0: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
8ff0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55  edef struct PreU
9000: 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b  pdate PreUpdate;
9010: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9020: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
9030: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b  PrintfArguments;
9040: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9050: 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e 61  RenameToken Rena
9060: 6d 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66  meToken;.typedef
9070: 20 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52   struct RowSet R
9080: 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73  owSet;.typedef s
9090: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
90a0: 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64  Savepoint;.typed
90b0: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
90c0: 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66   Select;.typedef
90d0: 20 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68   struct SQLiteTh
90e0: 72 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61  read SQLiteThrea
90f0: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
9100: 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c  t SelectDest Sel
9110: 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66  ectDest;.typedef
9120: 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20   struct SrcList 
9130: 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66  SrcList;.typedef
9140: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f   struct sqlite3_
9150: 73 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f 2a  str StrAccum; /*
9160: 20 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73 20   Internal alias 
9170: 66 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72 20  for sqlite3_str 
9180: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
9190: 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74  t Table Table;.t
91a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
91b0: 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63  bleLock TableLoc
91c0: 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  k;.typedef struc
91d0: 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74  t Token Token;.t
91e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
91f0: 65 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b  eeView TreeView;
9200: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9210: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
9220: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9230: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
9240: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
9250: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
9260: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
9270: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
9280: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
9290: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
92a0: 65 64 65 66 20 73 74 72 75 63 74 20 55 70 73 65  edef struct Upse
92b0: 72 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65 64  rt Upsert;.typed
92c0: 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65  ef struct VTable
92d0: 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66   VTable;.typedef
92e0: 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20   struct VtabCtx 
92f0: 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66  VtabCtx;.typedef
9300: 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57   struct Walker W
9310: 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73  alker;.typedef s
9320: 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20  truct WhereInfo 
9330: 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64  WhereInfo;.typed
9340: 65 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77  ef struct Window
9350: 20 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65 66   Window;.typedef
9360: 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74   struct With Wit
9370: 68 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62  h;.../*.** The b
9380: 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20  itmask datatype 
9390: 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73  defined below is
93a0: 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75   used for variou
93b0: 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
93c0: 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20  .**.** Changing 
93d0: 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62  this from a 64-b
93e0: 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74  it to a 32-bit t
93f0: 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e  ype limits the n
9400: 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c  umber of.** tabl
9410: 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20  es in a join to 
9420: 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34  32 instead of 64
9430: 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72  .  But it also r
9440: 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a  educes the size.
9450: 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  ** of the librar
9460: 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f  y by 738 bytes o
9470: 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65  n ix86..*/.#ifde
9480: 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b  f SQLITE_BITMASK
9490: 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20  _TYPE.  typedef 
94a0: 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54  SQLITE_BITMASK_T
94b0: 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c  YPE Bitmask;.#el
94c0: 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34  se.  typedef u64
94d0: 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66   Bitmask;.#endif
94e0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
94f0: 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20  er of bits in a 
9500: 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20  Bitmask.  "BMS" 
9510: 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53  means "BitMask S
9520: 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ize"..*/.#define
9530: 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a   BMS  ((int)(siz
9540: 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29  eof(Bitmask)*8))
9550: 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e  ../*.** A bit in
9560: 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64   a Bitmask.*/.#d
9570: 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29  efine MASKBIT(n)
9580: 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29     (((Bitmask)1)
9590: 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d  <<(n)).#define M
95a0: 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75  ASKBIT32(n) (((u
95b0: 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c  nsigned int)1)<<
95c0: 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c  (n)).#define ALL
95d0: 42 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d  BITS      ((Bitm
95e0: 61 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56 4c  ask)-1)../* A VL
95f0: 69 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f 72  ist object recor
9600: 64 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65 74  ds a mapping bet
9610: 77 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73 2f  ween parameters/
9620: 76 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63 61  variables/wildca
9630: 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53 51  rds.** in the SQ
9640: 4c 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75 63  L statement (suc
9650: 68 20 61 73 20 24 61 62 63 2c 20 40 70 71 72 2c  h as $abc, @pqr,
9660: 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74 68   or :xyz) and th
9670: 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 72  e integer.** var
9680: 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73 73  iable number ass
9690: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61  ociated with tha
96a0: 74 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53 65  t parameter.  Se
96b0: 65 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65 73  e the format des
96c0: 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74  cription.** on t
96d0: 68 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74 41  he sqlite3VListA
96e0: 64 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72  dd() routine for
96f0: 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f   more informatio
9700: 6e 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20 72  n.  A VList is r
9710: 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61 6e  eally.** just an
9720: 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65   array of intege
9730: 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 69  rs..*/.typedef i
9740: 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a  nt VList;../*.**
9750: 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20   Defer sourcing 
9760: 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65  vdbe.h and btree
9770: 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74  .h until after t
9780: 68 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22  he "u8" and.** "
9790: 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70  BusyHandler" typ
97a0: 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c  edefs. vdbe.h al
97b0: 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65  so requires a fe
97c0: 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a  w of the opaque.
97d0: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73  ** pointer types
97e0: 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20   (i.e. FuncDef) 
97f0: 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a  defined above..*
9800: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65  /.#include "btre
9810: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76  e.h".#include "v
9820: 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  dbe.h".#include 
9830: 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75  "pager.h".#inclu
9840: 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69  de "pcache.h".#i
9850: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
9860: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
9870: 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  ../* The SQLITE_
9880: 45 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f  EXTRA_DURABLE co
9890: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
98a0: 6e 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68  n used to set th
98b0: 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e  e default.** syn
98c0: 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67  chronous setting
98d0: 20 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69   to EXTRA.  It i
98e0: 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70  s no longer supp
98f0: 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  orted..*/.#ifdef
9900: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9910: 52 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20  RABLE.# warning 
9920: 55 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  Use SQLITE_DEFAU
9930: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33  LT_SYNCHRONOUS=3
9940: 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49   instead of SQLI
9950: 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45  TE_EXTRA_DURABLE
9960: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
9970: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
9980: 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f  NOUS 3.#endif../
9990: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e  *.** Default syn
99a0: 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e  chronous levels.
99b0: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
99c0: 20 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20   (for historcal 
99d0: 72 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47  reasons) the PAG
99e0: 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a  ER_SYNCHRONOUS_*
99f0: 20 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a   macros differ.*
9a00: 2a 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54  * from the SQLIT
9a10: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
9a20: 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31  ONOUS value by 1
9a30: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  ..**.**         
9a40: 20 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e    PAGER_SYNCHRON
9a50: 4f 55 53 20 20 20 20 20 20 20 44 45 46 41 55 4c  OUS       DEFAUL
9a60: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a  T_SYNCHRONOUS.**
9a70: 20 20 20 4f 46 46 20 20 20 20 20 20 20 20 20 20     OFF          
9a80: 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
9a90: 20 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20             0.** 
9aa0: 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20    NORMAL        
9ab0: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2               
9ac0: 20 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20            1.**  
9ad0: 20 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33   FULL          3
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9af0: 20 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20           2.**   
9b00: 45 58 54 52 41 20 20 20 20 20 20 20 20 20 34 20  EXTRA         4 
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b20: 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20          3.**.** 
9b30: 54 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63  The "PRAGMA sync
9b40: 68 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65  hronous" stateme
9b50: 6e 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65  nt also uses the
9b60: 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62   zero-based numb
9b70: 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ers..** In other
9b80: 20 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f   words, the zero
9b90: 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61  -based numbers a
9ba0: 72 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20  re used for all 
9bb0: 65 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61  external interfa
9bc0: 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f  ces.** and the o
9bd0: 6e 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20  ne-based values 
9be0: 61 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61  are used interna
9bf0: 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  lly..*/.#ifndef 
9c00: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9c10: 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66  YNCHRONOUS.# def
9c20: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
9c30: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 32  LT_SYNCHRONOUS 2
9c40: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
9c50: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
9c60: 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23  AL_SYNCHRONOUS.#
9c70: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
9c80: 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48  EFAULT_WAL_SYNCH
9c90: 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45  RONOUS SQLITE_DE
9ca0: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
9cb0: 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  S.#endif../*.** 
9cc0: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69  Each database fi
9cd0: 6c 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65  le to be accesse
9ce0: 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20  d by the system 
9cf0: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
9d00: 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * of the followi
9d10: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  ng structure.  T
9d20: 68 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  here are normall
9d30: 79 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73  y two of these s
9d40: 74 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20  tructures.** in 
9d50: 74 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d  the sqlite.aDb[]
9d60: 20 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20   array.  aDb[0] 
9d70: 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
9d80: 62 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a  base file and.**
9d90: 20 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64   aDb[1] is the d
9da0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
9db0: 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72  d to hold tempor
9dc0: 61 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64  ary tables.  Add
9dd0: 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62  itional.** datab
9de0: 61 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61  ases may be atta
9df0: 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ched..*/.struct 
9e00: 44 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62  Db {.  char *zDb
9e10: 53 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  SName;      /* N
9e20: 61 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61  ame of this data
9e30: 62 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e 61  base. (schema na
9e40: 6d 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65  me, not filename
9e50: 29 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  ) */.  Btree *pB
9e60: 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  t;          /* T
9e70: 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74  he B*Tree struct
9e80: 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74  ure for this dat
9e90: 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20  abase file */.  
9ea0: 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b  u8 safety_level;
9eb0: 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72       /* How aggr
9ec0: 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e  essive at syncin
9ed0: 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a  g data to disk *
9ee0: 2f 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b  /.  u8 bSyncSet;
9ef0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
9f00: 20 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63   if "PRAGMA sync
9f10: 68 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62  hronous=N" has b
9f20: 65 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68  een run */.  Sch
9f30: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
9f40: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
9f50: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
9f60: 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64  (possibly shared
9f70: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ) */.};../*.** A
9f80: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
9f90: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
9fa0: 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64  cture stores a d
9fb0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
9fc0: 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d  **.** Most Schem
9fd0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73  a objects are as
9fe0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
9ff0: 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65  Btree.  The exce
a000: 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20  ption is.** the 
a010: 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54  Schema for the T
a020: 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71  EMP databaes (sq
a030: 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68  lite3.aDb[1]) wh
a040: 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e  ich is free-stan
a050: 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72  ding..** In shar
a060: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61  ed cache mode, a
a070: 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f   single Schema o
a080: 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61  bject can be sha
a090: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a  red by multiple.
a0a0: 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72  ** Btrees that r
a0b0: 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65  efer to the same
a0c0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68   underlying BtSh
a0d0: 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a  ared object..**.
a0e0: 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  ** Schema object
a0f0: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
a100: 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20  lly deallocated 
a110: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74  when the last Bt
a120: 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65  ree that.** refe
a130: 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64  rences them is d
a140: 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20  estroyed.   The 
a150: 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d  TEMP Schema is m
a160: 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79  anually freed by
a170: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  .** sqlite3_clos
a180: 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65  e()..*.** A thre
a190: 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69  ad must be holdi
a1a0: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
a1b0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
a1c0: 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a  Btree in order.*
a1d0: 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65  * to access Sche
a1e0: 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69  ma content.  Thi
a1f0: 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74  s implies that t
a200: 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61  he thread must a
a210: 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e  lso be.** holdin
a220: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
a230: 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74   sqlite3 connect
a240: 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ion pointer that
a250: 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e   owns the Btree.
a260: 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53  .** For a TEMP S
a270: 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20  chema, only the 
a280: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  connection mutex
a290: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   is required..*/
a2a0: 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b  .struct Schema {
a2b0: 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f  .  int schema_co
a2c0: 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62  okie;   /* Datab
a2d0: 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  ase schema versi
a2e0: 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  on number for th
a2f0: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74  is file */.  int
a300: 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20   iGeneration;   
a310: 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20    /* Generation 
a320: 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d  counter.  Increm
a330: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
a340: 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68  change */.  Hash
a350: 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20   tblHash;       
a360: 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69   /* All tables i
a370: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
a380: 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68  /.  Hash idxHash
a390: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
a3a0: 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20  (named) indices 
a3b0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
a3c0: 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61  */.  Hash trigHa
a3d0: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
a3e0: 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65   triggers indexe
a3f0: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
a400: 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20  ash fkeyHash;   
a410: 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69      /* All forei
a420: 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72  gn keys by refer
a430: 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65  enced table name
a440: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65   */.  Table *pSe
a450: 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68  qTab;      /* Th
a460: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
a470: 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20  e table used by 
a480: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
a490: 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61  .  u8 file_forma
a4a0: 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  t;      /* Schem
a4b0: 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  a format version
a4c0: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
a4d0: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
a4e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
a4f0: 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62   encoding used b
a500: 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  y this database 
a510: 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46  */.  u16 schemaF
a520: 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61  lags;     /* Fla
a530: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
a540: 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  th this schema *
a550: 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69  /.  int cache_si
a560: 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ze;      /* Numb
a570: 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75  er of pages to u
a580: 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20  se in the cache 
a590: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
a5a0: 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
a5b0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
a5c0: 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
a5d0: 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70  s in the.** Db.p
a5e0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
a5f0: 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
a600: 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c  DbHasProperty(D,
a610: 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e  I,P)     (((D)->
a620: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a630: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
a640: 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44  ==(P)).#define D
a650: 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28  bHasAnyProperty(
a660: 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61  D,I,P)  (((D)->a
a670: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a680: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21  chemaFlags&(P))!
a690: 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65  =0).#define DbSe
a6a0: 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  tProperty(D,I,P)
a6b0: 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d       (D)->aDb[I]
a6c0: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
a6d0: 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  Flags|=(P).#defi
a6e0: 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72  ne DbClearProper
a6f0: 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d  ty(D,I,P)   (D)-
a700: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
a710: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28  >schemaFlags&=~(
a720: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
a730: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
a740: 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   DB.pSchema->fla
a750: 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
a760: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
a770: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
a780: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
a790: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
a7a0: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
a7b0: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
a7c0: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
a7d0: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
a7e0: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
a7f0: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
a800: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
a810: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
a820: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
a830: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
a840: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
a850: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
a860: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
a870: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
a880: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
a890: 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61  define DB_Schema
a8a0: 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31  Loaded    0x0001
a8b0: 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20    /* The schema 
a8c0: 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  has been loaded 
a8d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e  */.#define DB_Un
a8e0: 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78  resetViews    0x
a8f0: 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69  0002  /* Some vi
a900: 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64  ews have defined
a910: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   column names */
a920: 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74  .#define DB_Empt
a930: 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  y           0x00
a940: 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20  04  /* The file 
a950: 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68  is empty (length
a960: 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 23 64 65   0 bytes) */.#de
a970: 66 69 6e 65 20 44 42 5f 52 65 73 65 74 57 61 6e  fine DB_ResetWan
a980: 74 65 64 20 20 20 20 20 30 78 30 30 30 38 20 20  ted     0x0008  
a990: 2f 2a 20 52 65 73 65 74 20 74 68 65 20 73 63 68  /* Reset the sch
a9a0: 65 6d 61 20 77 68 65 6e 20 6e 53 63 68 65 6d 61  ema when nSchema
a9b0: 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a  Lock==0 */../*.*
a9c0: 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
a9d0: 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20  different kinds 
a9e0: 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63  of things that c
a9f0: 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a  an be limited.**
aa00: 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74   using the sqlit
aa10: 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72  e3_limit() inter
aa20: 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  face..*/.#define
aa30: 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20   SQLITE_N_LIMIT 
aa40: 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f  (SQLITE_LIMIT_WO
aa50: 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a  RKER_THREADS+1).
aa60: 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  ./*.** Lookaside
aa70: 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74   malloc is a set
aa80: 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62   of fixed-size b
aa90: 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20  uffers that can 
aaa0: 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  be used.** to sa
aab0: 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e  tisfy small tran
aac0: 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c  sient memory all
aad0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73  ocation requests
aae0: 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20   for objects.** 
aaf0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
ab00: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
ab10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ab20: 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a  .  The use of.**
ab30: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
ab40: 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67  c provides a sig
ab50: 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d  nificant perform
ab60: 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74  ance enhancement
ab70: 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29  .** (approx 10%)
ab80: 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d   by avoiding num
ab90: 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65  erous malloc/fre
aba0: 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65  e requests while
abb0: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20   parsing.** SQL 
abc0: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
abd0: 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20  * The Lookaside 
abe0: 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
abf0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e  configuration in
ac00: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
ac10: 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  the.** lookaside
ac20: 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65   malloc subsyste
ac30: 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62  m.  Each availab
ac40: 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
ac50: 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c  tion in.** the l
ac60: 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74  ookaside subsyst
ac70: 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20  em is stored on 
ac80: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
ac90: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a   LookasideSlot.*
aca0: 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a  * objects..**.**
acb0: 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   Lookaside alloc
acc0: 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20  ations are only 
acd0: 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65  allowed for obje
ace0: 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73  cts that are ass
acf0: 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20  ociated.** with 
ad00: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
ad10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ad20: 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61  .  Hence, schema
ad30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e   information can
ad40: 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64  not.** be stored
ad50: 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65   in lookaside be
ad60: 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20  cause in shared 
ad70: 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73  cache mode the s
ad80: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
ad90: 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62  n.** is shared b
ada0: 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  y multiple datab
adb0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e  ase connections.
adc0: 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69    Therefore, whi
add0: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63  le parsing.** sc
ade0: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
adf0: 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e  , the Lookaside.
ae00: 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73  bEnabled flag is
ae10: 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74   cleared so that
ae20: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** lookaside al
ae30: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f  locations are no
ae40: 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72  t used to constr
ae50: 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f  uct the schema o
ae60: 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63  bjects..*/.struc
ae70: 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20  t Lookaside {.  
ae80: 75 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20  u32 bDisable;   
ae90: 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20          /* Only 
aea0: 6f 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b  operate the look
aeb0: 61 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20  aside when zero 
aec0: 2a 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20  */.  u16 sz;    
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aee0: 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66  Size of each buf
aef0: 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  fer in bytes */.
af00: 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20    u8 bMalloced; 
af10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
af20: 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61  e if pStart obta
af30: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
af40: 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20  3_malloc() */.  
af50: 75 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20 20 20  u32 nSlot;      
af60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
af70: 72 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65 20 73  r of lookaside s
af80: 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  lots allocated *
af90: 2f 0a 20 20 75 33 32 20 61 6e 53 74 61 74 5b 33  /.  u32 anStat[3
afa0: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30  ];          /* 0
afb0: 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65  : hits.  1: size
afc0: 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c   misses.  2: ful
afd0: 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f  l misses */.  Lo
afe0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 49 6e  okasideSlot *pIn
aff0: 69 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  it;   /* List of
b000: 20 62 75 66 66 65 72 73 20 6e 6f 74 20 70 72 65   buffers not pre
b010: 76 69 6f 75 73 6c 79 20 75 73 65 64 20 2a 2f 0a  viously used */.
b020: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
b030: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
b040: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
b050: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
b060: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
b070: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
b080: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
b090: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
b0a0: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
b0b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
b0c0: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
b0d0: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
b0e0: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
b0f0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
b100: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
b110: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
b120: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
b130: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
b140: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
b150: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
b160: 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  for built-in fun
b170: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
b180: 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e  s.  (Application
b190: 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63  -defined.** func
b1a0: 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75  tions use a regu
b1b0: 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20  lar table table 
b1c0: 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a  from hash.h.).**
b1d0: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
b1e0: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
b1f0: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
b200: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
b210: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
b220: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
b230: 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20  FuncDef.u.pHash 
b240: 63 68 61 69 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  chain..*/.#defin
b250: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41  e SQLITE_FUNC_HA
b260: 53 48 5f 53 5a 20 32 33 0a 73 74 72 75 63 74 20  SH_SZ 23.struct 
b270: 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20  FuncDefHash {.  
b280: 46 75 6e 63 44 65 66 20 2a 61 5b 53 51 4c 49 54  FuncDef *a[SQLIT
b290: 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b  E_FUNC_HASH_SZ];
b2a0: 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74         /* Hash t
b2b0: 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f  able for functio
b2c0: 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66  ns */.};..#ifdef
b2d0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b2e0: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a  HENTICATION./*.*
b2f0: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65  * Information he
b300: 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c 69 74  ld in the "sqlit
b310: 65 33 22 20 64 61 74 61 62 61 73 65 20 63 6f 6e  e3" database con
b320: 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61  nection object a
b330: 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61  nd used.** to ma
b340: 6e 61 67 65 20 75 73 65 72 20 61 75 74 68 65 6e  nage user authen
b350: 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70  tication..*/.typ
b360: 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c 69  edef struct sqli
b370: 74 65 33 5f 75 73 65 72 61 75 74 68 20 73 71 6c  te3_userauth sql
b380: 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b 0a 73  ite3_userauth;.s
b390: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
b3a0: 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20 61 75  erauth {.  u8 au
b3b0: 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20  thLevel;        
b3c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
b3d0: 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74 69  ent authenticati
b3e0: 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  on level */.  in
b3f0: 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20 20 20  t nAuthPW;      
b400: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
b410: 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75 74 68  ize of the zAuth
b420: 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  PW in bytes */. 
b430: 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57 3b 20   char *zAuthPW; 
b440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b450: 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65 64 20  * Password used 
b460: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
b470: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68  */.  char *zAuth
b480: 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  User;           
b490: 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20     /* User name 
b4a0: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
b4b0: 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  cate */.};../* A
b4c0: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
b4d0: 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  r sqlite3_userau
b4e0: 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a  th.authLevel */.
b4f0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 6e  #define UAUTH_Un
b500: 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20 20 20  known     0     
b510: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f  /* Authenticatio
b520: 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63 6b 65  n not yet checke
b530: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  d */.#define UAU
b540: 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20 20 31  TH_Fail        1
b550: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74       /* User aut
b560: 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c  hentication fail
b570: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  ed */.#define UA
b580: 55 54 48 5f 55 73 65 72 20 20 20 20 20 20 20 20  UTH_User        
b590: 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  2     /* Authent
b5a0: 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f 72 6d  icated as a norm
b5b0: 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65 66 69  al user */.#defi
b5c0: 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e 20 20  ne UAUTH_Admin  
b5d0: 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20 41 75       3     /* Au
b5e0: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
b5f0: 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 20  n administrator 
b600: 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73  */../* Functions
b610: 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 75 73   used only by us
b620: 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  er authorization
b630: 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71   logic */.int sq
b640: 6c 69 74 65 33 55 73 65 72 41 75 74 68 54 61 62  lite3UserAuthTab
b650: 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  le(const char*);
b660: 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72  .int sqlite3User
b670: 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73  AuthCheckLogin(s
b680: 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
b690: 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73  ar*,u8*);.void s
b6a0: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 49 6e  qlite3UserAuthIn
b6b0: 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  it(sqlite3*);.vo
b6c0: 69 64 20 73 71 6c 69 74 65 33 43 72 79 70 74 46  id sqlite3CryptF
b6d0: 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  unc(sqlite3_cont
b6e0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
b6f0: 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64  _value**);..#end
b700: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45  if /* SQLITE_USE
b710: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
b720: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64   */../*.** typed
b730: 65 66 20 66 6f 72 20 74 68 65 20 61 75 74 68 6f  ef for the autho
b740: 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63  rization callbac
b750: 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  k function..*/.#
b760: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
b770: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
b780: 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28  .  typedef int (
b790: 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28  *sqlite3_xauth)(
b7a0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
b7b0: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
b7c0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20  *,const char*,. 
b7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
b7f0: 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
b800: 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20   char*);.#else. 
b810: 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73   typedef int (*s
b820: 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f  qlite3_xauth)(vo
b830: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
b840: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
b850: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
b860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b870: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
b880: 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
b890: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
b8a0: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
b8b0: 0a 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20 65  ./* This is an e
b8c0: 78 74 72 61 20 53 51 4c 49 54 45 5f 54 52 41 43  xtra SQLITE_TRAC
b8d0: 45 20 6d 61 63 72 6f 20 74 68 61 74 20 69 6e 64  E macro that ind
b8e0: 69 63 61 74 65 73 20 22 6c 65 67 61 63 79 22 20  icates "legacy" 
b8f0: 74 72 61 63 69 6e 67 0a 2a 2a 20 69 6e 20 74 68  tracing.** in th
b900: 65 20 73 74 79 6c 65 20 6f 66 20 73 71 6c 69 74  e style of sqlit
b910: 65 33 5f 74 72 61 63 65 28 29 0a 2a 2f 0a 23 64  e3_trace().*/.#d
b920: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41  efine SQLITE_TRA
b930: 43 45 5f 4c 45 47 41 43 59 20 20 30 78 38 30 0a  CE_LEGACY  0x80.
b940: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51  #else.#define SQ
b950: 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43  LITE_TRACE_LEGAC
b960: 59 20 20 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53  Y  0.#endif /* S
b970: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
b980: 43 41 54 45 44 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  CATED */.../*.**
b990: 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20 63   Each database c
b9a0: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20  onnection is an 
b9b0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
b9c0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
b9d0: 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73  ure..*/.struct s
b9e0: 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74  qlite3 {.  sqlit
b9f0: 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20  e3_vfs *pVfs;   
ba00: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49           /* OS I
ba10: 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74  nterface */.  st
ba20: 72 75 63 74 20 56 64 62 65 20 2a 70 56 64 62 65  ruct Vdbe *pVdbe
ba30: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
ba40: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 76 69  ist of active vi
ba50: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a  rtual machines *
ba60: 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66  /.  CollSeq *pDf
ba70: 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20  ltColl;         
ba80: 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74    /* The default
ba90: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
baa0: 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a  nce (BINARY) */.
bab0: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
bac0: 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  *mutex;         
bad0: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  /* Connection mu
bae0: 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62  tex */.  Db *aDb
baf0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bb00: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61         /* All ba
bb10: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20  ckends */.  int 
bb20: 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  nDb;            
bb30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
bb40: 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20  ber of backends 
bb50: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
bb60: 20 2a 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c 61   */.  u32 mDbFla
bb70: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
bb80: 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 72 65 63      /* flags rec
bb90: 6f 72 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c 20  ording internal 
bba0: 73 74 61 74 65 20 2a 2f 0a 20 20 75 33 32 20 66  state */.  u32 f
bbb0: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
bbc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67           /* flag
bbd0: 73 20 73 65 74 74 61 62 6c 65 20 62 79 20 70 72  s settable by pr
bbe0: 61 67 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f 77  agmas. See below
bbf0: 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f   */.  i64 lastRo
bc00: 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  wid;            
bc10: 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20      /* ROWID of 
bc20: 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65  most recent inse
bc30: 72 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a  rt (see above) *
bc40: 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20  /.  i64 szMmap; 
bc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc60: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61    /* Default mma
bc70: 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a  p_size setting *
bc80: 2f 0a 20 20 75 33 32 20 6e 53 63 68 65 6d 61 4c  /.  u32 nSchemaL
bc90: 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ock;            
bca0: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73 65    /* Do not rese
bcb0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65  t the schema whe
bcc0: 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20  n non-zero */.  
bcd0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65  unsigned int ope
bce0: 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a  nFlags;       /*
bcf0: 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
bd00: 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70   sqlite3_vfs.xOp
bd10: 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72  en() */.  int er
bd20: 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  rCode;          
bd30: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
bd40: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64  recent error cod
bd50: 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a  e (SQLITE_*) */.
bd60: 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20    int errMask;  
bd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd80: 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65  /* & result code
bd90: 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f  s with this befo
bda0: 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a  re returning */.
bdb0: 20 20 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b    int iSysErrno;
bdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdd0: 2f 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66  /* Errno value f
bde0: 72 6f 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20  rom last system 
bdf0: 65 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64  error */.  u16 d
be00: 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20  bOptFlags;      
be10: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67           /* Flag
be20: 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61  s to enable/disa
be30: 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ble optimization
be40: 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  s */.  u8 enc;  
be50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be60: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
be70: 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75  oding */.  u8 au
be80: 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20  toCommit;       
be90: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
bea0: 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
beb0: 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73  . */.  u8 temp_s
bec0: 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20  tore;           
bed0: 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20       /* 1: file 
bee0: 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66  2: memory 0: def
bef0: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c  ault */.  u8 mal
bf00: 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20  locFailed;      
bf10: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
bf20: 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20  if we have seen 
bf30: 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  a malloc failure
bf40: 20 2a 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e   */.  u8 bBenign
bf50: 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  Malloc;         
bf60: 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65      /* Do not re
bf70: 71 75 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72  quire OOMs if tr
bf80: 75 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c  ue */.  u8 dfltL
bf90: 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ockMode;        
bfa0: 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
bfb0: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f   locking-mode fo
bfc0: 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a  r attached dbs *
bfd0: 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20  /.  signed char 
bfe0: 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20  nextAutovac;    
bff0: 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74    /* Autovac set
c000: 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55  ting after VACUU
c010: 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38  M if >=0 */.  u8
c020: 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20   suppressErr;   
c030: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
c040: 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f  o not issue erro
c050: 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72  r messages if tr
c060: 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f  ue */.  u8 vtabO
c070: 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20  nConflict;      
c080: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
c090: 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f  o return for s3_
c0a0: 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74  vtab_on_conflict
c0b0: 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61  () */.  u8 isTra
c0c0: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
c0d0: 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  t;    /* True if
c0e0: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73   the outermost s
c0f0: 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53  avepoint is a TS
c100: 20 2a 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b   */.  u8 mTrace;
c110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c120: 20 20 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d      /* zero or m
c130: 6f 72 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ore SQLITE_TRACE
c140: 20 66 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 6e   flags */.  u8 n
c150: 6f 53 68 61 72 65 64 43 61 63 68 65 3b 20 20 20  oSharedCache;   
c160: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
c170: 65 20 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63  e if no shared-c
c180: 61 63 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f  ache backends */
c190: 0a 20 20 75 38 20 6e 53 71 6c 45 78 65 63 3b 20  .  u8 nSqlExec; 
c1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1b0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 65   /* Number of pe
c1c0: 6e 64 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63  nding OP_SqlExec
c1d0: 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e   opcodes */.  in
c1e0: 74 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20  t nextPagesize; 
c1f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
c200: 61 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41  agesize after VA
c210: 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20  CUUM if >0 */.  
c220: 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20  u32 magic;      
c230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c240: 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f   Magic number fo
c250: 72 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79  r detect library
c260: 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74   misuse */.  int
c270: 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20   nChange;       
c280: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
c290: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
c2a0: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
c2b0: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61  ) */.  int nTota
c2c0: 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  lChange;        
c2d0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
c2e0: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
c2f0: 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  3_total_changes(
c300: 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69  ) */.  int aLimi
c310: 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54  t[SQLITE_N_LIMIT
c320: 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a  ];   /* Limits *
c330: 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74  /.  int nMaxSort
c340: 65 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  erMmap;         
c350: 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a    /* Maximum siz
c360: 65 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70  e of regions map
c370: 70 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f  ped by sorter */
c380: 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  .  struct sqlite
c390: 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20  3InitInfo {     
c3a0: 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
c3b0: 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74  used during init
c3c0: 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20  ialization */.  
c3d0: 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20    int newTnum;  
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c3f0: 20 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62   Rootpage of tab
c400: 6c 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  le being initial
c410: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69  ized */.    u8 i
c420: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
c430: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
c440: 20 64 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e   db file is bein
c450: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
c460: 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20  .    u8 busy;   
c470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c480: 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72   /* TRUE if curr
c490: 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69  ently initializi
c4a0: 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ng */.    unsign
c4b0: 65 64 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72  ed orphanTrigger
c4c0: 20 3a 20 31 3b 20 2f 2a 20 4c 61 73 74 20 73 74   : 1; /* Last st
c4d0: 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61  atement is orpha
c4e0: 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72  ned TEMP trigger
c4f0: 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
c500: 20 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 20 3a   imposterTable :
c510: 20 31 3b 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20   1; /* Building 
c520: 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c  an imposter tabl
c530: 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  e */.    unsigne
c540: 64 20 72 65 6f 70 65 6e 4d 65 6d 64 62 20 3a 20  d reopenMemdb : 
c550: 31 3b 20 20 20 2f 2a 20 41 54 54 41 43 48 20 69  1;   /* ATTACH i
c560: 73 20 72 65 61 6c 6c 79 20 61 20 72 65 6f 70 65  s really a reope
c570: 6e 20 75 73 69 6e 67 20 4d 65 6d 44 42 20 2a 2f  n using MemDB */
c580: 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74  .  } init;.  int
c590: 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20   nVdbeActive;   
c5a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c5b0: 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75  mber of VDBEs cu
c5c0: 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20  rrently running 
c5d0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65  */.  int nVdbeRe
c5e0: 61 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ad;             
c5f0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c600: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
c610: 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  t read or write 
c620: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72  */.  int nVdbeWr
c630: 69 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ite;            
c640: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c650: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
c660: 74 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  t read and write
c670: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45   */.  int nVdbeE
c680: 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  xec;            
c690: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c6a0: 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
c6b0: 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20   VdbeExec() */. 
c6c0: 20 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20   int nVDestroy; 
c6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c6e0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
c6f0: 76 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f  ve OP_VDestroy o
c700: 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69  perations */.  i
c710: 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20  nt nExtension;  
c720: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c730: 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64  Number of loaded
c740: 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20   extensions */. 
c750: 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69   void **aExtensi
c760: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  on;            /
c770: 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65  * Array of share
c780: 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65  d library handle
c790: 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 54 72  s */.  int (*xTr
c7a0: 61 63 65 29 28 75 33 32 2c 76 6f 69 64 2a 2c 76  ace)(u32,void*,v
c7b0: 6f 69 64 2a 2c 76 6f 69 64 2a 29 3b 20 20 20 20  oid*,void*);    
c7c0: 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69   /* Trace functi
c7d0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54  on */.  void *pT
c7e0: 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20  raceArg;        
c7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c800: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
c810: 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74   the trace funct
c820: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ion */.  void (*
c830: 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c  xProfile)(void*,
c840: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29  const char*,u64)
c850: 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20  ;  /* Profiling 
c860: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
c870: 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b  id *pProfileArg;
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c890: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
c8a0: 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66  ent to profile f
c8b0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
c8c0: 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20  d *pCommitArg;  
c8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c8e0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  * Argument to xC
c8f0: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20  ommitCallback() 
c900: 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d  */.  int (*xComm
c910: 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  itCallback)(void
c920: 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65  *);    /* Invoke
c930: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
c940: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52  t. */.  void *pR
c950: 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20  ollbackArg;     
c960: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
c970: 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61  ument to xRollba
c980: 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a  ckCallback() */.
c990: 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61    void (*xRollba
c9a0: 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  ckCallback)(void
c9b0: 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61  *); /* Invoked a
c9c0: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
c9d0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64 61  */.  void *pUpda
c9e0: 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a  teArg;.  void (*
c9f0: 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  xUpdateCallback)
ca00: 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73  (void*,int, cons
ca10: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
ca20: 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34  ar*,sqlite_int64
ca30: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
ca40: 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54  _ENABLE_PREUPDAT
ca50: 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a 70  E_HOOK.  void *p
ca60: 50 72 65 55 70 64 61 74 65 41 72 67 3b 20 20 20  PreUpdateArg;   
ca70: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
ca80: 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 50 72 65  argument to xPre
ca90: 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 2a  UpdateCallback *
caa0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 65 55  /.  void (*xPreU
cab0: 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 20  pdateCallback)( 
cac0: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 65 64 20    /* Registered 
cad0: 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72  using sqlite3_pr
cae0: 65 75 70 64 61 74 65 5f 68 6f 6f 6b 28 29 20 2a  eupdate_hook() *
caf0: 2f 0a 20 20 20 20 76 6f 69 64 2a 2c 73 71 6c 69  /.    void*,sqli
cb00: 74 65 33 2a 2c 69 6e 74 2c 63 68 61 72 20 63 6f  te3*,int,char co
cb10: 6e 73 74 2a 2c 63 68 61 72 20 63 6f 6e 73 74 2a  nst*,char const*
cb20: 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 2c 73  ,sqlite3_int64,s
cb30: 71 6c 69 74 65 33 5f 69 6e 74 36 34 0a 20 20 29  qlite3_int64.  )
cb40: 3b 0a 20 20 50 72 65 55 70 64 61 74 65 20 2a 70  ;.  PreUpdate *p
cb50: 50 72 65 55 70 64 61 74 65 3b 20 20 20 20 20 20  PreUpdate;      
cb60: 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72    /* Context for
cb70: 20 61 63 74 69 76 65 20 70 72 65 2d 75 70 64 61   active pre-upda
cb80: 74 65 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23  te callback */.#
cb90: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
cba0: 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
cbb0: 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65 66  _HOOK */.#ifndef
cbc0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
cbd0: 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c  .  int (*xWalCal
cbe0: 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73  lback)(void *, s
cbf0: 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
cc00: 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20  char *, int);.  
cc10: 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23  void *pWalArg;.#
cc20: 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43  endif.  void(*xC
cc30: 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a  ollNeeded)(void*
cc40: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54  ,sqlite3*,int eT
cc50: 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61  extRep,const cha
cc60: 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f  r*);.  void(*xCo
cc70: 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64  llNeeded16)(void
cc80: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
cc90: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f  TextRep,const vo
cca0: 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43  id*);.  void *pC
ccb0: 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20  ollNeededArg;.  
ccc0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
ccd0: 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Err;          /*
cce0: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
ccf0: 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20  or message */.  
cd00: 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61  union {.    vola
cd10: 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72  tile int isInter
cd20: 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20  rupted; /* True 
cd30: 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  if sqlite3_inter
cd40: 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63 61  rupt has been ca
cd50: 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62  lled */.    doub
cd60: 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20  le notUsed1;    
cd70: 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
cd80: 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c  r */.  } u1;.  L
cd90: 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69  ookaside lookasi
cda0: 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  de;          /* 
cdb0: 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  Lookaside malloc
cdc0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a   configuration *
cdd0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
cde0: 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
cdf0: 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78 61  ION.  sqlite3_xa
ce00: 75 74 68 20 78 41 75 74 68 3b 20 20 20 20 20 20  uth xAuth;      
ce10: 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61 75      /* Access au
ce20: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63  thorization func
ce30: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
ce40: 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20 20  pAuthArg;       
ce50: 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61          /* 1st a
ce60: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 61  rgument to the a
ce70: 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63 74  ccess auth funct
ce80: 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ion */.#endif.#i
ce90: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
cea0: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
ceb0: 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f  ACK.  int (*xPro
cec0: 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b 20  gress)(void *); 
ced0: 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72      /* The progr
cee0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
cef0: 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65 73    void *pProgres
cf00: 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
cf10: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
cf20: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
cf30: 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  back */.  unsign
cf40: 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b  ed nProgressOps;
cf50: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
cf60: 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f 72  r of opcodes for
cf70: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
cf80: 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  ck */.#endif.#if
cf90: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
cfa0: 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
cfb0: 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20 20  int nVTrans;    
cfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cfd0: 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20   Allocated size 
cfe0: 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20  of aVTrans */.  
cff0: 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20  Hash aModule;   
d000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d010: 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73 71   populated by sq
d020: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64  lite3_create_mod
d030: 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62 43  ule() */.  VtabC
d040: 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20 20  tx *pVtabCtx;   
d050: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74           /* Cont
d060: 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 76  ext for active v
d070: 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61  tab connect/crea
d080: 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  te */.  VTable *
d090: 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20  *aVTrans;       
d0a0: 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61 6c        /* Virtual
d0b0: 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70 65   tables with ope
d0c0: 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a  n transactions *
d0d0: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69 73  /.  VTable *pDis
d0e0: 63 6f 6e 6e 65 63 74 3b 20 20 20 20 20 20 20 20  connect;        
d0f0: 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20    /* Disconnect 
d100: 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71  these in next sq
d110: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
d120: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48 61 73 68  */.#endif.  Hash
d130: 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20   aFunc;         
d140: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73            /* Has
d150: 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65  h table of conne
d160: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  ction functions 
d170: 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53  */.  Hash aCollS
d180: 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
d190: 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74     /* All collat
d1a0: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f  ing sequences */
d1b0: 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62  .  BusyHandler b
d1c0: 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20  usyHandler;     
d1d0: 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63   /* Busy callbac
d1e0: 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61  k */.  Db aDbSta
d1f0: 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20  tic[2];         
d200: 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73       /* Static s
d210: 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64  pace for the 2 d
d220: 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20  efault backends 
d230: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
d240: 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  pSavepoint;     
d250: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
d260: 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20  tive savepoints 
d270: 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d  */.  int busyTim
d280: 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  eout;           
d290: 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c     /* Busy handl
d2a0: 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d  er timeout, in m
d2b0: 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  sec */.  int nSa
d2c0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
d2d0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
d2e0: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
d2f0: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ion savepoints *
d300: 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65  /.  int nStateme
d310: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
d320: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
d330: 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d  ested statement-
d340: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f  transactions  */
d350: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
d360: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
d370: 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64   /* Net deferred
d380: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69   constraints thi
d390: 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a  s transaction. *
d3a0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
d3b0: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
d3c0: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
d3d0: 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73  d immediate cons
d3e0: 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
d3f0: 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20   *pnBytesFreed; 
d400: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
d410: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65   not NULL, incre
d420: 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46  ment this in DbF
d430: 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66 20  ree() */.#ifdef 
d440: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
d450: 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a  LOCK_NOTIFY.  /*
d460: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   The following v
d470: 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c  ariables are all
d480: 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74 68   protected by th
d490: 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52 0a  e STATIC_MASTER.
d4a0: 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20    ** mutex, not 
d4b0: 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  by sqlite3.mutex
d4c0: 2e 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20  . They are used 
d4d0: 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66  by code in notif
d4e0: 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  y.c..  **.  ** W
d4f0: 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e  hen X.pUnlockCon
d500: 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74  nection==Y, that
d510: 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69 73   means that X is
d520: 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20 74   waiting for Y t
d530: 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f  o.  ** unlock so
d540: 20 74 68 61 74 20 69 74 20 63 61 6e 20 70 72 6f   that it can pro
d550: 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ceed..  **.  ** 
d560: 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67  When X.pBlocking
d570: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
d580: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 73  hat means that s
d590: 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58 20  omething that X 
d5a0: 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65 64  tried.  ** tried
d5b0: 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79 20   to do recently 
d5c0: 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20 53  failed with an S
d5d0: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72  QLITE_LOCKED err
d5e0: 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a  or due to locks.
d5f0: 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a    ** held by Y..
d600: 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a    */.  sqlite3 *
d610: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
d620: 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69  ion; /* Connecti
d630: 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64 20 53  on that caused S
d640: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a  QLITE_LOCKED */.
d650: 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f    sqlite3 *pUnlo
d660: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20  ckConnection;   
d670: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
d680: 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20 66  ction to watch f
d690: 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76  or unlock */.  v
d6a0: 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b  oid *pUnlockArg;
d6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6c0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
d6d0: 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66   to xUnlockNotif
d6e0: 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55  y */.  void (*xU
d6f0: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69  nlockNotify)(voi
d700: 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20  d **, int);  /* 
d710: 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61  Unlock notify ca
d720: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69  llback */.  sqli
d730: 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65  te3 *pNextBlocke
d740: 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  d;        /* Nex
d750: 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c  t in list of all
d760: 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74   blocked connect
d770: 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  ions */.#endif.#
d780: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
d790: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
d7a0: 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  .  sqlite3_usera
d7b0: 75 74 68 20 61 75 74 68 3b 20 20 20 20 20 20 20  uth auth;       
d7c0: 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74   /* User authent
d7d0: 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  ication informat
d7e0: 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  ion */.#endif.};
d7f0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
d800: 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65 20  to discover the 
d810: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64 61  encoding of a da
d820: 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69  tabase..*/.#defi
d830: 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28 64 62  ne SCHEMA_ENC(db
d840: 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e  ) ((db)->aDb[0].
d850: 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 23 64  pSchema->enc).#d
d860: 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20 20 20  efine ENC(db)   
d870: 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e 63 29       ((db)->enc)
d880: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
d890: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
d8a0: 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a  sqlite3.flags..*
d8b0: 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
d8c0: 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64  raints (enforced
d8d0: 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
d8e0: 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 46  **      SQLITE_F
d8f0: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 3d 3d 20  ullFSync     == 
d900: 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43 0a  PAGER_FULLFSYNC.
d910: 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43  **      SQLITE_C
d920: 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 3d 3d 20  kptFullFSync == 
d930: 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46  PAGER_CKPT_FULLF
d940: 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c  SYNC.**      SQL
d950: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20  ITE_CacheSpill  
d960: 20 20 3d 3d 20 50 41 47 45 52 5f 43 41 43 48 45    == PAGER_CACHE
d970: 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65 66 69 6e  _SPILL.*/.#defin
d980: 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63  e SQLITE_WriteSc
d990: 68 65 6d 61 20 20 20 20 30 78 30 30 30 30 30 30  hema    0x000000
d9a0: 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64  01  /* OK to upd
d9b0: 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45  ate SQLITE_MASTE
d9c0: 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  R */.#define SQL
d9d0: 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d  ITE_LegacyFileFm
d9e0: 74 20 20 30 78 30 30 30 30 30 30 30 32 20 20 2f  t  0x00000002  /
d9f0: 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61 74  * Create new dat
da00: 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74  abases in format
da10: 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51   1 */.#define SQ
da20: 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65  LITE_FullColName
da30: 73 20 20 20 30 78 30 30 30 30 30 30 30 34 20 20  s   0x00000004  
da40: 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c  /* Show full col
da50: 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c  umn names on SEL
da60: 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ECT */.#define S
da70: 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20  QLITE_FullFSync 
da80: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 38 20       0x00000008 
da90: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
daa0: 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e  nc on the backen
dab0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
dac0: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
dad0: 63 20 20 30 78 30 30 30 30 30 30 31 30 20 20 2f  c  0x00000010  /
dae0: 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63  * Use full fsync
daf0: 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20   for checkpoint 
db00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
db10: 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20  E_CacheSpill    
db20: 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20   0x00000020  /* 
db30: 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65  OK to spill page
db40: 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  r cache */.#defi
db50: 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43  ne SQLITE_ShortC
db60: 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30  olNames  0x00000
db70: 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f  040  /* Show sho
db80: 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73  rt columns names
db90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dba0: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20  TE_CountRows    
dbb0: 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a    0x00000080  /*
dbc0: 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e   Count rows chan
dbd0: 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a  ged by INSERT, *
dbe0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
dbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
dc10: 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
dc20: 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f  TE and return */
dc30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
dc60: 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20  the count using 
dc70: 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23  a callback. */.#
dc80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75  define SQLITE_Nu
dc90: 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30  llCallback   0x0
dca0: 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f  0000100  /* Invo
dcb0: 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  ke the callback 
dcc0: 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20  once if the */. 
dcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcf0: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65           /*   re
dd00: 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74  sult set is empt
dd10: 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  y */.#define SQL
dd20: 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73  ITE_IgnoreChecks
dd30: 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20 2f     0x00000200  /
dd40: 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65  * Do not enforce
dd50: 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
dd60: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
dd70: 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69  LITE_ReadUncommi
dd80: 74 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20  t   0x00000400  
dd90: 2f 2a 20 52 45 41 44 20 55 4e 43 4f 4d 4d 49 54  /* READ UNCOMMIT
dda0: 54 45 44 20 69 6e 20 73 68 61 72 65 64 2d 63 61  TED in shared-ca
ddb0: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
ddc0: 51 4c 49 54 45 5f 4e 6f 43 6b 70 74 4f 6e 43 6c  QLITE_NoCkptOnCl
ddd0: 6f 73 65 20 20 30 78 30 30 30 30 30 38 30 30 20  ose  0x00000800 
dde0: 20 2f 2a 20 4e 6f 20 63 68 65 63 6b 70 6f 69 6e   /* No checkpoin
ddf0: 74 20 6f 6e 20 63 6c 6f 73 65 28 29 2f 44 45 54  t on close()/DET
de00: 41 43 48 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ACH */.#define S
de10: 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64  QLITE_ReverseOrd
de20: 65 72 20 20 20 30 78 30 30 30 30 31 30 30 30 20  er   0x00001000 
de30: 20 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72   /* Reverse unor
de40: 64 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f  dered SELECTs */
de50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
de60: 52 65 63 54 72 69 67 67 65 72 73 20 20 20 20 30  RecTriggers    0
de70: 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 45 6e  x00002000  /* En
de80: 61 62 6c 65 20 72 65 63 75 72 73 69 76 65 20 74  able recursive t
de90: 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69  riggers */.#defi
dea0: 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67  ne SQLITE_Foreig
deb0: 6e 4b 65 79 73 20 20 20 20 30 78 30 30 30 30 34  nKeys    0x00004
dec0: 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20  000  /* Enforce 
ded0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
dee0: 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66  traints  */.#def
def0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49  ine SQLITE_AutoI
df00: 6e 64 65 78 20 20 20 20 20 20 30 78 30 30 30 30  ndex      0x0000
df10: 38 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  8000  /* Enable 
df20: 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65  automatic indexe
df30: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
df40: 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f  ITE_LoadExtensio
df50: 6e 20 20 30 78 30 30 30 31 30 30 30 30 20 20 2f  n  0x00010000  /
df60: 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78  * Enable load_ex
df70: 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  tension */.#defi
df80: 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78  ne SQLITE_LoadEx
df90: 74 46 75 6e 63 20 20 20 20 30 78 30 30 30 32 30  tFunc    0x00020
dfa0: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c  000  /* Enable l
dfb0: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20  oad_extension() 
dfc0: 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  SQL func */.#def
dfd0: 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c  ine SQLITE_Enabl
dfe0: 65 54 72 69 67 67 65 72 20 20 30 78 30 30 30 34  eTrigger  0x0004
dff0: 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f  0000  /* True to
e000: 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73   enable triggers
e010: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e020: 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20 20  TE_DeferFKs     
e030: 20 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a    0x00080000  /*
e040: 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f   Defer all FK co
e050: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
e060: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
e070: 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 30 31  yOnly      0x001
e080: 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62 6c  00000  /* Disabl
e090: 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67  e database chang
e0a0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
e0b0: 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20  LITE_CellSizeCk 
e0c0: 20 20 20 20 30 78 30 30 32 30 30 30 30 30 20 20      0x00200000  
e0d0: 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20 63  /* Check btree c
e0e0: 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61  ell sizes on loa
e0f0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
e100: 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69 7a 65  ITE_Fts3Tokenize
e110: 72 20 20 30 78 30 30 34 30 30 30 30 30 20 20 2f  r  0x00400000  /
e120: 2a 20 45 6e 61 62 6c 65 20 66 74 73 33 5f 74 6f  * Enable fts3_to
e130: 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a 23 64  kenizer(2) */.#d
e140: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61  efine SQLITE_Ena
e150: 62 6c 65 51 50 53 47 20 20 20 20 20 30 78 30 30  bleQPSG     0x00
e160: 38 30 30 30 30 30 20 20 2f 2a 20 51 75 65 72 79  800000  /* Query
e170: 20 50 6c 61 6e 6e 65 72 20 53 74 61 62 69 6c 69   Planner Stabili
e180: 74 79 20 47 75 61 72 61 6e 74 65 65 2a 2f 0a 23  ty Guarantee*/.#
e190: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72  define SQLITE_Tr
e1a0: 69 67 67 65 72 45 51 50 20 20 20 20 20 30 78 30  iggerEQP     0x0
e1b0: 31 30 30 30 30 30 30 20 20 2f 2a 20 53 68 6f 77  1000000  /* Show
e1c0: 20 74 72 69 67 67 65 72 20 45 58 50 4c 41 49 4e   trigger EXPLAIN
e1d0: 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23   QUERY PLAN */.#
e1e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
e1f0: 73 65 74 44 61 74 61 62 61 73 65 20 20 30 78 30  setDatabase  0x0
e200: 32 30 30 30 30 30 30 20 20 2f 2a 20 52 65 73 65  2000000  /* Rese
e210: 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 2a  t the database *
e220: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e230: 5f 4c 65 67 61 63 79 41 6c 74 65 72 20 20 20 20  _LegacyAlter    
e240: 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20 4c  0x04000000  /* L
e250: 65 67 61 63 79 20 41 4c 54 45 52 20 54 41 42 4c  egacy ALTER TABL
e260: 45 20 62 65 68 61 76 69 6f 75 72 20 2a 2f 0a 0a  E behaviour */..
e270: 2f 2a 20 46 6c 61 67 73 20 75 73 65 64 20 6f 6e  /* Flags used on
e280: 6c 79 20 69 66 20 64 65 62 75 67 67 69 6e 67 20  ly if debugging 
e290: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
e2a0: 5f 44 45 42 55 47 0a 23 64 65 66 69 6e 65 20 53  _DEBUG.#define S
e2b0: 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20  QLITE_SqlTrace  
e2c0: 20 20 20 20 20 30 78 30 38 30 30 30 30 30 30 20       0x08000000 
e2d0: 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20   /* Debug print 
e2e0: 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74  SQL as it execut
e2f0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
e300: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
e310: 20 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20      0x10000000  
e320: 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67  /* Debug listing
e330: 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61  s of VDBE progra
e340: 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ms */.#define SQ
e350: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 20  LITE_VdbeTrace  
e360: 20 20 20 20 30 78 32 30 30 30 30 30 30 30 20 20      0x20000000  
e370: 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63 65  /* True to trace
e380: 20 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20   VDBE execution 
e390: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e3a0: 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65  E_VdbeAddopTrace
e3b0: 20 30 78 34 30 30 30 30 30 30 30 20 20 2f 2a 20   0x40000000  /* 
e3c0: 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62  Trace sqlite3Vdb
e3d0: 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a  eAddOp() calls *
e3e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e3f0: 5f 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20  _VdbeEQP        
e400: 30 78 38 30 30 30 30 30 30 30 20 20 2f 2a 20 44  0x80000000  /* D
e410: 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45  ebug EXPLAIN QUE
e420: 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 65 6e 64 69  RY PLAN */.#endi
e430: 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  f../*.** Allowed
e440: 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69   values for sqli
e450: 74 65 33 2e 6d 44 62 46 6c 61 67 73 0a 2a 2f 0a  te3.mDbFlags.*/.
e460: 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 53  #define DBFLAG_S
e470: 63 68 65 6d 61 43 68 61 6e 67 65 20 20 20 30 78  chemaChange   0x
e480: 30 30 30 31 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69  0001  /* Uncommi
e490: 74 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20  tted Hash table 
e4a0: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
e4b0: 6e 65 20 44 42 46 4c 41 47 5f 50 72 65 66 65 72  ne DBFLAG_Prefer
e4c0: 42 75 69 6c 74 69 6e 20 20 30 78 30 30 30 32 20  Builtin  0x0002 
e4d0: 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74   /* Preference t
e4e0: 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73  o built-in funcs
e4f0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c   */.#define DBFL
e500: 41 47 5f 56 61 63 75 75 6d 20 20 20 20 20 20 20  AG_Vacuum       
e510: 20 20 30 78 30 30 30 34 20 20 2f 2a 20 43 75 72    0x0004  /* Cur
e520: 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55  rently in a VACU
e530: 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  UM */.#define DB
e540: 46 4c 41 47 5f 53 63 68 65 6d 61 4b 6e 6f 77 6e  FLAG_SchemaKnown
e550: 4f 6b 20 20 30 78 30 30 30 38 20 20 2f 2a 20 53  Ok  0x0008  /* S
e560: 63 68 65 6d 61 20 69 73 20 6b 6e 6f 77 6e 20 74  chema is known t
e570: 6f 20 62 65 20 76 61 6c 69 64 20 2a 2f 0a 0a 2f  o be valid */../
e580: 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65  *.** Bits of the
e590: 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c   sqlite3.dbOptFl
e5a0: 61 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61  ags field that a
e5b0: 72 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a  re used by the.*
e5c0: 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
e5d0: 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45  ontrol(SQLITE_TE
e5e0: 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54  STCTRL_OPTIMIZAT
e5f0: 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66  IONS,...) interf
e600: 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74  ace to.** select
e610: 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61  ively disable va
e620: 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69  rious optimizati
e630: 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ons..*/.#define 
e640: 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74  SQLITE_QueryFlat
e650: 74 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f  tener 0x0001   /
e660: 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69  * Query flatteni
e670: 6e 67 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ng */.          
e680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e690: 2f 2a 20 20 30 78 30 30 30 32 20 20 20 61 76 61  /*  0x0002   ava
e6a0: 69 6c 61 62 6c 65 20 66 6f 72 20 72 65 75 73 65  ilable for reuse
e6b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e6c0: 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20  TE_GroupByOrder 
e6d0: 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52    0x0004   /* GR
e6e0: 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f  OUPBY cover of O
e6f0: 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e  RDERBY */.#defin
e700: 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f  e SQLITE_FactorO
e710: 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20  utConst 0x0008  
e720: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63   /* Constant fac
e730: 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  toring */.#defin
e740: 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63  e SQLITE_Distinc
e750: 74 4f 70 74 20 20 20 20 30 78 30 30 31 30 20 20  tOpt    0x0010  
e760: 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69   /* DISTINCT usi
e770: 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ng indexes */.#d
e780: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76  efine SQLITE_Cov
e790: 65 72 49 64 78 53 63 61 6e 20 20 20 30 78 30 30  erIdxScan   0x00
e7a0: 32 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67  20   /* Covering
e7b0: 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a   index scans */.
e7c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f  #define SQLITE_O
e7d0: 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78  rderByIdxJoin 0x
e7e0: 30 30 34 30 20 20 20 2f 2a 20 4f 52 44 45 52 20  0040   /* ORDER 
e7f0: 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20  BY of joins via 
e800: 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
e810: 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69   SQLITE_Transiti
e820: 76 65 20 20 20 20 20 30 78 30 30 38 30 20 20 20  ve     0x0080   
e830: 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f  /* Transitive co
e840: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
e850: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74  fine SQLITE_Omit
e860: 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 31 30  NoopJoin   0x010
e870: 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73  0   /* Omit unus
e880: 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69  ed tables in joi
e890: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
e8a0: 4c 49 54 45 5f 43 6f 75 6e 74 4f 66 56 69 65 77  LITE_CountOfView
e8b0: 20 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20      0x0200   /* 
e8c0: 54 68 65 20 63 6f 75 6e 74 2d 6f 66 2d 76 69 65  The count-of-vie
e8d0: 77 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a  w optimization *
e8e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e8f0: 5f 43 75 72 73 6f 72 48 69 6e 74 73 20 20 20 20  _CursorHints    
e900: 30 78 30 34 30 30 20 20 20 2f 2a 20 41 64 64 20  0x0400   /* Add 
e910: 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74 20 6f 70  OP_CursorHint op
e920: 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  codes */.#define
e930: 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20   SQLITE_Stat34  
e940: 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20         0x0800   
e950: 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20  /* Use STAT3 or 
e960: 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 20 20  STAT4 data */.  
e970: 20 2f 2a 20 54 48 33 20 65 78 70 65 63 74 73 20   /* TH3 expects 
e980: 74 68 65 20 53 74 61 74 33 34 20 20 5e 5e 5e 5e  the Stat34  ^^^^
e990: 5e 5e 20 76 61 6c 75 65 20 74 6f 20 62 65 20 30  ^^ value to be 0
e9a0: 78 30 38 30 30 2e 20 20 44 6f 6e 27 74 20 63 68  x0800.  Don't ch
e9b0: 61 6e 67 65 20 69 74 20 2a 2f 0a 23 64 65 66 69  ange it */.#defi
e9c0: 6e 65 20 53 51 4c 49 54 45 5f 50 75 73 68 44 6f  ne SQLITE_PushDo
e9d0: 77 6e 20 20 20 20 20 20 20 30 78 31 30 30 30 20  wn       0x1000 
e9e0: 20 20 2f 2a 20 54 68 65 20 70 75 73 68 2d 64 6f    /* The push-do
e9f0: 77 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  wn optimization 
ea00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ea10: 45 5f 53 69 6d 70 6c 69 66 79 4a 6f 69 6e 20 20  E_SimplifyJoin  
ea20: 20 30 78 32 30 30 30 20 20 20 2f 2a 20 43 6f 6e   0x2000   /* Con
ea30: 76 65 72 74 20 4c 45 46 54 20 4a 4f 49 4e 20 74  vert LEFT JOIN t
ea40: 6f 20 4a 4f 49 4e 20 2a 2f 0a 23 64 65 66 69 6e  o JOIN */.#defin
ea50: 65 20 53 51 4c 49 54 45 5f 53 6b 69 70 53 63 61  e SQLITE_SkipSca
ea60: 6e 20 20 20 20 20 20 20 30 78 34 30 30 30 20 20  n       0x4000  
ea70: 20 2f 2a 20 53 6b 69 70 2d 73 63 61 6e 73 20 2a   /* Skip-scans *
ea80: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ea90: 5f 50 72 6f 70 61 67 61 74 65 43 6f 6e 73 74 20  _PropagateConst 
eaa0: 30 78 38 30 30 30 20 20 20 2f 2a 20 54 68 65 20  0x8000   /* The 
eab0: 63 6f 6e 73 74 61 6e 74 20 70 72 6f 70 61 67 61  constant propaga
eac0: 74 69 6f 6e 20 6f 70 74 20 2a 2f 0a 23 64 65 66  tion opt */.#def
ead0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70  ine SQLITE_AllOp
eae0: 74 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66  ts        0xffff
eaf0: 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69     /* All optimi
eb00: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  zations */../*.*
eb10: 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73  * Macros for tes
eb20: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
eb30: 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  not optimization
eb40: 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72  s are enabled or
eb50: 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64   disabled..*/.#d
eb60: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
eb70: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
eb80: 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62  ask)  (((db)->db
eb90: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
eba0: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74  !=0).#define Opt
ebb0: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
ebc0: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28  (db, mask)   (((
ebd0: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
ebe0: 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a  (mask))==0)../*.
ebf0: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
ec00: 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f  f it OK to facto
ec10: 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  r constant expre
ec20: 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20  ssions into the 
ec30: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a  initialization.*
ec40: 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75  * code. The argu
ec50: 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73 65 20  ment is a Parse 
ec60: 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63  object for the c
ec70: 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a  ode generator..*
ec80: 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46  /.#define ConstF
ec90: 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d  actorOk(P) ((P)-
eca0: 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a  >okConstFactor).
ecb0: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
ecc0: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73  values for the s
ecd0: 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c  qlite.magic fiel
ece0: 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  d..** The number
ecf0: 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61  s are obtained a
ed00: 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76  t random and hav
ed10: 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61  e no special mea
ed20: 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74  ning, other.** t
ed30: 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e  han being distin
ed40: 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74  ct from one anot
ed50: 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
ed60: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45  SQLITE_MAGIC_OPE
ed70: 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37  N     0xa029a697
ed80: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
ed90: 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   open */.#define
eda0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c   SQLITE_MAGIC_CL
edb0: 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33  OSED   0x9f3c2d3
edc0: 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  3  /* Database i
edd0: 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66  s closed */.#def
ede0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
edf0: 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37  _SICK     0x4b77
ee00: 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61  1290  /* Error a
ee10: 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73  nd awaiting clos
ee20: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
ee30: 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20  ITE_MAGIC_BUSY  
ee40: 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f     0xf03b7906  /
ee50: 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65  * Database curre
ee60: 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23  ntly in use */.#
ee70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
ee80: 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62  GIC_ERROR    0xb
ee90: 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53  5357930  /* An S
eea0: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72  QLITE_MISUSE err
eeb0: 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23  or occurred */.#
eec0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
eed0: 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36  GIC_ZOMBIE   0x6
eee0: 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73  4cffc7f  /* Clos
eef0: 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61 74  e with last stat
ef00: 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a  ement close */..
ef10: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66  /*.** Each SQL f
ef20: 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e  unction is defin
ef30: 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
ef40: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
ef50: 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
ef60: 20 20 46 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69    For global bui
ef70: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20  lt-in functions 
ef80: 28 65 78 3a 20 73 75 62 73 74 72 28 29 2c 20 6d  (ex: substr(), m
ef90: 61 78 28 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a  ax(), count()).*
efa0: 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  * a pointer to t
efb0: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
efc0: 20 68 65 6c 64 20 69 6e 20 74 68 65 20 73 71 6c   held in the sql
efd0: 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74  ite3BuiltinFunct
efe0: 69 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  ions object..** 
eff0: 46 6f 72 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69  For per-connecti
f000: 6f 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64  on application-d
f010: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  efined functions
f020: 2c 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  , a pointer to t
f030: 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  his.** structure
f040: 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20   is held in the 
f050: 64 62 2d 3e 61 48 61 73 68 20 68 61 73 68 20 74  db->aHash hash t
f060: 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  able..**.** The 
f070: 75 2e 70 48 61 73 68 20 66 69 65 6c 64 20 69 73  u.pHash field is
f080: 20 75 73 65 64 20 62 79 20 74 68 65 20 67 6c 6f   used by the glo
f090: 62 61 6c 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20  bal built-ins.  
f0a0: 54 68 65 20 75 2e 70 44 65 73 74 72 75 63 74 6f  The u.pDestructo
f0b0: 72 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 75 73  r.** field is us
f0c0: 65 64 20 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63  ed by per-connec
f0d0: 74 69 6f 6e 20 61 70 70 2d 64 65 66 20 66 75 6e  tion app-def fun
f0e0: 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63  ctions..*/.struc
f0f0: 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 38  t FuncDef {.  i8
f100: 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   nArg;          
f110: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
f120: 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d  arguments.  -1 m
f130: 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a  eans unlimited *
f140: 2f 0a 20 20 75 33 32 20 66 75 6e 63 46 6c 61 67  /.  u32 funcFlag
f150: 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65  s;       /* Some
f160: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
f170: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f  SQLITE_FUNC_* */
f180: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
f190: 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20  ta;     /* User 
f1a0: 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a  data parameter *
f1b0: 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65  /.  FuncDef *pNe
f1c0: 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
f1d0: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73   function with s
f1e0: 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f  ame name */.  vo
f1f0: 69 64 20 28 2a 78 53 46 75 6e 63 29 28 73 71 6c  id (*xSFunc)(sql
f200: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
f210: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
f220: 2a 29 3b 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61  *); /* func or a
f230: 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69  gg-step */.  voi
f240: 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73  d (*xFinalize)(s
f250: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
f260: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
f270: 20 20 20 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69     /* Agg finali
f280: 7a 65 72 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  zer */.  void (*
f290: 78 56 61 6c 75 65 29 28 73 71 6c 69 74 65 33 5f  xValue)(sqlite3_
f2a0: 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20  context*);      
f2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f2c0: 2a 20 43 75 72 72 65 6e 74 20 61 67 67 20 76 61  * Current agg va
f2d0: 6c 75 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  lue */.  void (*
f2e0: 78 49 6e 76 65 72 73 65 29 28 73 71 6c 69 74 65  xInverse)(sqlite
f2f0: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
f300: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
f310: 20 2f 2a 20 69 6e 76 65 72 73 65 20 61 67 67 2d   /* inverse agg-
f320: 73 74 65 70 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  step */.  const 
f330: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f  char *zName;   /
f340: 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68  * SQL name of th
f350: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20  e function. */. 
f360: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 46 75 6e   union {.    Fun
f370: 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20  cDef *pHash;    
f380: 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61    /* Next with a
f390: 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20   different name 
f3a0: 62 75 74 20 74 68 65 20 73 61 6d 65 20 68 61 73  but the same has
f3b0: 68 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 73  h */.    FuncDes
f3c0: 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
f3d0: 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72  ctor;   /* Refer
f3e0: 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73  ence counted des
f3f0: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
f400: 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f   */.  } u;.};../
f410: 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
f420: 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73  ure encapsulates
f430: 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e   a user-function
f440: 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c   destructor call
f450: 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66  back (as.** conf
f460: 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65  igured using cre
f470: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
f480: 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e  )) and a referen
f490: 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e  ce counter. When
f4a0: 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74  .** create_funct
f4b0: 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c  ion_v2() is call
f4c0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66  ed to create a f
f4d0: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64  unction with a d
f4e0: 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20  estructor,.** a 
f4f0: 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66  single object of
f500: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
f510: 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73  located. FuncDes
f520: 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20  tructor.nRef is 
f530: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
f540: 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20  mber of FuncDef 
f550: 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65 64 20  objects created 
f560: 28 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20  (either 1 or 3, 
f570: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
f580: 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74  ther.** or not t
f590: 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e 63  he specified enc
f5a0: 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f  oding is SQLITE_
f5b0: 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65  ANY). The FuncDe
f5c0: 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a  f.pDestructor.**
f5d0: 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20   member of each 
f5e0: 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44  of the new FuncD
f5f0: 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65  ef objects is se
f600: 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  t to point to th
f610: 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46  e allocated.** F
f620: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a  uncDestructor..*
f630: 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c  *.** Thereafter,
f640: 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65   when one of the
f650: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
f660: 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65   is deleted, the
f670: 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f   reference.** co
f680: 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65  unt on this obje
f690: 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65  ct is decremente
f6a0: 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63 68  d. When it reach
f6b0: 65 73 20 30 2c 20 74 68 65 20 64 65 73 74 72 75  es 0, the destru
f6c0: 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b  ctor.** is invok
f6d0: 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44  ed and the FuncD
f6e0: 65 73 74 72 75 63 74 6f 72 20 73 74 72 75 63 74  estructor struct
f6f0: 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74  ure freed..*/.st
f700: 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63  ruct FuncDestruc
f710: 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66  tor {.  int nRef
f720: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  ;.  void (*xDest
f730: 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20  roy)(void *);.  
f740: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
f750: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  .};../*.** Possi
f760: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46  ble values for F
f770: 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e  uncDef.flags.  N
f780: 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45  ote that the _LE
f790: 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46  NGTH and _TYPEOF
f7a0: 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20  .** values must 
f7b0: 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50  correspond to OP
f7c0: 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61  FLAG_LENGTHARG a
f7d0: 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  nd OPFLAG_TYPEOF
f7e0: 41 52 47 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c  ARG.  And.** SQL
f7f0: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
f800: 54 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61  T must be the sa
f810: 6d 65 20 61 73 20 53 51 4c 49 54 45 5f 44 45 54  me as SQLITE_DET
f820: 45 52 4d 49 4e 49 53 54 49 43 2e 20 20 54 68 65  ERMINISTIC.  The
f830: 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74  re.** are assert
f840: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  () statements in
f850: 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72   the code to ver
f860: 69 66 79 20 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20  ify this..**.** 
f870: 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
f880: 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
f890: 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
f8a0: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49    SQLITE_FUNC_MI
f8b0: 4e 4d 41 58 20 20 20 20 3d 3d 20 20 4e 43 5f 4d  NMAX    ==  NC_M
f8c0: 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 3d 3d  inMaxAgg      ==
f8d0: 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a   SF_MinMaxAgg.**
f8e0: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
f8f0: 5f 4c 45 4e 47 54 48 20 20 20 20 3d 3d 20 20 4f  _LENGTH    ==  O
f900: 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 0a  PFLAG_LENGTHARG.
f910: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
f920: 4e 43 5f 54 59 50 45 4f 46 20 20 20 20 3d 3d 20  NC_TYPEOF    == 
f930: 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
f940: 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  G.**     SQLITE_
f950: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 20 3d  FUNC_CONSTANT  =
f960: 3d 20 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d  =  SQLITE_DETERM
f970: 49 4e 49 53 54 49 43 20 66 72 6f 6d 20 74 68 65  INISTIC from the
f980: 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49   API.**     SQLI
f990: 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20  TE_FUNC_ENCMASK 
f9a0: 20 20 64 65 70 65 6e 64 73 20 6f 6e 20 53 51 4c    depends on SQL
f9b0: 49 54 45 5f 55 54 46 2a 20 6d 61 63 72 6f 73 20  ITE_UTF* macros 
f9c0: 69 6e 20 74 68 65 20 41 50 49 0a 2a 2f 0a 23 64  in the API.*/.#d
f9d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f9e0: 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 30  C_ENCMASK  0x000
f9f0: 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38  3 /* SQLITE_UTF8
fa00: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  , SQLITE_UTF16BE
fa10: 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23   or UTF16LE */.#
fa20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
fa30: 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30  NC_LIKE     0x00
fa40: 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20  04 /* Candidate 
fa50: 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74  for the LIKE opt
fa60: 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  imization */.#de
fa70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
fa80: 5f 43 41 53 45 20 20 20 20 20 30 78 30 30 30 38  _CASE     0x0008
fa90: 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69   /* Case-sensiti
faa0: 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e  ve LIKE-type fun
fab0: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
fac0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48   SQLITE_FUNC_EPH
fad0: 45 4d 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20  EM    0x0010 /* 
fae0: 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65  Ephemeral.  Dele
faf0: 74 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a  te with VDBE */.
fb00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
fb10: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30  UNC_NEEDCOLL 0x0
fb20: 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65  020 /* sqlite3Ge
fb30: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d  tFuncCollSeq() m
fb40: 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f  ight be called*/
fb50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fb60: 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78  FUNC_LENGTH   0x
fb70: 30 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0040 /* Built-in
fb80: 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69   length() functi
fb90: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
fba0: 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
fbb0: 20 20 20 30 78 30 30 38 30 20 2f 2a 20 42 75 69     0x0080 /* Bui
fbc0: 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66  lt-in typeof() f
fbd0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
fbe0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
fbf0: 4f 55 4e 54 20 20 20 20 30 78 30 31 30 30 20 2f  OUNT    0x0100 /
fc00: 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74  * Built-in count
fc10: 28 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f  (*) aggregate */
fc20: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fc30: 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78  FUNC_COALESCE 0x
fc40: 30 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0200 /* Built-in
fc50: 20 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69   coalesce() or i
fc60: 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69  fnull() */.#defi
fc70: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55  ne SQLITE_FUNC_U
fc80: 4e 4c 49 4b 45 4c 59 20 30 78 30 34 30 30 20 2f  NLIKELY 0x0400 /
fc90: 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b  * Built-in unlik
fca0: 65 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ely() function *
fcb0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fcc0: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30  _FUNC_CONSTANT 0
fcd0: 78 30 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e  x0800 /* Constan
fce0: 74 20 69 6e 70 75 74 73 20 67 69 76 65 20 61 20  t inputs give a 
fcf0: 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75 74 20  constant output 
fd00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fd10: 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20  E_FUNC_MINMAX   
fd20: 30 78 31 30 30 30 20 2f 2a 20 54 72 75 65 20 66  0x1000 /* True f
fd30: 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78  or min() and max
fd40: 28 29 20 61 67 67 72 65 67 61 74 65 73 20 2a 2f  () aggregates */
fd50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fd60: 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78  FUNC_SLOCHNG  0x
fd70: 32 30 30 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68  2000 /* "Slow Ch
fd80: 61 6e 67 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e  ange". Value con
fd90: 73 74 61 6e 74 20 64 75 72 69 6e 67 20 61 0a 20  stant during a. 
fda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdc0: 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65     ** single que
fdd0: 72 79 20 2d 20 6d 69 67 68 74 20 63 68 61 6e 67  ry - might chang
fde0: 65 20 6f 76 65 72 20 74 69 6d 65 20 2a 2f 0a 23  e over time */.#
fdf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
fe00: 4e 43 5f 41 46 46 49 4e 49 54 59 20 30 78 34 30  NC_AFFINITY 0x40
fe10: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 61  00 /* Built-in a
fe20: 66 66 69 6e 69 74 79 28 29 20 66 75 6e 63 74 69  ffinity() functi
fe30: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
fe40: 4c 49 54 45 5f 46 55 4e 43 5f 4f 46 46 53 45 54  LITE_FUNC_OFFSET
fe50: 20 20 20 30 78 38 30 30 30 20 2f 2a 20 42 75 69     0x8000 /* Bui
fe60: 6c 74 2d 69 6e 20 73 71 6c 69 74 65 5f 6f 66 66  lt-in sqlite_off
fe70: 73 65 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  set() function *
fe80: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fe90: 5f 46 55 4e 43 5f 57 49 4e 44 4f 57 20 20 30 78  _FUNC_WINDOW  0x
fea0: 31 30 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  10000 /* Built-i
feb0: 6e 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79 20 66 75  n window-only fu
fec0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
fed0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 57 49  e SQLITE_FUNC_WI
fee0: 4e 44 4f 57 5f 53 49 5a 45 20 20 30 78 32 30 30  NDOW_SIZE  0x200
fef0: 30 30 20 20 2f 2a 20 52 65 71 75 69 72 65 73 20  00  /* Requires 
ff00: 70 61 72 74 69 74 69 6f 6e 20 73 69 7a 65 20 61  partition size a
ff10: 73 20 61 72 67 2e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  s arg. */../*.**
ff20: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
ff30: 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e  hree macros, FUN
ff40: 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e  CTION(), LIKEFUN
ff50: 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54  C() and AGGREGAT
ff60: 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  E() are.** used 
ff70: 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e  to create the in
ff80: 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74  itializers for t
ff90: 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  he FuncDef struc
ffa0: 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46  tures..**.**   F
ffb0: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
ffc0: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
ffd0: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
ffe0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
fff0: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
10000 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
10010 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a  unction zName.**
10020 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
10030 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
10040 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
10050 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
10060 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
10070 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
10080 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
10090 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
100a0 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
100b0 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
100c0 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
100d0 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
100e0 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20  function. If.** 
100f0 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43      argument bNC
10100 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74   is true, then t
10110 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  he SQLITE_FUNC_N
10120 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20  EEDCOLL flag is 
10130 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55  set..**.**   VFU
10140 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
10150 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
10160 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
10170 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
10180 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
10190 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
101a0 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20  ANT flag..**.** 
101b0 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d    DFUNCTION(zNam
101c0 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
101d0 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
101e0 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20    Like FUNCTION 
101f0 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20  except it omits 
10200 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
10210 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61 6e  CONSTANT flag an
10220 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74 68  d.**     adds th
10230 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  e SQLITE_FUNC_SL
10240 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73 65  OCHNG flag.  Use
10250 64 20 66 6f 72 20 64 61 74 65 20 26 20 74 69 6d  d for date & tim
10260 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20  e functions.**  
10270 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73     and functions
10280 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65 72   like sqlite_ver
10290 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e 20  sion() that can 
102a0 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20  change, but not 
102b0 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20  during.**     a 
102c0 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 20 20 54  single query.  T
102d0 68 65 20 69 41 72 67 20 69 73 20 69 67 6e 6f 72  he iArg is ignor
102e0 65 64 2e 20 20 54 68 65 20 75 73 65 72 2d 64 61  ed.  The user-da
102f0 74 61 20 69 73 20 61 6c 77 61 79 73 20 73 65 74  ta is always set
10300 0a 2a 2a 20 20 20 20 20 74 6f 20 61 20 4e 55 4c  .**     to a NUL
10310 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 65 20  L pointer.  The 
10320 62 4e 43 20 70 61 72 61 6d 65 74 65 72 20 69 73  bNC parameter is
10330 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
10340 20 20 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61     PURE_DATE(zNa
10350 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10360 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
10370 20 20 20 55 73 65 64 20 66 6f 72 20 22 70 75 72     Used for "pur
10380 65 22 20 64 61 74 65 2f 74 69 6d 65 20 66 75 6e  e" date/time fun
10390 63 74 69 6f 6e 73 2c 20 74 68 69 73 20 6d 61 63  ctions, this mac
103a0 72 6f 20 69 73 20 6c 69 6b 65 20 44 46 55 4e 43  ro is like DFUNC
103b0 54 49 4f 4e 0a 2a 2a 20 20 20 20 20 65 78 63 65  TION.**     exce
103c0 70 74 20 74 68 61 74 20 69 74 20 64 6f 65 73 20  pt that it does 
103d0 73 65 74 20 74 68 65 20 53 51 4c 49 54 45 5f 46  set the SQLITE_F
103e0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61  UNC_CONSTANT fla
103f0 67 73 2e 20 20 69 41 72 67 20 69 73 0a 2a 2a 20  gs.  iArg is.** 
10400 20 20 20 20 69 67 6e 6f 72 65 64 20 61 6e 64 20      ignored and 
10410 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 66 6f  the user-data fo
10420 72 20 74 68 65 73 65 20 66 75 6e 63 74 69 6f 6e  r these function
10430 73 20 69 73 20 73 65 74 20 74 6f 20 61 6e 20 0a  s is set to an .
10440 2a 2a 20 20 20 20 20 61 72 62 69 74 72 61 72 79  **     arbitrary
10450 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f 69 6e 74 65   non-NULL pointe
10460 72 2e 20 20 54 68 65 20 62 4e 43 20 70 61 72 61  r.  The bNC para
10470 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65  meter is not use
10480 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45  d..**.**   AGGRE
10490 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  GATE(zName, nArg
104a0 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74  , iArg, bNC, xSt
104b0 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20  ep, xFinal).**  
104c0 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
104d0 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66  e an aggregate f
104e0 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
104f0 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  on implemented b
10500 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66  y.**     the C f
10510 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61  unctions xStep a
10520 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66  nd xFinal. The f
10530 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65  irst four parame
10540 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20  ters.**     are 
10550 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74  interpreted in t
10560 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74  he same way as t
10570 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d  he first 4 param
10580 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20  eters to.**     
10590 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a  FUNCTION()..**.*
105a0 2a 20 20 20 57 46 55 4e 43 54 49 4f 4e 28 7a 4e  *   WFUNCTION(zN
105b0 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
105c0 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20   xStep, xFinal, 
105d0 78 56 61 6c 75 65 2c 20 78 49 6e 76 65 72 73 65  xValue, xInverse
105e0 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
105f0 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65   create an aggre
10600 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65  gate function de
10610 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  finition impleme
10620 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74  nted by.**     t
10630 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78  he C functions x
10640 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e  Step and xFinal.
10650 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20   The first four 
10660 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20  parameters.**   
10670 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65    are interprete
10680 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61  d in the same wa
10690 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34  y as the first 4
106a0 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a   parameters to.*
106b0 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29  *     FUNCTION()
106c0 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55  ..**.**   LIKEFU
106d0 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  NC(zName, nArg, 
106e0 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20  pArg, flags).** 
106f0 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
10700 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63  te a scalar func
10710 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
10720 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e  of a function zN
10730 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68 61 74 20  ame.**     that 
10740 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67  accepts nArg arg
10750 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d  uments and is im
10760 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63  plemented by a c
10770 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20 20 20 20  all to C.**     
10780 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e  function likeFun
10790 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67  c. Argument pArg
107a0 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76   is cast to a (v
107b0 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a  oid *) and made.
107c0 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65  **     available
107d0 20 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   as the function
107e0 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
107f0 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
10800 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e  . The.**     Fun
10810 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61  cDef.flags varia
10820 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74 68  ble is set to th
10830 65 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61  e value passed a
10840 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20  s the flags.**  
10850 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f     parameter..*/
10860 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f  .#define FUNCTIO
10870 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
10880 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10890 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
108a0 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
108b0 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
108c0 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
108d0 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
108e0 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
108f0 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
10900 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65   0, 0, 0, #zName
10910 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
10920 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
10930 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
10940 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
10950 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
10960 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
10970 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
10980 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
10990 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
109a0 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
109b0 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
109c0 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ne DFUNCTION(zNa
109d0 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
109e0 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
109f0 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
10a00 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54  NC_SLOCHNG|SQLIT
10a10 45 5f 55 54 46 38 2c 20 5c 0a 20 20 20 30 2c 20  E_UTF8, \.   0, 
10a20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
10a30 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
10a40 0a 23 64 65 66 69 6e 65 20 50 55 52 45 5f 44 41  .#define PURE_DA
10a50 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
10a60 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
10a70 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
10a80 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
10a90 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 53 51 4c  |SQLITE_UTF8|SQL
10aa0 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
10ab0 54 2c 20 5c 0a 20 20 20 28 76 6f 69 64 2a 29 26  T, \.   (void*)&
10ac0 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 30  sqlite3Config, 0
10ad0 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
10ae0 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10af0 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
10b00 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  2(zName, nArg, i
10b10 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c  Arg, bNC, xFunc,
10b20 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20   extraFlags) \. 
10b30 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55   {nArg,SQLITE_FU
10b40 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
10b50 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
10b60 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
10b70 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a  L)|extraFlags,\.
10b80 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
10b90 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
10ba0 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23  Func, 0, 0, 0, #
10bb0 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
10bc0 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f  fine STR_FUNCTIO
10bd0 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  N(zName, nArg, p
10be0 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10bf0 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
10c00 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c  TE_FUNC_SLOCHNG|
10c10 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
10c20 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
10c30 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72  DCOLL), \.   pAr
10c40 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  g, 0, xFunc, 0, 
10c50 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7d 0a  0, 0, #zName, }.
10c60 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43  #define LIKEFUNC
10c70 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
10c80 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  g, flags) \.  {n
10c90 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
10ca0 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
10cb0 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20  _UTF8|flags, \. 
10cc0 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30    (void *)arg, 0
10cd0 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30  , likeFunc, 0, 0
10ce0 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10cf0 20 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45   }.#define AGGRE
10d00 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  GATE(zName, nArg
10d10 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
10d20 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65  , xFinal, xValue
10d30 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
10d40 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c  ITE_UTF8|(nc*SQL
10d50 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
10d60 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
10d70 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c  INT_TO_PTR(arg),
10d80 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
10d90 2c 78 56 61 6c 75 65 2c 30 2c 23 7a 4e 61 6d 65  ,xValue,0,#zName
10da0 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 41  , {0}}.#define A
10db0 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c  GGREGATE2(zName,
10dc0 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
10dd0 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65  xStep, xFinal, e
10de0 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b  xtraFlags) \.  {
10df0 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
10e00 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
10e10 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
10e20 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c  aFlags, \.   SQL
10e30 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
10e40 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  rg), 0, xStep,xF
10e50 69 6e 61 6c 2c 78 46 69 6e 61 6c 2c 30 2c 23 7a  inal,xFinal,0,#z
10e60 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 23 64 65 66  Name, {0}}..#def
10e70 69 6e 65 20 57 41 47 47 52 45 47 41 54 45 28 7a  ine WAGGREGATE(z
10e80 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
10e90 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e   nc, xStep, xFin
10ea0 61 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49 6e 76  al, xValue, xInv
10eb0 65 72 73 65 2c 20 66 29 20 5c 0a 20 20 7b 6e 41  erse, f) \.  {nA
10ec0 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
10ed0 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  (nc*SQLITE_FUNC_
10ee0 4e 45 45 44 43 4f 4c 4c 29 7c 66 2c 20 5c 0a 20  NEEDCOLL)|f, \. 
10ef0 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
10f00 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74  PTR(arg), 0, xSt
10f10 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c 75 65  ep,xFinal,xValue
10f20 2c 78 49 6e 76 65 72 73 65 2c 23 7a 4e 61 6d 65  ,xInverse,#zName
10f30 2c 20 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c  , {0}}../*.** Al
10f40 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f  l current savepo
10f50 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20  ints are stored 
10f60 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  in a linked list
10f70 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20   starting at.** 
10f80 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
10f90 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c  nt. The first el
10fa0 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73  ement in the lis
10fb0 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65  t is the most re
10fc0 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64  cently.** opened
10fd0 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65   savepoint. Save
10fe0 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64  points are added
10ff0 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20   to the list by 
11000 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53  the vdbe.** OP_S
11010 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63  avepoint instruc
11020 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
11030 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68  Savepoint {.  ch
11040 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11060 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e    /* Savepoint n
11070 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61  ame (nul-termina
11080 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ted) */.  i64 nD
11090 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
110a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
110b0 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
110c0 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e  red fk violation
110d0 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  s */.  i64 nDefe
110e0 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20  rredImmCons;    
110f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
11100 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
11110 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61   imm fk. */.  Sa
11120 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20  vepoint *pNext; 
11130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11140 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65    /* Parent save
11150 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a  point (if any) *
11160 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
11170 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73  following are us
11180 65 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64  ed as the second
11190 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71   parameter to sq
111a0 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29  lite3Savepoint()
111b0 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20  ,.** and as the 
111c0 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  P1 argument to t
111d0 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20  he OP_Savepoint 
111e0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
111f0 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
11200 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23  T_BEGIN      0.#
11210 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
11220 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64  _RELEASE    1.#d
11230 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
11240 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f  ROLLBACK   2.../
11250 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65  *.** Each SQLite
11260 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c   module (virtual
11270 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
11280 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  n) is defined by
11290 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
112a0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
112b0 20 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72   structure, stor
112c0 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
112d0 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73  3.aModule.** has
112e0 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75  h table..*/.stru
112f0 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f  ct Module {.  co
11300 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
11310 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20  le *pModule;    
11320 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70     /* Callback p
11330 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e  ointers */.  con
11340 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  st char *zName; 
11350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11360 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64    /* Name passed
11370 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c   to create_modul
11380 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  e() */.  void *p
11390 41 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Aux;            
113a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
113b0 20 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20   pAux passed to 
113c0 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
113d0 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73  */.  void (*xDes
113e0 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20  troy)(void *);  
113f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64            /* Mod
11400 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66  ule destructor f
11410 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62  unction */.  Tab
11420 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20 20 20 20  le *pEpoTab;    
11430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11440 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74    /* Eponymous t
11450 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20 6d 6f  able for this mo
11460 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  dule */.};../*.*
11470 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
11480 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  out each column 
11490 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  of an SQL table 
114a0 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e  is held in an in
114b0 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
114c0 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  s structure..*/.
114d0 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a  struct Column {.
114e0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
114f0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
11500 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c  is column, \000,
11510 20 74 68 65 6e 20 74 68 65 20 74 79 70 65 20 2a   then the type *
11520 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b  /.  Expr *pDflt;
11530 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
11540 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
11550 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lumn */.  char *
11560 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  zColl;     /* Co
11570 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
11580 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20  .  If NULL, use 
11590 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20  the default */. 
115a0 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20   u8 notNull;    
115b0 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65    /* An OE_ code
115c0 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20   for handling a 
115d0 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
115e0 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  int */.  char af
115f0 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65  finity;   /* One
11600 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   of the SQLITE_A
11610 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f  FF_... values */
11620 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20  .  u8 szEst;    
11630 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
11640 20 73 69 7a 65 20 6f 66 20 76 61 6c 75 65 20 69   size of value i
11650 6e 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73  n this column. s
11660 69 7a 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f  izeof(INT)==1 */
11670 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20  .  u8 colFlags; 
11680 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70      /* Boolean p
11690 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20  roperties.  See 
116a0 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73  COLFLAG_ defines
116b0 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   below */.};../*
116c0 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
116d0 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c  for Column.colFl
116e0 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ags:.*/.#define 
116f0 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20  COLFLAG_PRIMKEY 
11700 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f   0x0001    /* Co
11710 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20  lumn is part of 
11720 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
11730 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
11740 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30  AG_HIDDEN   0x00
11750 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65  02    /* A hidde
11760 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69  n column in a vi
11770 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  rtual table */.#
11780 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48  define COLFLAG_H
11790 41 53 54 59 50 45 20 20 30 78 30 30 30 34 20 20  ASTYPE  0x0004  
117a0 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20 66    /* Type name f
117b0 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61  ollows column na
117c0 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  me */.#define CO
117d0 4c 46 4c 41 47 5f 55 4e 49 51 55 45 20 20 20 30  LFLAG_UNIQUE   0
117e0 78 30 30 30 38 20 20 20 20 2f 2a 20 43 6f 6c 75  x0008    /* Colu
117f0 6d 6e 20 64 65 66 20 63 6f 6e 74 61 69 6e 73 20  mn def contains 
11800 22 55 4e 49 51 55 45 22 20 6f 72 20 22 50 4b 22  "UNIQUE" or "PK"
11810 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46   */.#define COLF
11820 4c 41 47 5f 53 4f 52 54 45 52 52 45 46 20 30 78  LAG_SORTERREF 0x
11830 30 30 31 30 20 20 20 2f 2a 20 55 73 65 20 73 6f  0010   /* Use so
11840 72 74 65 72 2d 72 65 66 73 20 77 69 74 68 20 74  rter-refs with t
11850 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f  his column */../
11860 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e  *.** A "Collatin
11870 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64  g Sequence" is d
11880 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
11890 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
118a0 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
118b0 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c  ure. Conceptuall
118c0 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73  y, a collating s
118d0 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73  equence consists
118e0 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a   of a name and.*
118f0 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72  * a comparison r
11900 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69  outine that defi
11910 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66  nes the order of
11920 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a   that sequence..
11930 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71  **.** If CollSeq
11940 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69  .xCmp is NULL, i
11950 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
11960 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
11970 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69  quence is undefi
11980 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75  ned.  Indices bu
11990 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69  ilt on an undefi
119a0 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  ned.** collating
119b0 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f   sequence may no
119c0 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69  t be read or wri
119d0 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tten..*/.struct 
119e0 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72  CollSeq {.  char
119f0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
11a00 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
11a10 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
11a20 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64  nce, UTF-8 encod
11a30 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ed */.  u8 enc; 
11a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11a50 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68   Text encoding h
11a60 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29  andled by xCmp()
11a70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
11a80 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  r;          /* F
11a90 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
11aa0 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74   xCmp() */.  int
11ab0 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69   (*xCmp)(void*,i
11ac0 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  nt, const void*,
11ad0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
11ae0 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  *);.  void (*xDe
11af0 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44  l)(void*);  /* D
11b00 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55  estructor for pU
11b10 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ser */.};../*.**
11b20 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61   A sort order ca
11b30 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20  n be either ASC 
11b40 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66  or DESC..*/.#def
11b50 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53  ine SQLITE_SO_AS
11b60 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f  C       0  /* So
11b70 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
11b80 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
11b90 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20   SQLITE_SO_DESC 
11ba0 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20       1  /* Sort 
11bb0 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
11bc0 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  er */.#define SQ
11bd0 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45  LITE_SO_UNDEFINE
11be0 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20  D -1 /* No sort 
11bf0 6f 72 64 65 72 20 73 70 65 63 69 66 69 65 64 20  order specified 
11c00 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e  */../*.** Column
11c10 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e   affinity types.
11c20 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65  .**.** These use
11c30 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e  d to have mnemon
11c40 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27  ic name like 'i'
11c50 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
11c60 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27  INTEGER and.** '
11c70 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46  t' for SQLITE_AF
11c80 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20  F_TEXT.  But we 
11c90 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c  can save a littl
11ca0 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72  e space and impr
11cb0 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64  ove.** the speed
11cc0 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d   a little by num
11cd0 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65  bering the value
11ce0 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e  s consecutively.
11cf0 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65  .**.** But rathe
11d00 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74  r than start wit
11d10 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67  h 0 or 1, we beg
11d20 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68  in with 'A'.  Th
11d30 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20  at way,.** when 
11d40 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74  multiple affinit
11d50 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63  y types are conc
11d60 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20  atenated into a 
11d70 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73  string and.** us
11d80 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65  ed as the P4 ope
11d90 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20  rand, they will 
11da0 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65  be more readable
11db0 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73  ..**.** Note als
11dc0 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72  o that the numer
11dd0 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f  ic types are gro
11de0 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f  uped together so
11df0 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a   that testing.**
11e00 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74   for a numeric t
11e10 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ype is a single 
11e20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64  comparison.  And
11e30 20 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69   the BLOB type i
11e40 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66  s first..*/.#def
11e50 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42  ine SQLITE_AFF_B
11e60 4c 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65 66  LOB     'A'.#def
11e70 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  ine SQLITE_AFF_T
11e80 45 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66  EXT     'B'.#def
11e90 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ine SQLITE_AFF_N
11ea0 55 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66  UMERIC  'C'.#def
11eb0 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  ine SQLITE_AFF_I
11ec0 4e 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66  NTEGER  'D'.#def
11ed0 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52  ine SQLITE_AFF_R
11ee0 45 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65  EAL     'E'..#de
11ef0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75  fine sqlite3IsNu
11f00 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29  mericAffinity(X)
11f10 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41    ((X)>=SQLITE_A
11f20 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a  FF_NUMERIC)../*.
11f30 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
11f40 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61  F_MASK values ma
11f50 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e  sks off the sign
11f60 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20  ificant bits of 
11f70 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76  an.** affinity v
11f80 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  alue..*/.#define
11f90 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
11fa0 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a       0x47../*.**
11fb0 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20   Additional bit 
11fc0 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20  values that can 
11fd0 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20  be ORed with an 
11fe0 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74  affinity without
11ff0 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65  .** changing the
12000 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a   affinity..**.**
12010 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e   The SQLITE_NOTN
12020 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f  ULL flag is a co
12030 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c  mbination of NUL
12040 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55  LEQ and JUMPIFNU
12050 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73  LL..** It causes
12060 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20   an assert() to 
12070 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f  fire if either o
12080 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70  perand to a comp
12090 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74  arison.** operat
120a0 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20  or is NULL.  It 
120b0 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74  is added to cert
120c0 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  ain comparison o
120d0 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70  perators to.** p
120e0 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70  rove that the op
120f0 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79  erands are alway
12100 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23  s NOT NULL..*/.#
12110 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45  define SQLITE_KE
12120 45 50 4e 55 4c 4c 20 20 20 20 20 30 78 30 38 20  EPNULL     0x08 
12130 20 2f 2a 20 55 73 65 64 20 62 79 20 76 65 63 74   /* Used by vect
12140 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23  or == or <> */.#
12150 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55  define SQLITE_JU
12160 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20  MPIFNULL   0x10 
12170 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74   /* jumps if eit
12180 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
12190 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
121a0 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20  QLITE_STOREP2   
121b0 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72     0x20  /* Stor
121c0 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b  e result in reg[
121d0 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20  P2] rather than 
121e0 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  jump */.#define 
121f0 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20  SQLITE_NULLEQ   
12200 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c      0x80  /* NUL
12210 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  L=NULL */.#defin
12220 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
12230 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41        0x90  /* A
12240 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61  ssert that opera
12250 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55  nds are never NU
12260 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  LL */../*.** An 
12270 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
12280 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ype is created f
12290 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20  or each virtual 
122a0 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e  table present in
122b0 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65  .** the database
122c0 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49   schema..**.** I
122d0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  f the database s
122e0 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c  chema is shared,
122f0 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f   then there is o
12300 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ne instance of t
12310 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  his.** structure
12320 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
12330 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73  se connection (s
12340 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73  qlite3*) that us
12350 65 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a  es the shared.**
12360 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73   schema. This is
12370 20 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61   because each da
12380 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
12390 6e 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f  n requires its o
123a0 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73  wn unique.** ins
123b0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c  tance of the sql
123c0 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
123d0 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  e used to access
123e0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
123f0 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61  le.** implementa
12400 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74  tion. sqlite3_vt
12410 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20  ab* handles can 
12420 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65  not be shared be
12430 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73  tween.** databas
12440 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65  e connections, e
12450 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73  ven when the res
12460 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f  t of the in-memo
12470 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73  ry database.** s
12480 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c  chema is shared,
12490 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   as the implemen
124a0 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f  tation often sto
124b0 72 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  res the database
124c0 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  .** connection h
124d0 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20  andle passed to 
124e0 69 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e  it via the xConn
124f0 65 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65  ect() or xCreate
12500 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72  () method.** dur
12510 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
12520 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54  on internally. T
12530 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e  his database con
12540 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d  nection handle m
12550 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73  ay.** then be us
12560 65 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61  ed by the virtua
12570 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e  l table implemen
12580 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73  tation to access
12590 20 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20   real tables.** 
125a0 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62  within the datab
125b0 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65  ase. So that the
125c0 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74  y appear as part
125d0 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a   of the callers.
125e0 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
125f0 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e  these accesses n
12600 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76  eed to be made v
12610 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  ia the same data
12620 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
12630 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20  on as that used 
12640 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f  to execute SQL o
12650 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65  perations on the
12660 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a   virtual table..
12670 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65  **.** All VTable
12680 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f   objects that co
12690 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69  rrespond to a si
126a0 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20  ngle table in a 
126b0 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61  shared.** databa
126c0 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e  se schema are in
126d0 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69  itially stored i
126e0 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20  n a linked-list 
126f0 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a  pointed to by.**
12700 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
12710 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  le member variab
12720 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  le of the corres
12730 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62  ponding Table ob
12740 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e  ject..** When an
12750 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
12760 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  () operation is 
12770 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65  required to acce
12780 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  ss the virtual.*
12790 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72  * table, it sear
127a0 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f  ches the list fo
127b0 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61  r the VTable tha
127c0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
127d0 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
127e0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e   connection doin
127f0 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20  g the preparing 
12800 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65  so as to use the
12810 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69   correct.** sqli
12820 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
12830 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64   in the compiled
12840 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68   query..**.** Wh
12850 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  en an in-memory 
12860 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20  Table object is 
12870 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61  deleted (for exa
12880 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a  mple when the.**
12890 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67   schema is being
128a0 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f   reloaded for so
128b0 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20  me reason), the 
128c0 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61  VTable objects a
128d0 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65  re not.** delete
128e0 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
128f0 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
12900 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e  are not xDisconn
12910 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64  ect()ed.** immed
12920 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c  iately. Instead,
12930 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20   they are moved 
12940 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70  from the Table.p
12950 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a  VTable list to.*
12960 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64  * another linked
12970 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20   list headed by 
12980 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73  the sqlite3.pDis
12990 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f  connect member o
129a0 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  f the.** corresp
129b0 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73  onding sqlite3 s
129c0 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61  tructure. They a
129d0 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f  re then deleted/
129e0 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a  xDisconnected.**
129f0 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61   next time a sta
12a00 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72  tement is prepar
12a10 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71  ed using said sq
12a20 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20  lite3*. This is 
12a30 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  done.** to avoid
12a40 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73   deadlock issues
12a50 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69   involving multi
12a60 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ple sqlite3.mute
12a70 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65  x mutexes..** Re
12a80 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20  fer to comments 
12a90 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73  above function s
12aa0 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
12ab0 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a  List() for an.**
12ac0 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20   explanation as 
12ad0 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66  to why it is saf
12ae0 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72  e to add an entr
12af0 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e  y to an sqlite3.
12b00 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c  pDisconnect.** l
12b10 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64  ist without hold
12b20 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
12b30 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75  nding sqlite3.mu
12b40 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a  tex mutex..**.**
12b50 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20   The memory for 
12b60 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20  objects of this 
12b70 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61  type is always a
12b80 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73  llocated by.** s
12b90 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29  qlite3DbMalloc()
12ba0 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  , using the conn
12bb0 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74  ection handle st
12bc0 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64  ored in VTable.d
12bd0 62 20 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73  b as.** the firs
12be0 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73  t argument..*/.s
12bf0 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20  truct VTable {. 
12c00 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
12c10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
12c20 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
12c30 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
12c40 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  h this table */.
12c50 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20    Module *pMod; 
12c60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
12c70 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65  ointer to module
12c80 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
12c90 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  */.  sqlite3_vta
12ca0 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f  b *pVtab;      /
12cb0 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61  * Pointer to vta
12cc0 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20  b instance */.  
12cd0 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20  int nRef;       
12ce0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
12cf0 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
12d00 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
12d10 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74  e */.  u8 bConst
12d20 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  raint;          
12d30 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73   /* True if cons
12d40 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70  traints are supp
12d50 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  orted */.  int i
12d60 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
12d70 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66       /* Depth of
12d80 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73   the SAVEPOINT s
12d90 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65  tack */.  VTable
12da0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
12db0 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c      /* Next in l
12dc0 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20  inked list (see 
12dd0 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  above) */.};../*
12de0 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66  .** The schema f
12df0 6f 72 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c  or each SQL tabl
12e00 65 20 61 6e 64 20 76 69 65 77 20 69 73 20 72 65  e and view is re
12e10 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
12e20 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73  ory.** by an ins
12e30 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
12e40 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
12e50 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c  ..*/.struct Tabl
12e60 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  e {.  char *zNam
12e70 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  e;         /* Na
12e80 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
12e90 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c  or view */.  Col
12ea0 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20  umn *aCol;      
12eb0 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
12ec0 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75   about each colu
12ed0 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
12ee0 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20  Index;       /* 
12ef0 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65  List of SQL inde
12f00 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c  xes on this tabl
12f10 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  e. */.  Select *
12f20 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
12f30 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e  NULL for tables.
12f40 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69    Points to defi
12f50 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77  nition if a view
12f60 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b  . */.  FKey *pFK
12f70 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ey;         /* L
12f80 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c  inked list of al
12f90 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69  l foreign keys i
12fa0 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
12fb0 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b    char *zColAff;
12fc0 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
12fd0 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
12fe0 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
12ff0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c  olumn */.  ExprL
13000 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20  ist *pCheck;    
13010 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e  /* All CHECK con
13020 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20  straints */.    
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13040 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f     /*   ... also
13050 20 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20   used as column 
13060 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56  name list in a V
13070 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  IEW */.  int tnu
13080 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
13090 20 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65   Root BTree page
130a0 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20   for this table 
130b0 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62 52 65 66  */.  u32 nTabRef
130c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
130d0 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
130e0 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f  to this Table */
130f0 0a 20 20 75 33 32 20 74 61 62 46 6c 61 67 73 3b  .  u32 tabFlags;
13100 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
13110 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a  of TF_* values *
13120 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20  /.  i16 iPKey;  
13130 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e           /* If n
13140 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65  ot negative, use
13150 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20   aCol[iPKey] as 
13160 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69  the rowid */.  i
13170 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20  16 nCol;        
13180 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13190 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
131a0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45   table */.  LogE
131b0 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20  st nRowLogEst;  
131c0 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f   /* Estimated ro
131d0 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72  ws in table - fr
131e0 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  om sqlite_stat1 
131f0 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73  table */.  LogEs
13200 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20  t szTabRow;     
13210 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a  /* Estimated siz
13220 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20  e of each table 
13230 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  row in bytes */.
13240 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
13250 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20  ABLE_COSTMULT.  
13260 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b  LogEst costMult;
13270 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c       /* Cost mul
13280 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e  tiplier for usin
13290 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  g this table */.
132a0 23 65 6e 64 69 66 0a 20 20 75 38 20 6b 65 79 43  #endif.  u8 keyC
132b0 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
132c0 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63   What to do in c
132d0 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73  ase of uniquenes
132e0 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50  s conflict on iP
132f0 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  Key */.#ifndef S
13300 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
13310 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43  TABLE.  int addC
13320 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20  olOffset;    /* 
13330 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45  Offset in CREATE
13340 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61   TABLE stmt to a
13350 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  dd a new column 
13360 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
13370 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
13380 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
13390 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20   nModuleArg;    
133a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
133b0 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
133c0 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72  module */.  char
133d0 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20   **azModuleArg; 
133e0 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a   /* 0: module 1:
133f0 20 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20   schema 2: vtab 
13400 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20  name 3...: args 
13410 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54  */.  VTable *pVT
13420 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73  able;     /* Lis
13430 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65  t of VTable obje
13440 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  cts. */.#endif. 
13450 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
13460 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  er;   /* List of
13470 20 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64   triggers stored
13480 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20   in pSchema */. 
13490 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
134a0 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
134b0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
134c0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61  is table */.  Ta
134d0 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65  ble *pNextZombie
134e0 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68  ;  /* Next on th
134f0 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54  e Parse.pZombieT
13500 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  ab list */.};../
13510 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
13520 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61  ues for Table.ta
13530 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46  bFlags..**.** TF
13540 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69  _OOOHidden appli
13550 65 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20  es to tables or 
13560 76 69 65 77 20 74 68 61 74 20 68 61 76 65 20 68  view that have h
13570 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68  idden columns th
13580 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  at are.** follow
13590 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e  ed by non-hidden
135a0 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70   columns.  Examp
135b0 6c 65 3a 20 20 22 43 52 45 41 54 45 20 56 49 52  le:  "CREATE VIR
135c0 54 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49  TUAL TABLE x USI
135d0 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49  NG.** vtab1(a HI
135e0 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e  DDEN, b);".  Sin
135f0 63 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d  ce "b" is a non-
13600 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75  hidden column bu
13610 74 20 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c  t "a" is hidden,
13620 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69  .** the TF_OOOHi
13630 64 64 65 6e 20 61 74 74 72 69 62 75 74 65 20 77  dden attribute w
13640 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68  ould apply in th
13650 69 73 20 63 61 73 65 2e 20 20 53 75 63 68 20 74  is case.  Such t
13660 61 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a  ables require.**
13670 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e   special handlin
13680 67 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20  g during INSERT 
13690 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23  processing..*/.#
136a0 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e  define TF_Readon
136b0 6c 79 20 20 20 20 20 20 20 20 30 78 30 30 30 31  ly        0x0001
136c0 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79      /* Read-only
136d0 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f   system table */
136e0 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65  .#define TF_Ephe
136f0 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 30  meral       0x00
13700 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65  02    /* An ephe
13710 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  meral table */.#
13720 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69  define TF_HasPri
13730 6d 61 72 79 4b 65 79 20 20 20 30 78 30 30 30 34  maryKey   0x0004
13740 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73      /* Table has
13750 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a   a primary key *
13760 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74  /.#define TF_Aut
13770 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30  oincrement   0x0
13780 30 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65  008    /* Intege
13790 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73  r primary key is
137a0 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a   autoincrement *
137b0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
137c0 53 74 61 74 31 20 20 20 20 20 20 20 20 30 78 30  Stat1        0x0
137d0 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f  010    /* nRowLo
137e0 67 45 73 74 20 73 65 74 20 66 72 6f 6d 20 73 71  gEst set from sq
137f0 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64  lite_stat1 */.#d
13800 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74  efine TF_Without
13810 52 6f 77 69 64 20 20 20 20 30 78 30 30 32 30 20  Rowid    0x0020 
13820 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20     /* No rowid. 
13830 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20   PRIMARY KEY is 
13840 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  the key */.#defi
13850 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52  ne TF_NoVisibleR
13860 6f 77 69 64 20 20 30 78 30 30 34 30 20 20 20 20  owid  0x0040    
13870 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62  /* No user-visib
13880 6c 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d  le "rowid" colum
13890 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  n */.#define TF_
138a0 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20  OOOHidden       
138b0 30 78 30 30 38 30 20 20 20 20 2f 2a 20 4f 75 74  0x0080    /* Out
138c0 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e  -of-Order hidden
138d0 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66   columns */.#def
138e0 69 6e 65 20 54 46 5f 53 74 61 74 73 55 73 65 64  ine TF_StatsUsed
138f0 20 20 20 20 20 20 20 30 78 30 31 30 30 20 20 20         0x0100   
13900 20 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e 65   /* Query planne
13910 72 20 64 65 63 69 73 69 6f 6e 73 20 61 66 66 65  r decisions affe
13920 63 74 65 64 20 62 79 0a 20 20 20 20 20 20 20 20  cted by.        
13930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13940 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
13950 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73  Index.aiRowLogEs
13960 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64  t[] values */.#d
13970 65 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e  efine TF_HasNotN
13980 75 6c 6c 20 20 20 20 20 20 30 78 30 32 30 30 20  ull      0x0200 
13990 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e     /* Contains N
139a0 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
139b0 6e 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65  nts */../*.** Te
139c0 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65  st to see whethe
139d0 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65  r or not a table
139e0 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61   is a virtual ta
139f0 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a  ble.  This is.**
13a00 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f   done as a macro
13a10 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c   so that it will
13a20 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75   be optimized ou
13a30 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a  t when virtual.*
13a40 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20  * table support 
13a50 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
13a60 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69  the build..*/.#i
13a70 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
13a80 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
13a90 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
13aa0 61 6c 28 58 29 20 20 20 20 20 20 28 28 58 29 2d  al(X)      ((X)-
13ab0 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65 6c  >nModuleArg).#el
13ac0 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  se.#  define IsV
13ad0 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30  irtual(X)      0
13ae0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
13af0 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
13b00 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69  ne if a column i
13b10 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64  s hidden.  IsOrd
13b20 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
13b30 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b  n().** only work
13b40 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61  s for non-virtua
13b50 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61  l tables (ordina
13b60 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69  ry tables and vi
13b70 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61  ews) and is.** a
13b80 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65  lways false unle
13b90 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ss SQLITE_ENABLE
13ba0 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20  _HIDDEN_COLUMNS 
13bb0 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65  is defined.  The
13bc0 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  .** IsHiddenColu
13bd0 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65  mn() macro is ge
13be0 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a  neral purpose..*
13bf0 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
13c00 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
13c10 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64  EN_COLUMNS).#  d
13c20 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
13c30 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
13c40 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
13c50 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
13c60 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
13c70 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
13c80 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d  Column(X) (((X)-
13c90 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
13ca0 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
13cb0 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53  #elif !defined(S
13cc0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
13cd0 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69  ALTABLE).#  defi
13ce0 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
13cf0 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28  n(X)         (((
13d00 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
13d10 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
13d20 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f  0).#  define IsO
13d30 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
13d40 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23  umn(X) 0.#else.#
13d50 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
13d60 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
13d70 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49     0.#  define I
13d80 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
13d90 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69  olumn(X) 0.#endi
13da0 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20  f.../* Does the 
13db0 74 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77  table have a row
13dc0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61  id */.#define Ha
13dd0 73 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28  sRowid(X)     ((
13de0 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
13df0 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29  TF_WithoutRowid)
13e00 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73  ==0).#define Vis
13e10 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28  ibleRowid(X) (((
13e20 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
13e30 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64  F_NoVisibleRowid
13e40 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  )==0)../*.** Eac
13e50 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  h foreign key co
13e60 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69  nstraint is an i
13e70 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
13e80 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
13e90 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65  re..**.** A fore
13ea0 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63  ign key is assoc
13eb0 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74  iated with two t
13ec0 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f  ables.  The "fro
13ed0 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74  m" table is.** t
13ee0 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  he table that co
13ef0 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52  ntains the REFER
13f00 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61  ENCES clause tha
13f10 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f  t creates the fo
13f20 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54  reign.** key.  T
13f30 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73  he "to" table is
13f40 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
13f50 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20  is named in the 
13f60 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
13f70 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74  e..** Consider t
13f80 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a  his example:.**.
13f90 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
13fa0 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20  BLE ex1(.**     
13fb0 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d    a INTEGER PRIM
13fc0 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20  ARY KEY,.**     
13fd0 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53    b INTEGER CONS
13fe0 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52  TRAINT fk1 REFER
13ff0 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20  ENCES ex2(x).** 
14000 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72      );.**.** For
14010 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b   foreign key "fk
14020 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  1", the from-tab
14030 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20  le is "ex1" and 
14040 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
14050 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61  "ex2"..** Equiva
14060 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a  lent names:.**.*
14070 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65  *     from-table
14080 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a   == child-table.
14090 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c  **       to-tabl
140a0 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c  e == parent-tabl
140b0 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46  e.**.** Each REF
140c0 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67  ERENCES clause g
140d0 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74  enerates an inst
140e0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
140f0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
14100 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61  ** which is atta
14110 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d  ched to the from
14120 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d  -table.  The to-
14130 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65  table need not e
14140 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65  xist when.** the
14150 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63   from-table is c
14160 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69  reated.  The exi
14170 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f  stence of the to
14180 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68  -table is not ch
14190 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ecked..**.** The
141a0 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72   list of all par
141b0 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54  ents for child T
141c0 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61  able X is held a
141d0 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a  t X.pFKey..**.**
141e0 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63   A list of all c
141f0 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61  hildren for a ta
14200 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69  ble named Z (whi
14210 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65  ch might not eve
14220 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68  n exist).** is h
14230 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b  eld in Schema.fk
14240 65 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61  eyHash with a ha
14250 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a  sh key of Z..*/.
14260 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20  struct FKey {.  
14270 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20  Table *pFrom;   
14280 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61    /* Table conta
14290 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45  ining the REFERE
142a0 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61  NCES clause (aka
142b0 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b  : Child) */.  FK
142c0 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20  ey *pNextFrom;  
142d0 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74  /* Next FKey wit
142e0 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46  h the same in pF
142f0 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74  rom. Next parent
14300 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63   of pFrom */.  c
14310 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20  har *zTo;       
14320 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c   /* Name of tabl
14330 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70  e that the key p
14340 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50  oints to (aka: P
14350 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79  arent) */.  FKey
14360 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a   *pNextTo;    /*
14370 20 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73   Next with the s
14380 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68  ame zTo. Next ch
14390 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20  ild of zTo. */. 
143a0 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20   FKey *pPrevTo; 
143b0 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77     /* Previous w
143c0 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f  ith the same zTo
143d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20   */.  int nCol; 
143e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
143f0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
14400 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a  this key */.  /*
14410 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39   EV: R-30323-219
14420 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66  17 */.  u8 isDef
14430 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20  erred;       /* 
14440 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
14450 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64  nt checking is d
14460 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d  eferred till COM
14470 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74  MIT */.  u8 aAct
14480 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f  ion[2];        /
14490 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20  * ON DELETE and 
144a0 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e  ON UPDATE action
144b0 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20  s, respectively 
144c0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70  */.  Trigger *ap
144d0 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72  Trigger[2];/* Tr
144e0 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69  iggers for aActi
144f0 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a  on[] actions */.
14500 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70    struct sColMap
14510 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69   {      /* Mappi
14520 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  ng of columns in
14530 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e   pFrom to column
14540 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20  s in zTo */.    
14550 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20  int iFrom;      
14560 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
14570 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f  f column in pFro
14580 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  m */.    char *z
14590 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Col;           /
145a0 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e  * Name of column
145b0 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c   in zTo.  If NUL
145c0 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45  L use PRIMARY KE
145d0 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d  Y */.  } aCol[1]
145e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
145f0 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
14600 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d  ch of nCol colum
14610 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ns */.};../*.** 
14620 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
14630 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77  many different w
14640 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61  ays to resolve a
14650 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
14660 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20  rror.  ROLLBACK 
14670 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
14680 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69   that a constrai
14690 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20  nt violation.** 
146a0 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61  causes the opera
146b0 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20  tion in process 
146c0 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20  to fail and for 
146d0 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
146e0 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65  saction.** to be
146f0 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41   rolled back.  A
14700 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20  BORT processing 
14710 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74  means the operat
14720 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a  ion in process.*
14730 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20  * fails and any 
14740 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72  prior changes fr
14750 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72  om that one oper
14760 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64  ation are backed
14770 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65   out,.** but the
14780 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
14790 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e  not rolled back.
147a0 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e    FAIL processin
147b0 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20  g means that.** 
147c0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
147d0 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20   progress stops 
147e0 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65  and returns an e
147f0 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20  rror code.  But 
14800 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73  prior.** changes
14810 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65   due to the same
14820 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e   operation are n
14830 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e  ot backed out an
14840 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  d no rollback.**
14850 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45   occurs.  IGNORE
14860 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
14870 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74  particular row t
14880 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63  hat caused the c
14890 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
148a0 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74  or is not insert
148b0 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20  ed or updated.  
148c0 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
148d0 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
148e0 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  r.** is returned
148f0 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73  .  REPLACE means
14900 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e   that preexistin
14910 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20  g database rows 
14920 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61  that caused.** a
14930 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
14940 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65  nt violation are
14950 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74   removed so that
14960 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20   the new insert 
14970 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e  or.** update can
14980 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65   proceed.  Proce
14990 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
149a0 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20  and no error is 
149b0 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  reported..**.** 
149c0 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c  RESTRICT, SETNUL
149d0 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61  L, and CASCADE a
149e0 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c  ctions apply onl
149f0 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79  y to foreign key
14a00 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69  s..** RESTRICT i
14a10 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42  s the same as AB
14a20 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54  ORT for IMMEDIAT
14a30 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61  E foreign keys a
14a40 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61  nd the.** same a
14a50 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44  s ROLLBACK for D
14a60 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53  EFERRED keys.  S
14a70 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61  ETNULL means tha
14a80 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  t the foreign.**
14a90 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e   key is set to N
14aa0 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65  ULL.  CASCADE me
14ab0 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54  ans that a DELET
14ac0 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74  E or UPDATE of t
14ad0 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64  he.** referenced
14ae0 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72   table row is pr
14af0 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68  opagated into th
14b00 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73  e row that holds
14b10 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20   the.** foreign 
14b20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  key..**.** The f
14b30 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69  ollowing symboli
14b40 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  c values are use
14b50 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63  d to record whic
14b60 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74  h type.** of act
14b70 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a  ion to take..*/.
14b80 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20  #define OE_None 
14b90 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65      0   /* There
14ba0 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e   is no constrain
14bb0 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64  t to check */.#d
14bc0 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63  efine OE_Rollbac
14bd0 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68  k 1   /* Fail th
14be0 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  e operation and 
14bf0 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
14c00 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
14c10 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20  ine OE_Abort    
14c20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20  2   /* Back out 
14c30 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e  changes but do n
14c40 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  o rollback trans
14c50 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
14c60 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20  e OE_Fail     3 
14c70 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70    /* Stop the op
14c80 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76  eration but leav
14c90 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e  e all prior chan
14ca0 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ges */.#define O
14cb0 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f  E_Ignore   4   /
14cc0 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72  * Ignore the err
14cd0 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68  or. Do not do th
14ce0 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  e INSERT or UPDA
14cf0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  TE */.#define OE
14d00 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a  _Replace  5   /*
14d10 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   Delete existing
14d20 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f   record, then do
14d30 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
14d40 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  E */.#define OE_
14d50 55 70 64 61 74 65 20 20 20 36 20 20 20 2f 2a 20  Update   6   /* 
14d60 50 72 6f 63 65 73 73 20 61 73 20 61 20 44 4f 20  Process as a DO 
14d70 55 50 44 41 54 45 20 69 6e 20 61 6e 20 75 70 73  UPDATE in an ups
14d80 65 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ert */.#define O
14d90 45 5f 52 65 73 74 72 69 63 74 20 37 20 20 20 2f  E_Restrict 7   /
14da0 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49  * OE_Abort for I
14db0 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c  MMEDIATE, OE_Rol
14dc0 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52  lback for DEFERR
14dd0 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ED */.#define OE
14de0 5f 53 65 74 4e 75 6c 6c 20 20 38 20 20 20 2f 2a  _SetNull  8   /*
14df0 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
14e00 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55   key value to NU
14e10 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  LL */.#define OE
14e20 5f 53 65 74 44 66 6c 74 20 20 39 20 20 20 2f 2a  _SetDflt  9   /*
14e30 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
14e40 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74   key value to it
14e50 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65  s default */.#de
14e60 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20  fine OE_Cascade 
14e70 20 31 30 20 20 2f 2a 20 43 61 73 63 61 64 65 20   10  /* Cascade 
14e80 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  the changes */.#
14e90 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c  define OE_Defaul
14ea0 74 20 20 31 31 20 20 2f 2a 20 44 6f 20 77 68 61  t  11  /* Do wha
14eb0 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c  tever the defaul
14ec0 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a  t action is */..
14ed0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
14ee0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
14ef0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
14f00 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
14f10 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
14f20 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b   to sqlite3VdbeK
14f30 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73  eyCompare and is
14f40 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c   used to control
14f50 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
14f60 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e  on of the two in
14f70 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20  dex keys..**.** 
14f80 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f  Note that aSortO
14f90 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c  rder[] and aColl
14fa0 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31  [] have nField+1
14fb0 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a   slots.  There.*
14fc0 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f  * are nField slo
14fd0 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ts for the colum
14fe0 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74  ns of an index t
14ff0 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c  hen one extra sl
15000 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f  ot.** for the ro
15010 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  wid at the end..
15020 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66  */.struct KeyInf
15030 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20  o {.  u32 nRef; 
15040 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15050 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65  ber of reference
15060 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66  s to this KeyInf
15070 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38  o object */.  u8
15080 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
15090 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
150a0 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20  ng - one of the 
150b0 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75  SQLITE_UTF* valu
150c0 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79  es */.  u16 nKey
150d0 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 4e  Field;      /* N
150e0 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c  umber of key col
150f0 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65  umns in the inde
15100 78 20 2a 2f 0a 20 20 75 31 36 20 6e 41 6c 6c 46  x */.  u16 nAllF
15110 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 54 6f  ield;      /* To
15120 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 63  tal columns, inc
15130 6c 75 64 69 6e 67 20 6b 65 79 20 70 6c 75 73 20  luding key plus 
15140 6f 74 68 65 72 73 20 2a 2f 0a 20 20 73 71 6c 69  others */.  sqli
15150 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
15160 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
15170 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
15180 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
15190 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65      /* Sort orde
151a0 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  r for each colum
151b0 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  n. */.  CollSeq 
151c0 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43  *aColl[1];  /* C
151d0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
151e0 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20  e for each term 
151f0 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b  of the key */.};
15200 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a  ../*.** This obj
15210 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f  ect holds a reco
15220 72 64 20 77 68 69 63 68 20 68 61 73 20 62 65 65  rd which has bee
15230 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74  n parsed out int
15240 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20  o individual.** 
15250 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20  fields, for the 
15260 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e  purposes of doin
15270 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a  g a comparison..
15280 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69  **.** A record i
15290 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74  s an object that
152a0 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
152b0 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20   more fields of 
152c0 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73  data..** Records
152d0 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f   are used to sto
152e0 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  re the content o
152f0 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e  f a table row an
15300 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68  d to store.** th
15310 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65  e key of an inde
15320 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64  x.  A blob encod
15330 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20  ing of a record 
15340 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a  is created by.**
15350 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
15360 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65  rd opcode of the
15370 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73   VDBE and is dis
15380 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65  assembled by the
15390 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  .** OP_Column op
153a0 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69  code..**.** An i
153b0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
153c0 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20 61 73  object serves as
153d0 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69   a "key" for doi
153e0 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a  ng a search on.*
153f0 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65  * an index b+tre
15400 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74  e. The goal of t
15410 68 65 20 73 65 61 72 63 68 20 69 73 20 74 6f 20  he search is to 
15420 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74  find the entry t
15430 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64  hat.** is closed
15440 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63   to the key desc
15450 72 69 62 65 64 20 62 79 20 74 68 69 73 20 6f 62  ribed by this ob
15460 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65  ject.  This obje
15470 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a  ct might hold.**
15480 20 6a 75 73 74 20 61 20 70 72 65 66 69 78 20 6f   just a prefix o
15490 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20  f the key.  The 
154a0 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  number of fields
154b0 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20   is given by.** 
154c0 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
154d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61  ..**.** The r1 a
154e0 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61 72 65  nd r2 fields are
154f0 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72   the values to r
15500 65 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65  eturn if this ke
15510 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a  y is less than.*
15520 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  * or greater tha
15530 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62  n a key in the b
15540 74 72 65 65 2c 20 72 65 73 70 65 63 74 69 76 65  tree, respective
15550 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e  ly.  These are n
15560 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e  ormally.** -1 an
15570 64 20 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c  d +1 respectivel
15580 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65 20  y, but might be 
15590 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61  inverted to +1 a
155a0 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74  nd -1 if the b-t
155b0 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53  ree.** is in DES
155c0 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  C order..**.** T
155d0 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f  he key compariso
155e0 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75  n functions actu
155f0 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61  ally return defa
15600 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79  ult_rc when they
15610 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61   find.** an equa
15620 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  ls comparison.  
15630 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62  default_rc can b
15640 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20  e -1, 0, or +1. 
15650 20 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a   If there are.**
15660 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65   multiple entrie
15670 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20  s in the b-tree 
15680 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65  with the same ke
15690 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f  y (when only loo
156a0 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66  king.** at the f
156b0 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  irst pKeyInfo->n
156c0 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65  Fields,) then de
156d0 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20  fault_rc can be 
156e0 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20  set to -1 to.** 
156f0 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68  cause the search
15700 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73   to find the las
15710 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74  t match, or +1 t
15720 6f 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72  o cause the sear
15730 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68  ch to.** find th
15740 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a  e first match..*
15750 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d  *.** The key com
15760 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
15770 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65  s will set eqSee
15780 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65  n to true if the
15790 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e  y ever.** get an
157a0 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20  d equal results 
157b0 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74  when comparing t
157c0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f  his structure to
157d0 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64   a b-tree record
157e0 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c  ..** When defaul
157f0 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61  t_rc!=0, the sea
15800 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70  rch might end up
15810 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69   on the record i
15820 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65  mmediately.** be
15830 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d  fore the first m
15840 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74  atch or immediat
15850 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61  ely after the la
15860 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a  st match.  The.*
15870 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77  * eqSeen field w
15880 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65  ill indicate whe
15890 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65  ther or not an e
158a0 78 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74  xact match exist
158b0 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72  s in the.** b-tr
158c0 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e  ee..*/.struct Un
158d0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20  packedRecord {. 
158e0 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
158f0 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f  fo;  /* Collatio
15900 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72  n and sort-order
15910 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
15920 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20    Mem *aMem;    
15930 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20        /* Values 
15940 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
15950 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15960 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
15970 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38   apMem[] */.  i8
15980 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20   default_rc;    
15990 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20    /* Comparison 
159a0 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61  result if keys a
159b0 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38  re equal */.  u8
159c0 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
159d0 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63    /* Error detec
159e0 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f  ted by xRecordCo
159f0 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f  mpare (CORRUPT o
15a00 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38  r NOMEM) */.  i8
15a10 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20   r1;            
15a20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
15a30 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3c 20 72  turn if (lhs < r
15a40 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20  hs) */.  i8 r2; 
15a50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15a60 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
15a70 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a  if (lhs > rhs) *
15a80 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20  /.  u8 eqSeen;  
15a90 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
15aa0 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63  if an equality c
15ab0 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65  omparison has be
15ac0 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a  en seen */.};...
15ad0 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69  /*.** Each SQL i
15ae0 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e  ndex is represen
15af0 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79  ted in memory by
15b00 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
15b10 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
15b20 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
15b30 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  * The columns of
15b40 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
15b50 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65  are to be indexe
15b60 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a  d are described.
15b70 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75  ** by the aiColu
15b80 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68  mn[] field of th
15b90 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46  is structure.  F
15ba0 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70  or example, supp
15bb0 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74  ose.** we have t
15bc0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62  he following tab
15bd0 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a  le and index:.**
15be0 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
15bf0 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c  ABLE Ex1(c1 int,
15c00 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74   c2 int, c3 text
15c10 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  );.**     CREATE
15c20 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78   INDEX Ex2 ON Ex
15c30 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20  1(c3,c1);.**.** 
15c40 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72  In the Table str
15c50 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
15c60 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62  g Ex1, nCol==3 b
15c70 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65  ecause there are
15c80 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e  .** three column
15c90 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
15ca0 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74   In the Index st
15cb0 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
15cc0 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75  ng.** Ex2, nColu
15cd0 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66  mn==2 since 2 of
15ce0 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f   the 3 columns o
15cf0 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65  f Ex1 are indexe
15d00 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  d..** The value 
15d10 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b  of aiColumn is {
15d20 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e  2, 0}.  aiColumn
15d30 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74  [0]==2 because t
15d40 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75  he.** first colu
15d50 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
15d60 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64   (c3) has an ind
15d70 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61  ex of 2 in Ex1.a
15d80 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65  Col[]..** The se
15d90 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  cond column to b
15da0 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68  e indexed (c1) h
15db0 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
15dc0 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b   in.** Ex1.aCol[
15dd0 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43  ], hence Ex2.aiC
15de0 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a  olumn[1]==0..**.
15df0 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45  ** The Index.onE
15e00 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72  rror field deter
15e10 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
15e20 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64   not the indexed
15e30 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74   columns.** must
15e40 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77   be unique and w
15e50 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65  hat to do if the
15e60 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e  y are not.  When
15e70 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f   Index.onError=O
15e80 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65  E_None,.** it me
15e90 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ans this is not 
15ea0 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20  a unique index. 
15eb0 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73   Otherwise it is
15ec0 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a   a unique index.
15ed0 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ** and the value
15ee0 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f   of Index.onErro
15ef0 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77  r indicate the w
15f00 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65  hich conflict re
15f10 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f  solution.** algo
15f20 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20  rithm to employ 
15f30 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65  whenever an atte
15f40 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69  mpt is made to i
15f50 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71  nsert a non-uniq
15f60 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a  ue.** element..*
15f70 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69  *.** While parsi
15f80 6e 67 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  ng a CREATE TABL
15f90 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45  E or CREATE INDE
15fa0 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f  X statement in o
15fb0 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72  rder to.** gener
15fc0 61 74 65 20 56 44 42 45 20 63 6f 64 65 20 28 61  ate VDBE code (a
15fd0 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72  s opposed to par
15fe0 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72  sing one read fr
15ff0 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73  om an sqlite_mas
16000 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20  ter.** table as 
16010 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20  part of parsing 
16020 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61  an existing data
16030 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72  base schema), tr
16040 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65  ansient instance
16050 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  s.** of this str
16060 75 63 74 75 72 65 20 6d 61 79 20 62 65 20 63 72  ucture may be cr
16070 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63  eated. In this c
16080 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e  ase the Index.tn
16090 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a  um variable is.*
160a0 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
160b0 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61  the address of a
160c0 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f   VDBE instructio
160d0 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73  n, not a databas
160e0 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72  e page.** number
160f0 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68   (it cannot - th
16100 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  e database page 
16110 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64  is not allocated
16120 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a   until the VDBE.
16130 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78  ** program is ex
16140 65 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e  ecuted). See con
16150 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77  vertToWithoutRow
16160 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65  idTable() for de
16170 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  tails..*/.struct
16180 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20   Index {.  char 
16190 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
161a0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
161b0 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  his index */.  i
161c0 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20  16 *aiColumn;   
161d0 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
161e0 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
161f0 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e  d by this index.
16200 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20    1st is 0 */.  
16210 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67  LogEst *aiRowLog
16220 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d  Est;     /* From
16230 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72   ANALYZE: Est. r
16240 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20  ows selected by 
16250 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
16260 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20   Table *pTable; 
16270 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
16280 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67   SQL table being
16290 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68   indexed */.  ch
162a0 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
162b0 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
162c0 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
162d0 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
162e0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
162f0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
16300 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
16310 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64  index associated
16320 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74   with the same t
16330 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  able */.  Schema
16340 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
16350 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
16360 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64  taining this ind
16370 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72  ex */.  u8 *aSor
16380 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
16390 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c   /* for each col
163a0 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c  umn: True==DESC,
163b0 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20   False==ASC */. 
163c0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a   const char **az
163d0 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72  Coll;     /* Arr
163e0 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20  ay of collation 
163f0 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66  sequence names f
16400 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78  or index */.  Ex
16410 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72  pr *pPartIdxWher
16420 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20  e;     /* WHERE 
16430 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69  clause for parti
16440 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20  al indices */.  
16450 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78  ExprList *aColEx
16460 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75  pr;      /* Colu
16470 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  mn expressions *
16480 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
164a0 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69  DB Page containi
164b0 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20  ng root of this 
164c0 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73  index */.  LogEs
164d0 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20  t szIdxRow;     
164e0 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
164f0 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a   average row siz
16500 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  e in bytes */.  
16510 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20  u16 nKeyCol;    
16520 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
16530 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f  er of columns fo
16540 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f  rming the key */
16550 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20  .  u16 nColumn; 
16560 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16570 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
16580 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69   stored in the i
16590 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45  ndex */.  u8 onE
165a0 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20  rror;           
165b0 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20     /* OE_Abort, 
165c0 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65  OE_Ignore, OE_Re
165d0 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e  place, or OE_Non
165e0 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  e */.  unsigned 
165f0 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20  idxType:2;      
16600 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d  /* 1==UNIQUE, 2=
16610 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d  =PRIMARY KEY, 0=
16620 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f  =CREATE INDEX */
16630 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f  .  unsigned bUno
16640 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55  rdered:1;   /* U
16650 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f  se this index fo
16660 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69  r == or IN queri
16670 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73  es only */.  uns
16680 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c  igned uniqNotNul
16690 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66  l:1;  /* True if
166a0 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20   UNIQUE and NOT 
166b0 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c  NULL for all col
166c0 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  umns */.  unsign
166d0 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20  ed isResized:1; 
166e0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65     /* True if re
166f0 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  sizeIndexObject(
16700 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  ) has been calle
16710 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  d */.  unsigned 
16720 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20  isCovering:1;   
16730 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20  /* True if this 
16740 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e  is a covering in
16750 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  dex */.  unsigne
16760 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20  d noSkipScan:1; 
16770 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20    /* Do not try 
16780 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e  to use skip-scan
16790 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e   if true */.  un
167a0 73 69 67 6e 65 64 20 68 61 73 53 74 61 74 31 3a  signed hasStat1:
167b0 31 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c  1;     /* aiRowL
167c0 6f 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f 6d  ogEst values com
167d0 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  e from sqlite_st
167e0 61 74 31 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  at1 */.  unsigne
167f0 64 20 62 4e 6f 51 75 65 72 79 3a 31 3b 20 20 20  d bNoQuery:1;   
16800 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20    /* Do not use 
16810 74 68 69 73 20 69 6e 64 65 78 20 74 6f 20 6f 70  this index to op
16820 74 69 6d 69 7a 65 20 71 75 65 72 69 65 73 20 2a  timize queries *
16830 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
16840 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
16850 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d  STAT4.  int nSam
16860 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ple;            
16870 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c   /* Number of el
16880 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c  ements in aSampl
16890 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  e[] */.  int nSa
168a0 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20  mpleCol;        
168b0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64    /* Size of Ind
168c0 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20  exSample.anEq[] 
168d0 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74  and so on */.  t
168e0 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20  Rowcnt *aAvgEq; 
168f0 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61          /* Avera
16900 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f  ge nEq values fo
16910 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53  r keys not in aS
16920 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78  ample */.  Index
16930 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b  Sample *aSample;
16940 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f      /* Samples o
16950 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  f the left-most 
16960 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  key */.  tRowcnt
16970 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20   *aiRowEst;     
16980 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74    /* Non-logarit
16990 68 6d 69 63 20 73 74 61 74 31 20 64 61 74 61 20  hmic stat1 data 
169a0 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a  for this index *
169b0 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77  /.  tRowcnt nRow
169c0 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20  Est0;        /* 
169d0 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20  Non-logarithmic 
169e0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
169f0 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23  n the index */.#
16a00 65 6e 64 69 66 0a 20 20 42 69 74 6d 61 73 6b 20  endif.  Bitmask 
16a10 63 6f 6c 4e 6f 74 49 64 78 65 64 3b 20 20 20 20  colNotIdxed;    
16a20 20 2f 2a 20 30 20 66 6f 72 20 75 6e 69 6e 64 65   /* 0 for uninde
16a30 78 65 64 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70  xed columns in p
16a40 54 61 62 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  Tab */.};../*.**
16a50 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
16a60 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70  for Index.idxTyp
16a70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e.*/.#define SQL
16a80 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44  ITE_IDXTYPE_APPD
16a90 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43  EF      0   /* C
16aa0 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45  reated using CRE
16ab0 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65  ATE INDEX */.#de
16ac0 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
16ad0 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20  YPE_UNIQUE      
16ae0 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1   /* Implement
16af0 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  s a UNIQUE const
16b00 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
16b10 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
16b20 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20  PRIMARYKEY  2   
16b30 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41 52  /* Is the PRIMAR
16b40 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61  Y KEY for the ta
16b50 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72  ble */../* Retur
16b60 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
16b70 58 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b  X is a PRIMARY K
16b80 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  EY index */.#def
16b90 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79  ine IsPrimaryKey
16ba0 49 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e  Index(X)  ((X)->
16bb0 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  idxType==SQLITE_
16bc0 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b  IDXTYPE_PRIMARYK
16bd0 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74  EY)../* Return t
16be0 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69  rue if index X i
16bf0 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78  s a UNIQUE index
16c00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e   */.#define IsUn
16c10 69 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20  iqueIndex(X)    
16c20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21    ((X)->onError!
16c30 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68  =OE_None)../* Th
16c40 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e  e Index.aiColumn
16c50 5b 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f  [] values are no
16c60 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65 20  rmally positive 
16c70 69 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a  integer.  But.**
16c80 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20   there are some 
16c90 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20  negative values 
16ca0 74 68 61 74 20 68 61 76 65 20 73 70 65 63 69 61  that have specia
16cb0 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64  l meaning:.*/.#d
16cc0 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20  efine XN_ROWID  
16cd0 20 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20 49     (-1)     /* I
16ce0 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73  ndexed column is
16cf0 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64   the rowid */.#d
16d00 65 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20 20  efine XN_EXPR   
16d10 20 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20 49     (-2)     /* I
16d20 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73  ndexed column is
16d30 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a   an expression *
16d40 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61  /../*.** Each sa
16d50 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74  mple stored in t
16d60 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
16d70 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
16d80 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a  nted in memory.*
16d90 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74  * using a struct
16da0 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65  ure of this type
16db0 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  .  See documenta
16dc0 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20  tion at the top 
16dd0 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a  of the.** analyz
16de0 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20  e.c source file 
16df0 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
16e00 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
16e10 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
16e20 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20  e {.  void *p;  
16e30 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
16e40 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65  er to sampled re
16e50 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b  cord */.  int n;
16e60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
16e70 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e  ize of record in
16e80 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77   bytes */.  tRow
16e90 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a  cnt *anEq;    /*
16ea0 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
16eb0 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b  rows where the k
16ec0 65 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73  ey equals this s
16ed0 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
16ee0 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20  nt *anLt;    /* 
16ef0 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
16f00 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73  ows where key is
16f10 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
16f20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77  sample */.  tRow
16f30 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a  cnt *anDLt;   /*
16f40 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
16f50 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65  distinct keys le
16f60 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
16f70 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ple */.};../*.**
16f80 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69   Each token comi
16f90 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65  ng out of the le
16fa0 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  xer is an instan
16fb0 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74  ce of.** this st
16fc0 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73  ructure.  Tokens
16fd0 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61   are also used a
16fe0 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70  s part of an exp
16ff0 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ression..**.** T
17000 68 65 20 6d 65 6d 6f 72 79 20 74 68 61 74 20 22  he memory that "
17010 7a 22 20 70 6f 69 6e 74 73 20 74 6f 20 69 73 20  z" points to is 
17020 6f 77 6e 65 64 20 62 79 20 6f 74 68 65 72 20 6f  owned by other o
17030 62 6a 65 63 74 73 2e 20 20 54 61 6b 65 20 63 61  bjects.  Take ca
17040 72 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6f  re.** that the o
17050 77 6e 65 72 20 6f 66 20 74 68 65 20 22 7a 22 20  wner of the "z" 
17060 73 74 72 69 6e 67 20 64 6f 65 73 20 6e 6f 74 20  string does not 
17070 64 65 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 73  deallocate the s
17080 74 72 69 6e 67 20 62 65 66 6f 72 65 0a 2a 2a 20  tring before.** 
17090 74 68 65 20 54 6f 6b 65 6e 20 67 6f 65 73 20 6f  the Token goes o
170a0 75 74 20 6f 66 20 73 63 6f 70 65 21 20 20 56 65  ut of scope!  Ve
170b0 72 79 20 6f 66 74 65 6e 2c 20 74 68 65 20 22 7a  ry often, the "z
170c0 22 20 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65  " points to some
170d0 20 70 6c 61 63 65 0a 2a 2a 20 69 6e 20 74 68 65   place.** in the
170e0 20 6d 69 64 64 6c 65 20 6f 66 20 74 68 65 20 50   middle of the P
170f0 61 72 73 65 2e 7a 53 71 6c 20 74 65 78 74 2e 20  arse.zSql text. 
17100 20 42 75 74 20 69 74 20 6d 69 67 68 74 20 61 6c   But it might al
17110 73 6f 20 70 6f 69 6e 74 20 74 6f 20 61 0a 2a 2a  so point to a.**
17120 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 2e 0a   static string..
17130 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  */.struct Token 
17140 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
17150 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f  z;     /* Text o
17160 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f  f the token.  No
17170 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65  t NULL-terminate
17180 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  d! */.  unsigned
17190 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75   int n;    /* Nu
171a0 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
171b0 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e  rs in this token
171c0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
171d0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
171e0 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  s structure cont
171f0 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
17200 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
17210 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
17220 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f  a SELECT that co
17230 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
17240 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
17250 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b  * If Expr.op==TK
17260 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54  _AGG_COLUMN or T
17270 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74  K_AGG_FUNCTION t
17280 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66  hen Expr.pAggInf
17290 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  o is a.** pointe
172a0 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
172b0 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69  ure.  The Expr.i
172c0 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20  Column field is 
172d0 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20  the index in.** 
172e0 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f  AggInfo.aCol[] o
172f0 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b  r AggInfo.aFunc[
17300 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ] of information
17310 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
17320 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
17330 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a  that node..**.**
17340 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42   AggInfo.pGroupB
17350 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46  y and AggInfo.aF
17360 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20  unc.pExpr point 
17370 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e  to fields within
17380 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
17390 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72   Select structur
173a0 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  e that describes
173b0 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
173c0 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a  ement.  These.**
173d0 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e   fields do not n
173e0 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20  eed to be freed 
173f0 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e  when deallocatin
17400 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74  g the AggInfo st
17410 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
17420 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75  ct AggInfo {.  u
17430 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20  8 directMode;   
17440 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74         /* Direct
17450 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20   rendering mode 
17460 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20  means take data 
17470 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20  directly.       
17480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17490 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63     ** from sourc
174a0 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20  e tables rather 
174b0 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75  than from accumu
174c0 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75  lators */.  u8 u
174d0 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  seSortingIdx;   
174e0 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74      /* In direct
174f0 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65   mode, reference
17500 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
17510 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20  ex rather.      
17520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17530 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20      ** than the 
17540 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
17550 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
17560 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  ;         /* Cur
17570 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
17580 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
17590 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
175a0 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20  IdxPTab;     /* 
175b0 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
175c0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f   pseudo-table */
175d0 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43  .  int nSortingC
175e0 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75  olumn;     /* Nu
175f0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
17600 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  in the sorting i
17610 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ndex */.  int mn
17620 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20  Reg, mxReg;     
17630 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65    /* Range of re
17640 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65  gisters allocate
17650 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61  d for aCol and a
17660 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69  Func */.  ExprLi
17670 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
17680 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62    /* The group b
17690 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74  y clause */.  st
176a0 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c  ruct AggInfo_col
176b0 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63   {    /* For eac
176c0 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e  h column used in
176d0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a   source tables *
176e0 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
176f0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  b;             /
17700 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  * Source table *
17710 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  /.    int iTable
17720 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
17730 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
17740 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  of the source ta
17750 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
17760 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
17770 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
17780 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20  mber within the 
17790 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
177a0 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43      int iSorterC
177b0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20  olumn;       /* 
177c0 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  Column number in
177d0 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
177e0 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  ex */.    int iM
177f0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
17800 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
17810 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
17820 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
17830 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
17840 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
17850 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65  * The original e
17860 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d  xpression */.  }
17870 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43   *aCol;.  int nC
17880 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
17890 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
178a0 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61  sed entries in a
178b0 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  Col[] */.  int n
178c0 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20  Accumulator;    
178d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
178e0 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f  columns that sho
178f0 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  w through to the
17900 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20   output..       
17910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17920 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c     ** Additional
17930 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
17940 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65  d only as parame
17950 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20  ters to.        
17960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17970 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66    ** aggregate f
17980 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74  unctions */.  st
17990 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e  ruct AggInfo_fun
179a0 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63  c {   /* For eac
179b0 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  h aggregate func
179c0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72  tion */.    Expr
179d0 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
179e0 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
179f0 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20  on encoding the 
17a00 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
17a10 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20  FuncDef *pFunc; 
17a20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
17a30 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
17a40 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  on implementatio
17a50 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  n */.    int iMe
17a60 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
17a70 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
17a80 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
17a90 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
17aa0 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e  .    int iDistin
17ab0 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ct;           /*
17ac0 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   Ephemeral table
17ad0 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65   used to enforce
17ae0 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d   DISTINCT */.  }
17af0 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e   *aFunc;.  int n
17b00 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
17b10 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17b20 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63  entries in aFunc
17b30 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  [] */.};../*.** 
17b40 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56  The datatype ynV
17b50 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69  ar is a signed i
17b60 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31  nteger, either 1
17b70 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e  6-bit or 32-bit.
17b80 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69  .** Usually it i
17b90 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20  s 16-bits.  But 
17ba0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
17bb0 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73  RIABLE_NUMBER is
17bc0 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e   greater.** than
17bd0 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74   32767 we have t
17be0 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74  o make it 32-bit
17bf0 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65  .  16-bit is pre
17c00 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a  ferred because.*
17c10 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d  * it uses less m
17c20 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70  emory in the Exp
17c30 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20  r object, which 
17c40 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20  is a big memory 
17c50 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65  user.** in syste
17c60 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20  ms with lots of 
17c70 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
17c80 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70  nts.  And few ap
17c90 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65  plications.** ne
17ca0 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f  ed more than abo
17cb0 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69  ut 10 or 20 vari
17cc0 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65  ables.  But some
17cd0 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77   extreme users w
17ce0 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70  ant.** to have p
17cf0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
17d00 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37  ts with over 327
17d10 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e  67 variables, an
17d20 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68  d for them.** th
17d30 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69  e option is avai
17d40 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c  lable (at compil
17d50 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20  e-time)..*/.#if 
17d60 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
17d70 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36  BLE_NUMBER<=3276
17d80 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e  7.typedef i16 yn
17d90 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64  Var;.#else.typed
17da0 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65  ef int ynVar;.#e
17db0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ndif../*.** Each
17dc0 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72   node of an expr
17dd0 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61  ession in the pa
17de0 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69  rse tree is an i
17df0 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
17e00 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  is structure..**
17e10 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74  .** Expr.op is t
17e20 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69  he opcode. The i
17e30 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f  nteger parser to
17e40 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65  ken codes are re
17e50 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64  used.** as opcod
17e60 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61  es here. For exa
17e70 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72  mple, the parser
17e80 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74   defines TK_GE t
17e90 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a  o be an integer.
17ea0 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e  ** code represen
17eb0 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70  ting the ">=" op
17ec0 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d  erator. This sam
17ed0 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69  e integer code i
17ee0 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72  s reused.** to r
17ef0 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65  epresent the gre
17f00 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75  ater-than-or-equ
17f10 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69  al-to operator i
17f20 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
17f30 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20  .** tree..**.** 
17f40 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
17f50 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65  n is an SQL lite
17f60 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c  ral (TK_INTEGER,
17f70 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c   TK_FLOAT, TK_BL
17f80 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  OB,.** or TK_STR
17f90 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
17fa0 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
17fb0 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
17fc0 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
17fd0 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
17fe0 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
17ff0 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
18000 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
18010 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61  ntains the.** va
18020 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e  riable name. Fin
18030 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70  ally, if the exp
18040 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
18050 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46  L function (TK_F
18060 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65  UNCTION),.** the
18070 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
18080 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  tains the name o
18090 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  f the function..
180a0 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68  **.** Expr.pRigh
180b0 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74  t and Expr.pLeft
180c0 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e   are the left an
180d0 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65  d right subexpre
180e0 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62  ssions of a.** b
180f0 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20  inary operator. 
18100 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d  Either or both m
18110 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ay be NULL..**.*
18120 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  * Expr.x.pList i
18130 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75  s a list of argu
18140 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70  ments if the exp
18150 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
18160 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61  L function,.** a
18170 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
18180 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73   or an IN expres
18190 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
181a0 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c   "<lhs> IN (<y>,
181b0 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78   <z>...)"..** Ex
181c0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
181d0 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72  used if the expr
181e0 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d  ession is a sub-
181f0 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70  select or an exp
18200 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ression of.** th
18210 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
18220 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20   (SELECT ...)". 
18230 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c  If the EP_xIsSel
18240 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69  ect bit is set i
18250 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
18260 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45  ags mask, then E
18270 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
18280 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73   valid. Otherwis
18290 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  e, Expr.x.pList 
182a0 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a  is.** valid..**.
182b0 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e  ** An expression
182c0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20   of the form ID 
182d0 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20  or ID.ID refers 
182e0 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  to a column in a
182f0 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73   table..** For s
18300 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  uch expressions,
18310 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20   Expr.op is set 
18320 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64  to TK_COLUMN and
18330 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a   Expr.iTable is.
18340 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63  ** the integer c
18350 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
18360 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f  a VDBE cursor po
18370 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74  inting to that t
18380 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72  able and.** Expr
18390 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  .iColumn is the 
183a0 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f  column number fo
183b0 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63  r the specific c
183c0 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a  olumn.  If the.*
183d0 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  * expression is 
183e0 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  used as a result
183f0 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65   in an aggregate
18400 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68   SELECT, then th
18410 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c  e.** value is al
18420 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  so stored in the
18430 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d   Expr.iAgg colum
18440 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61  n in the aggrega
18450 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74  te so that.** it
18460 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
18470 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65   after all aggre
18480 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74  gates are comput
18490 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
184a0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
184b0 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62  n unbound variab
184c0 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65  le marker (a que
184d0 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68  stion mark.** ch
184e0 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74  aracter '?' in t
184f0 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29  he original SQL)
18500 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69   then the Expr.i
18510 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20  Table holds the 
18520 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20  index.** number 
18530 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c  for that variabl
18540 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
18550 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
18560 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78  subquery then Ex
18570 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73  pr.iColumn holds
18580 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72   an integer.** r
18590 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63  egister number c
185a0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65  ontaining the re
185b0 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71  sult of the subq
185c0 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a  uery.  If the.**
185d0 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20   subquery gives 
185e0 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c  a constant resul
185f0 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  t, then iTable i
18600 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75  s -1.  If the su
18610 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20  bquery.** gives 
18620 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77  a different answ
18630 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20  er at different 
18640 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61  times during sta
18650 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e  tement processin
18660 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65  g.** then iTable
18670 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20   is the address 
18680 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20  of a subroutine 
18690 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68  that computes th
186a0 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a  e subquery..**.*
186b0 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73  * If the Expr is
186c0 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75   of type OP_Colu
186d0 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c  mn, and the tabl
186e0 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e  e it is selectin
186f0 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64  g from.** is a d
18700 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65  isk table or the
18710 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d   "old.*" pseudo-
18720 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62  table, then pTab
18730 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
18740 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
18750 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
18760 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49  ..**.** ALLOCATI
18770 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20  ON NOTES:.**.** 
18780 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e  Expr objects can
18790 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65   use a lot of me
187a0 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61  mory space in da
187b0 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20  tabase schema.  
187c0 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63  To.** help reduc
187d0 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
187e0 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73  ments, sometimes
187f0 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
18800 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63  will be.** trunc
18810 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65  ated.  And to re
18820 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20  duce the number 
18830 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  of memory alloca
18840 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73  tions, sometimes
18850 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  .** two or more 
18860 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c  Expr objects wil
18870 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  l be stored in a
18880 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61   single memory a
18890 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f  llocation,.** to
188a0 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72  gether with Expr
188b0 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e  .zToken strings.
188c0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50  .**.** If the EP
188d0 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f  _Reduced and EP_
188e0 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20  TokenOnly flags 
188f0 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20  are set when.** 
18900 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69  an Expr object i
18910 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68  s truncated.  Wh
18920 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  en EP_Reduced is
18930 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a   set, then all.*
18940 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72  * the child Expr
18950 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20   objects in the 
18960 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45  Expr.pLeft and E
18970 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72  xpr.pRight subtr
18980 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61  ees.** are conta
18990 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
189a0 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  same memory allo
189b0 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68  cation.  Note, h
189c0 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20  owever, that.** 
189d0 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20  the subtrees in 
189e0 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20  Expr.x.pList or 
189f0 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61  Expr.x.pSelect a
18a00 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61  re always separa
18a10 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  tely.** allocate
18a20 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  d, regardless of
18a30 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
18a40 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
18a50 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  t..*/.struct Exp
18a60 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  r {.  u8 op;    
18a70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18a80 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72  Operation perfor
18a90 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  med by this node
18aa0 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
18ab0 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ity;         /* 
18ac0 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  The affinity of 
18ad0 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20  the column or 0 
18ae0 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20  if not a column 
18af0 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20  */.  u32 flags; 
18b00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
18b10 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45  arious flags.  E
18b20 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  P_* See below */
18b30 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
18b40 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20  har *zToken;    
18b50 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76        /* Token v
18b60 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69  alue. Zero termi
18b70 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74  nated and dequot
18b80 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56  ed */.    int iV
18b90 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20  alue;           
18ba0 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65   /* Non-negative
18bb0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
18bc0 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f  f EP_IntValue */
18bd0 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66  .  } u;..  /* If
18be0 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
18bf0 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  y flag is set in
18c00 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
18c10 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
18c20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
18c30 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
18c40 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
18c50 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
18c60 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
18c70 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
18c80 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
18c90 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a  or malfunction..
18ca0 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
18cb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18cc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18cd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18ce0 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72  *******/..  Expr
18cf0 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20   *pLeft;        
18d00 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f     /* Left subno
18d10 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52  de */.  Expr *pR
18d20 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f  ight;          /
18d30 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20  * Right subnode 
18d40 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
18d50 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74   ExprList *pList
18d60 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e  ;     /* op = IN
18d70 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
18d80 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e  , CASE, FUNCTION
18d90 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20  , BETWEEN */.   
18da0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
18db0 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53  ;     /* EP_xIsS
18dc0 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49  elect and op = I
18dd0 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
18de0 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f  T */.  } x;..  /
18df0 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
18e00 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ced flag is set 
18e10 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
18e20 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
18e30 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
18e40 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
18e50 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
18e60 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
18e70 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
18e80 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
18e90 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
18ea0 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
18eb0 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
18ec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18ed0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18ee0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18ef0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20  *********/..#if 
18f00 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
18f10 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48  DEPTH>0.  int nH
18f20 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
18f30 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68   /* Height of th
18f40 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79  e tree headed by
18f50 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65   this node */.#e
18f60 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c  ndif.  int iTabl
18f70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
18f80 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73   TK_COLUMN: curs
18f90 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62  or number of tab
18fa0 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d  le holding colum
18fb0 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
18fc0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
18fd0 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73  _REGISTER: regis
18fe0 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20  ter number.     
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19000 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45      ** TK_TRIGGE
19010 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d  R: 1 -> new, 0 -
19020 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20  > old.          
19030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19040 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20  * EP_Unlikely:  
19050 31 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20  134217728 times 
19060 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20  likelihood.     
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19080 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54      ** TK_SELECT
19090 3a 20 31 73 74 20 72 65 67 69 73 74 65 72 20 6f  : 1st register o
190a0 66 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20  f result vector 
190b0 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75  */.  ynVar iColu
190c0 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  mn;         /* T
190d0 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  K_COLUMN: column
190e0 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20   index.  -1 for 
190f0 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20  rowid..         
19100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19110 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20  ** TK_VARIABLE: 
19120 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
19130 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20  (always >= 1).. 
19140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19150 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45          ** TK_SE
19160 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c  LECT_COLUMN: col
19170 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c  umn of the resul
19180 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31  t vector */.  i1
19190 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20  6 iAgg;         
191a0 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e       /* Which en
191b0 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d  try in pAggInfo-
191c0 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75  >aCol[] or ->aFu
191d0 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52  nc[] */.  i16 iR
191e0 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20  ightJoinTable;  
191f0 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f   /* If EP_FromJo
19200 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61  in, the right ta
19210 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20  ble of the join 
19220 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20  */.  u8 op2;    
19230 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
19240 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67  K_REGISTER: orig
19250 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78  inal value of Ex
19260 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20  pr.op.          
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19280 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65  * TK_COLUMN: the
19290 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72   value of p5 for
192a0 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20   OP_Column.     
192b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192c0 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55      ** TK_AGG_FU
192d0 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20  NCTION: nesting 
192e0 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e  depth */.  AggIn
192f0 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
19300 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f    /* Used by TK_
19310 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54  AGG_COLUMN and T
19320 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a  K_AGG_FUNCTION *
19330 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
19340 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
19350 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
19360 55 4d 4e 3a 20 54 61 62 6c 65 20 63 6f 6e 74 61  UMN: Table conta
19370 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 2e 20 43 61  ining column. Ca
19380 6e 20 62 65 20 4e 55 4c 4c 0a 20 20 20 20 20 20  n be NULL.      
19390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193a0 20 20 20 20 20 2a 2a 20 66 6f 72 20 61 20 63 6f       ** for a co
193b0 6c 75 6d 6e 20 6f 66 20 61 6e 20 69 6e 64 65 78  lumn of an index
193c0 20 6f 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f   on an expressio
193d0 6e 20 2a 2f 0a 20 20 20 20 57 69 6e 64 6f 77 20  n */.    Window 
193e0 2a 70 57 69 6e 3b 20 20 20 20 20 20 20 20 20 20  *pWin;          
193f0 2f 2a 20 54 4b 5f 46 55 4e 43 54 49 4f 4e 3a 20  /* TK_FUNCTION: 
19400 57 69 6e 64 6f 77 20 64 65 66 69 6e 69 74 69 6f  Window definitio
19410 6e 20 66 6f 72 20 74 68 65 20 66 75 6e 63 20 2a  n for the func *
19420 2f 0a 20 20 7d 20 79 3b 0a 7d 3b 0a 0a 2f 2a 0a  /.  } y;.};../*.
19430 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
19440 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67   are the meaning
19450 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65  s of bits in the
19460 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c   Expr.flags fiel
19470 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  d..*/.#define EP
19480 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30  _FromJoin  0x000
19490 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65  001 /* Originate
194a0 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c  s in ON/USING cl
194b0 61 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f  ause of outer jo
194c0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  in */.#define EP
194d0 5f 41 67 67 20 20 20 20 20 20 20 30 78 30 30 30  _Agg       0x000
194e0 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  002 /* Contains 
194f0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  one or more aggr
19500 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
19510 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 48 61  */.#define EP_Ha
19520 73 46 75 6e 63 20 20 20 30 78 30 30 30 30 30 34  sFunc   0x000004
19530 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65   /* Contains one
19540 20 6f 72 20 6d 6f 72 65 20 66 75 6e 63 74 69 6f   or more functio
19550 6e 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64 20 2a  ns of any kind *
19560 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 69 78  /.#define EP_Fix
19570 65 64 43 6f 6c 20 20 30 78 30 30 30 30 30 38 20  edCol  0x000008 
19580 2f 2a 20 54 4b 5f 43 6f 6c 75 6d 6e 20 77 69 74  /* TK_Column wit
19590 68 20 61 20 6b 6e 6f 77 6e 20 66 69 78 65 64 20  h a known fixed 
195a0 76 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  value */.#define
195b0 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78   EP_Distinct  0x
195c0 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67  000010 /* Aggreg
195d0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
195e0 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  h DISTINCT keywo
195f0 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rd */.#define EP
19600 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30  _VarSelect 0x000
19610 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69  020 /* pSelect i
19620 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f  s correlated, no
19630 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64  t constant */.#d
19640 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74  efine EP_DblQuot
19650 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74  ed 0x000040 /* t
19660 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69  oken.z was origi
19670 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a  nally in "..." *
19680 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66  /.#define EP_Inf
19690 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20  ixFunc 0x000080 
196a0 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69  /* True for an i
196b0 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c  nfix function: L
196c0 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a  IKE, GLOB, etc *
196d0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c  /.#define EP_Col
196e0 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20  late   0x000100 
196f0 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
19700 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70   a TK_COLLATE op
19710 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  erator */.#defin
19720 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30  e EP_Generic   0
19730 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72  x000200 /* Ignor
19740 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66  e COLLATE or aff
19750 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72  inity on this tr
19760 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ee */.#define EP
19770 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30  _IntValue  0x000
19780 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  400 /* Integer v
19790 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
197a0 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64  n u.iValue */.#d
197b0 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65  efine EP_xIsSele
197c0 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78  ct 0x000800 /* x
197d0 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
197e0 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70  d (otherwise x.p
197f0 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66  List is) */.#def
19800 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20  ine EP_Skip     
19810 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c   0x001000 /* COL
19820 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c  LATE, AS, or UNL
19830 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65  IKELY */.#define
19840 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78   EP_Reduced   0x
19850 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73  002000 /* Expr s
19860 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43  truct EXPR_REDUC
19870 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  EDSIZE bytes onl
19880 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
19890 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30  TokenOnly 0x0040
198a0 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
198b0 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  t EXPR_TOKENONLY
198c0 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
198d0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
198e0 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30  atic    0x008000
198f0 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
19900 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
19910 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
19920 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54  .#define EP_MemT
19930 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f  oken  0x010000 /
19940 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65  * Need to sqlite
19950 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a  3DbFree() Expr.z
19960 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  Token */.#define
19970 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78   EP_NoReduce  0x
19980 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74  020000 /* Cannot
19990 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
199a0 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65  this Expr */.#de
199b0 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79  fine EP_Unlikely
199c0 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e    0x040000 /* un
199d0 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65  likely() or like
199e0 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f  lihood() functio
199f0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
19a00 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30  ConstFunc 0x0800
19a10 30 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46  00 /* A SQLITE_F
19a20 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20  UNC_CONSTANT or 
19a30 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f  _SLOCHNG functio
19a40 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
19a50 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30  CanBeNull 0x1000
19a60 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c  00 /* Can be nul
19a70 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55  l despite NOT NU
19a80 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  LL constraint */
19a90 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71  .#define EP_Subq
19aa0 75 65 72 79 20 20 30 78 32 30 30 30 30 30 20 2f  uery  0x200000 /
19ab0 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
19ac0 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72  a TK_SELECT oper
19ad0 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ator */.#define 
19ae0 45 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78 34  EP_Alias     0x4
19af0 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20 61  00000 /* Is an a
19b00 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73 75 6c  lias for a resul
19b10 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  t set column */.
19b20 23 64 65 66 69 6e 65 20 45 50 5f 4c 65 61 66 20  #define EP_Leaf 
19b30 20 20 20 20 20 30 78 38 30 30 30 30 30 20 2f 2a       0x800000 /*
19b40 20 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e 70 52   Expr.pLeft, .pR
19b50 69 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65 63 74  ight, .u.pSelect
19b60 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65   all NULL */.#de
19b70 66 69 6e 65 20 45 50 5f 57 69 6e 46 75 6e 63 20  fine EP_WinFunc 
19b80 20 30 78 31 30 30 30 30 30 30 20 2f 2a 20 54 4b   0x1000000 /* TK
19b90 5f 46 55 4e 43 54 49 4f 4e 20 77 69 74 68 20 45  _FUNCTION with E
19ba0 78 70 72 2e 79 2e 70 57 69 6e 20 73 65 74 20 2a  xpr.y.pWin set *
19bb0 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 45 50 5f  /../*.** The EP_
19bc0 50 72 6f 70 61 67 61 74 65 20 6d 61 73 6b 20 69  Propagate mask i
19bd0 73 20 61 20 73 65 74 20 6f 66 20 70 72 6f 70 65  s a set of prope
19be0 72 74 69 65 73 20 74 68 61 74 20 61 75 74 6f 6d  rties that autom
19bf0 61 74 69 63 61 6c 6c 79 20 70 72 6f 70 61 67 61  atically propaga
19c00 74 65 0a 2a 2a 20 75 70 77 61 72 64 73 20 69 6e  te.** upwards in
19c10 74 6f 20 70 61 72 65 6e 74 20 6e 6f 64 65 73 2e  to parent nodes.
19c20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 50  .*/.#define EP_P
19c30 72 6f 70 61 67 61 74 65 20 28 45 50 5f 43 6f 6c  ropagate (EP_Col
19c40 6c 61 74 65 7c 45 50 5f 53 75 62 71 75 65 72 79  late|EP_Subquery
19c50 7c 45 50 5f 48 61 73 46 75 6e 63 29 0a 0a 2f 2a  |EP_HasFunc)../*
19c60 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
19c70 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
19c80 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
19c90 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a  ear bits in the.
19ca0 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  ** Expr.flags fi
19cb0 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
19cc0 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
19cd0 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e  E,P)     (((E)->
19ce0 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
19cf0 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c  define ExprHasAl
19d00 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  lProperty(E,P)  
19d10 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
19d20 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
19d30 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
19d40 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c  E,P)     (E)->fl
19d50 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
19d60 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72   ExprClearProper
19d70 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66  ty(E,P)   (E)->f
19d80 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54  lags&=~(P)../* T
19d90 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  he ExprSetVVAPro
19da0 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73  perty() macro is
19db0 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69   used for Verifi
19dc0 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
19dd0 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65  on,.** and Accre
19de0 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20  ditation only.  
19df0 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78  It works like Ex
19e00 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20  prSetProperty() 
19e10 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72  during VVA.** pr
19e20 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61  ocesses but is a
19e30 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76   no-op for deliv
19e40 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ery..*/.#ifdef S
19e50 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65  QLITE_DEBUG.# de
19e60 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
19e70 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45  roperty(E,P)  (E
19e80 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65  )->flags|=(P).#e
19e90 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70  lse.# define Exp
19ea0 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
19eb0 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E,P).#endif../*.
19ec0 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
19ed0 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
19ee0 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69  r of bytes requi
19ef0 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20  red by a normal 
19f00 45 78 70 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20  Expr.** struct, 
19f10 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
19f20 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63  ith the EP_Reduc
19f30 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45  ed flag set in E
19f40 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64  xpr.flags.** and
19f50 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
19f60 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65  with the EP_Toke
19f70 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a  nOnly flag set..
19f80 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
19f90 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20  FULLSIZE        
19fa0 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20     sizeof(Expr) 
19fb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c            /* Ful
19fc0 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e  l size */.#defin
19fd0 65 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  e EXPR_REDUCEDSI
19fe0 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74  ZE        offset
19ff0 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20  of(Expr,iTable) 
1a000 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75   /* Common featu
1a010 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  res */.#define E
1a020 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a  XPR_TOKENONLYSIZ
1a030 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28  E      offsetof(
1a040 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a  Expr,pLeft)   /*
1a050 20 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20   Fewer features 
1a060 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  */../*.** Flags 
1a070 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71  passed to the sq
1a080 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
1a090 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65  unction. See the
1a0a0 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a   header comment.
1a0b0 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33  ** above sqlite3
1a0c0 45 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65  ExprDup() for de
1a0d0 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tails..*/.#defin
1a0e0 65 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  e EXPRDUP_REDUCE
1a0f0 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20           0x0001 
1a100 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64   /* Used reduced
1a110 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73  -size Expr nodes
1a120 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73   */../*.** A lis
1a130 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
1a140 2e 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69  .  Each expressi
1a150 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c  on may optionall
1a160 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65  y have a.** name
1a170 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20  .  An expr/name 
1a180 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20  combination can 
1a190 62 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72  be used in sever
1a1a0 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a  al ways, such.**
1a1b0 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20   as the list of 
1a1c0 22 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65  "expr AS ID" fie
1a1d0 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  lds following a 
1a1e0 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74  "SELECT" or in t
1a1f0 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49  he.** list of "I
1a200 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20  D = expr" items 
1a210 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41  in an UPDATE.  A
1a220 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
1a230 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f  ions can.** also
1a240 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
1a250 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75  argument to a fu
1a260 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68  nction, in which
1a270 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d   case the a.zNam
1a280 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f  e.** field is no
1a290 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79  t used..**.** By
1a2a0 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70   default the Exp
1a2b0 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f  r.zSpan field ho
1a2c0 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64  lds a human-read
1a2d0 61 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e  able description
1a2e0 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   of.** the expre
1a2f0 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73  ssion that is us
1a300 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
1a310 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65  tion of error me
1a320 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f  ssages and.** co
1a330 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e  lumn labels.  In
1a340 20 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72   this case, Expr
1a350 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61  .zSpan is typica
1a360 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20  lly the text of 
1a370 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72  a.** column expr
1a380 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69  ession as it exi
1a390 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20  sts in a SELECT 
1a3a0 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65  statement.  Howe
1a3b0 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62  ver, if.** the b
1a3c0 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69  SpanIsTab flag i
1a3d0 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61  s set, then zSpa
1a3e0 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20  n is overloaded 
1a3f0 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65  to mean the name
1a400 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c  .** of the resul
1a410 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  t column in the 
1a420 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54  form: DATABASE.T
1a430 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68  ABLE.COLUMN.  Th
1a440 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d  is later.** form
1a450 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d   is used for nam
1a460 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74  e resolution wit
1a470 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c  h nested FROM cl
1a480 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  auses..*/.struct
1a490 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e   ExprList {.  in
1a4a0 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20  t nExpr;        
1a4b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1a4c0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e  f expressions on
1a4d0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73   the list */.  s
1a4e0 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69  truct ExprList_i
1a4f0 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63  tem { /* For eac
1a500 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
1a510 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20  the list */.    
1a520 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
1a530 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70          /* The p
1a540 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 74 68  arse tree for th
1a550 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
1a560 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
1a570 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1a580 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64  Token associated
1a590 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65   with this expre
1a5a0 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
1a5b0 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
1a5c0 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
1a5d0 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70   text of the exp
1a5e0 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75  ression */.    u
1a5f0 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  8 sortOrder;    
1a600 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20         /* 1 for 
1a610 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53  DESC or 0 for AS
1a620 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  C */.    unsigne
1a630 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20  d done :1;      
1a640 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e   /* A flag to in
1a650 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63  dicate when proc
1a660 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68  essing is finish
1a670 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ed */.    unsign
1a680 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31  ed bSpanIsTab :1
1a690 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73  ; /* zSpan holds
1a6a0 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e   DB.TABLE.COLUMN
1a6b0 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
1a6c0 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20   reusable :1;   
1a6d0 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72  /* Constant expr
1a6e0 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62  ession is reusab
1a6f0 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  le */.    unsign
1a700 65 64 20 62 53 6f 72 74 65 72 52 65 66 20 3a 31  ed bSorterRef :1
1a710 3b 20 2f 2a 20 44 65 66 65 72 20 65 76 61 6c 75  ; /* Defer evalu
1a720 61 74 69 6f 6e 20 75 6e 74 69 6c 20 61 66 74 65  ation until afte
1a730 72 20 73 6f 72 74 69 6e 67 20 2a 2f 0a 20 20 20  r sorting */.   
1a740 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73   union {.      s
1a750 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20  truct {.        
1a760 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b  u16 iOrderByCol;
1a770 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44        /* For ORD
1a780 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75  ER BY, column nu
1a790 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73  mber in result s
1a7a0 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31  et */.        u1
1a7b0 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20  6 iAlias;       
1a7c0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74      /* Index int
1a7d0 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d  o Parse.aAlias[]
1a7e0 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20   for zName */.  
1a7f0 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69      } x;.      i
1a800 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67  nt iConstExprReg
1a810 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74  ;      /* Regist
1a820 65 72 20 69 6e 20 77 68 69 63 68 20 45 78 70 72  er in which Expr
1a830 20 76 61 6c 75 65 20 69 73 20 63 61 63 68 65 64   value is cached
1a840 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d   */.    } u;.  }
1a850 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20   a[1];          
1a860 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 73          /* One s
1a870 6c 6f 74 20 66 6f 72 20 65 61 63 68 20 65 78 70  lot for each exp
1a880 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c  ression in the l
1a890 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
1a8a0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1a8b0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
1a8c0 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65  an hold a simple
1a8d0 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66   list of identif
1a8e0 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73  iers,.** such as
1a8f0 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63   the list "a,b,c
1a900 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  " in the followi
1a910 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a  ng statements:.*
1a920 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54  *.**      INSERT
1a930 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56   INTO t(a,b,c) V
1a940 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20  ALUES ...;.**   
1a950 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
1a960 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b  idx ON t(a,b,c);
1a970 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
1a980 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46  TRIGGER trig BEF
1a990 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28  ORE UPDATE ON t(
1a9a0 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a  a,b,c) ...;.**.*
1a9b0 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69  * The IdList.a.i
1a9c0 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  dx field is used
1a9d0 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74   when the IdList
1a9e0 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
1a9f0 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d  list of.** colum
1aa00 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20  n names after a 
1aa10 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e  table name in an
1aa20 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
1aa30 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65  t.  In the state
1aa40 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49  ment.**.**     I
1aa50 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
1aa60 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66  ,c) ....**.** If
1aa70 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68   "a" is the k-th
1aa80 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65   column of table
1aa90 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73   "t", then IdLis
1aaa0 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a  t.a[0].idx==k..*
1aab0 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20  /.struct IdList 
1aac0 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73  {.  struct IdLis
1aad0 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61  t_item {.    cha
1aae0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
1aaf0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64  * Name of the id
1ab00 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20  entifier */.    
1ab10 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20  int idx;        
1ab20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f    /* Index in so
1ab30 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20  me Table.aCol[] 
1ab40 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  of a column name
1ab50 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a  d zName */.  } *
1ab60 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20  a;.  int nId;   
1ab70 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1ab80 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  of identifiers o
1ab90 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
1aba0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1abb0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1abc0 64 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52  describes the FR
1abd0 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
1abe0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1abf0 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f  .** Each table o
1ac00 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68  r subquery in th
1ac10 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73  e FROM clause is
1ac20 20 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d   a separate elem
1ac30 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72  ent of.** the Sr
1ac40 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e  cList.a[] array.
1ac50 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20  .**.** With the 
1ac60 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74  addition of mult
1ac70 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75  iple database su
1ac80 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f  pport, the follo
1ac90 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
1aca0 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73  * can also be us
1acb0 65 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61  ed to describe a
1acc0 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c   particular tabl
1acd0 65 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61  e such as the ta
1ace0 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d  ble that.** is m
1acf0 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e  odified by an IN
1ad00 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72  SERT, DELETE, or
1ad10 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
1ad20 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20  t.  In standard 
1ad30 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74  SQL,.** such a t
1ad40 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73  able must be a s
1ad50 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20  imple name: ID. 
1ad60 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20   But in SQLite, 
1ad70 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a  the table can.**
1ad80 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69   now be identifi
1ad90 65 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65  ed by a database
1ada0 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68   name, a dot, th
1adb0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  en the table nam
1adc0 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20  e: ID.ID..**.** 
1add0 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61  The jointype sta
1ade0 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20  rts out showing 
1adf0 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65  the join type be
1ae00 74 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e  tween the curren
1ae10 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74  t table.** and t
1ae20 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e  he next table on
1ae30 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20   the list.  The 
1ae40 70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68  parser builds th
1ae50 65 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e  e list this way.
1ae60 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53  .** But sqlite3S
1ae70 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54  rcListShiftJoinT
1ae80 79 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66  ype() later shif
1ae90 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73  ts the jointypes
1aea0 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a   so that each.**
1aeb0 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73   jointype expres
1aec0 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74  ses the join bet
1aed0 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61  ween the table a
1aee0 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
1aef0 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  table..**.** In 
1af00 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c  the colUsed fiel
1af10 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65  d, the high-orde
1af20 72 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69  r bit (bit 63) i
1af30 73 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62  s set if the tab
1af40 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d  le.** contains m
1af50 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75  ore than 63 colu
1af60 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74  mns and the 64-t
1af70 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d  h or later colum
1af80 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74  n is used..*/.st
1af90 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20  ruct SrcList {. 
1afa0 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20   int nSrc;      
1afb0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
1afc0 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72  ables or subquer
1afd0 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ies in the FROM 
1afe0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20  clause */.  u32 
1aff0 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20  nAlloc;      /* 
1b000 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
1b010 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61  s allocated in a
1b020 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74  [] below */.  st
1b030 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
1b040 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a  m {.    Schema *
1b050 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68  pSchema;  /* Sch
1b060 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69  ema to which thi
1b070 73 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20  s item is fixed 
1b080 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61  */.    char *zDa
1b090 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65  tabase;  /* Name
1b0a0 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
1b0b0 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  ding this table 
1b0c0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
1b0d0 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
1b0e0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
1b0f0 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61  .    char *zAlia
1b100 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42  s;     /* The "B
1b110 22 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41  " part of a "A A
1b120 53 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e  S B" phrase.  zN
1b130 61 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a  ame is the "A" *
1b140 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
1b150 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51  b;      /* An SQ
1b160 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f  L table correspo
1b170 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a  nding to zName *
1b180 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
1b190 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c  elect;  /* A SEL
1b1a0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73  ECT statement us
1b1b0 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  ed in place of a
1b1c0 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20   table name */. 
1b1d0 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53     int addrFillS
1b1e0 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20  ub;  /* Address 
1b1f0 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f  of subroutine to
1b200 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71   manifest a subq
1b210 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20  uery */.    int 
1b220 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a  regReturn;    /*
1b230 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
1b240 67 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73  g return address
1b250 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20   of addrFillSub 
1b260 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
1b270 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69  sult;    /* Regi
1b280 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65  sters holding re
1b290 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f  sults of a co-ro
1b2a0 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72  utine */.    str
1b2b0 75 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20 6a  uct {.      u8 j
1b2c0 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a  ointype;      /*
1b2d0 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65   Type of join be
1b2e0 74 77 65 65 6e 20 74 68 69 73 20 74 61 62 6c 65  tween this table
1b2f0 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
1b300 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  s */.      unsig
1b310 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a  ned notIndexed :
1b320 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
1b330 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20   there is a NOT 
1b340 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a  INDEXED clause *
1b350 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
1b360 20 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b   isIndexedBy :1;
1b370 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1b380 65 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45  ere is an INDEXE
1b390 44 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  D BY clause */. 
1b3a0 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
1b3b0 54 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20  TabFunc :1;     
1b3c0 2f 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c 65  /* True if table
1b3d0 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e  -valued-function
1b3e0 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20   syntax */.     
1b3f0 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72   unsigned isCorr
1b400 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54  elated :1;  /* T
1b410 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79  rue if sub-query
1b420 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a   is correlated *
1b430 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
1b440 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31   viaCoroutine :1
1b450 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65  ;  /* Implemente
1b460 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e  d as a co-routin
1b470 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  e */.      unsig
1b480 6e 65 64 20 69 73 52 65 63 75 72 73 69 76 65 20  ned isRecursive 
1b490 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  :1;   /* True fo
1b4a0 72 20 72 65 63 75 72 73 69 76 65 20 72 65 66 65  r recursive refe
1b4b0 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f  rence in WITH */
1b4c0 0a 20 20 20 20 7d 20 66 67 3b 0a 20 20 20 20 69  .    } fg;.    i
1b4d0 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20  nt iCursor;     
1b4e0 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
1b4f0 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20  sor number used 
1b500 74 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74  to access this t
1b510 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72  able */.    Expr
1b520 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a   *pOn;        /*
1b530 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f   The ON clause o
1b540 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20  f a join */.    
1b550 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20  IdList *pUsing; 
1b560 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63    /* The USING c
1b570 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
1b580 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63  */.    Bitmask c
1b590 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20  olUsed;  /* Bit 
1b5a0 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20  N (1<<N) set if 
1b5b0 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62  column N of pTab
1b5c0 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20   is used */.    
1b5d0 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68  union {.      ch
1b5e0 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20  ar *zIndexedBy; 
1b5f0 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72     /* Identifier
1b600 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42   from "INDEXED B
1b610 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75  Y <zIndex>" clau
1b620 73 65 20 2a 2f 0a 20 20 20 20 20 20 45 78 70 72  se */.      Expr
1b630 4c 69 73 74 20 2a 70 46 75 6e 63 41 72 67 3b 20  List *pFuncArg; 
1b640 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74 6f   /* Arguments to
1b650 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75   table-valued-fu
1b660 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20  nction */.    } 
1b670 75 31 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70  u1;.    Index *p
1b680 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64  IBIndex;  /* Ind
1b690 65 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72  ex structure cor
1b6a0 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31  responding to u1
1b6b0 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20  .zIndexedBy */. 
1b6c0 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20   } a[1];        
1b6d0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
1b6e0 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74  y for each ident
1b6f0 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73  ifier on the lis
1b700 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  t */.};../*.** P
1b710 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20  ermitted values 
1b720 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  of the SrcList.a
1b730 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a  .jointype field.
1b740 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e  */.#define JT_IN
1b750 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20  NER     0x0001  
1b760 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66    /* Any kind of
1b770 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20   inner or cross 
1b780 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
1b790 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30  JT_CROSS     0x0
1b7a0 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63  002    /* Explic
1b7b0 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52  it use of the CR
1b7c0 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  OSS keyword */.#
1b7d0 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41  define JT_NATURA
1b7e0 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a  L   0x0004    /*
1b7f0 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74   True for a "nat
1b800 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64  ural" join */.#d
1b810 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20  efine JT_LEFT   
1b820 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
1b830 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  Left outer join 
1b840 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49  */.#define JT_RI
1b850 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20  GHT     0x0010  
1b860 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72    /* Right outer
1b870 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
1b880 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78   JT_OUTER     0x
1b890 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22  0020    /* The "
1b8a0 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69  OUTER" keyword i
1b8b0 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65  s present */.#de
1b8c0 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20  fine JT_ERROR   
1b8d0 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75    0x0040    /* u
1b8e0 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70  nknown or unsupp
1b8f0 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20  orted join type 
1b900 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73  */.../*.** Flags
1b910 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72   appropriate for
1b920 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20   the wctrlFlags 
1b930 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c  parameter of sql
1b940 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29  ite3WhereBegin()
1b950 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72  .** and the Wher
1b960 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73  eInfo.wctrlFlags
1b970 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56   member..**.** V
1b980 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
1b990 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61   (enforced via a
1b9a0 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
1b9b0 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54   WHERE_USE_LIMIT
1b9c0 20 20 3d 3d 20 53 46 5f 46 69 78 65 64 4c 69 6d    == SF_FixedLim
1b9d0 69 74 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  it.*/.#define WH
1b9e0 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d  ERE_ORDERBY_NORM
1b9f0 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e  AL   0x0000 /* N
1ba00 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  o-op */.#define 
1ba10 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49  WHERE_ORDERBY_MI
1ba20 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a  N      0x0001 /*
1ba30 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
1ba40 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66  sing for min() f
1ba50 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
1ba60 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58  HERE_ORDERBY_MAX
1ba70 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20        0x0002 /* 
1ba80 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
1ba90 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75  ing for max() fu
1baa0 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
1bab0 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49  ERE_ONEPASS_DESI
1bac0 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57  RED  0x0004 /* W
1bad0 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61  ant to do one-pa
1bae0 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45  ss UPDATE/DELETE
1baf0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1bb00 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 52  E_ONEPASS_MULTIR
1bb10 4f 57 20 30 78 30 30 30 38 20 2f 2a 20 4f 4e 45  OW 0x0008 /* ONE
1bb20 50 41 53 53 20 69 73 20 6f 6b 20 77 69 74 68 20  PASS is ok with 
1bb30 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
1bb40 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1bb50 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20  UPLICATES_OK    
1bb60 30 78 30 30 31 30 20 2f 2a 20 4f 6b 20 74 6f 20  0x0010 /* Ok to 
1bb70 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72  return a row mor
1bb80 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23  e than once */.#
1bb90 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 5f  define WHERE_OR_
1bba0 53 55 42 43 4c 41 55 53 45 20 20 20 20 20 30 78  SUBCLAUSE     0x
1bbb0 30 30 32 30 20 2f 2a 20 50 72 6f 63 65 73 73 69  0020 /* Processi
1bbc0 6e 67 20 61 20 73 75 62 2d 57 48 45 52 45 20 61  ng a sub-WHERE a
1bbd0 73 20 70 61 72 74 20 6f 66 0a 20 20 20 20 20 20  s part of.      
1bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc00 2a 2a 20 74 68 65 20 4f 52 20 6f 70 74 69 6d 69  ** the OR optimi
1bc10 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23 64 65 66 69  zation  */.#defi
1bc20 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59  ne WHERE_GROUPBY
1bc30 20 20 20 20 20 20 20 20 20 20 30 78 30 30 34 30            0x0040
1bc40 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20   /* pOrderBy is 
1bc50 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42  really a GROUP B
1bc60 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  Y */.#define WHE
1bc70 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20  RE_DISTINCTBY   
1bc80 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20 70 4f      0x0080 /* pO
1bc90 72 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79  rderby is really
1bca0 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75   a DISTINCT clau
1bcb0 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  se */.#define WH
1bcc0 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43  ERE_WANT_DISTINC
1bcd0 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 41  T    0x0100 /* A
1bce0 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20  ll output needs 
1bcf0 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a  to be distinct *
1bd00 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1bd10 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20  SORTBYGROUP     
1bd20 20 30 78 30 32 30 30 20 2f 2a 20 53 75 70 70 6f   0x0200 /* Suppo
1bd30 72 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  rt sqlite3WhereI
1bd40 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65  sSorted() */.#de
1bd50 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f  fine WHERE_SEEK_
1bd60 54 41 42 4c 45 20 20 20 20 20 20 20 30 78 30 34  TABLE       0x04
1bd70 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66  00 /* Do not def
1bd80 65 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61 69 6e  er seeks on main
1bd90 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
1bda0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
1bdb0 4c 49 4d 49 54 20 20 20 20 30 78 30 38 30 30 20  LIMIT    0x0800 
1bdc0 2f 2a 20 4f 52 44 45 52 42 59 2b 4c 49 4d 49 54  /* ORDERBY+LIMIT
1bdd0 20 6f 6e 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f   on the inner lo
1bde0 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  op */.#define WH
1bdf0 45 52 45 5f 53 45 45 4b 5f 55 4e 49 51 5f 54 41  ERE_SEEK_UNIQ_TA
1be00 42 4c 45 20 20 30 78 31 30 30 30 20 2f 2a 20 44  BLE  0x1000 /* D
1be10 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b  o not defer seek
1be20 73 20 69 66 20 75 6e 69 71 75 65 20 2a 2f 0a 20  s if unique */. 
1be30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be40 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78         /*     0x
1be50 32 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72  2000    not curr
1be60 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 23 64  ently used */.#d
1be70 65 66 69 6e 65 20 57 48 45 52 45 5f 55 53 45 5f  efine WHERE_USE_
1be80 4c 49 4d 49 54 20 20 20 20 20 20 20 20 30 78 34  LIMIT        0x4
1be90 30 30 30 20 2f 2a 20 55 73 65 20 74 68 65 20 4c  000 /* Use the L
1bea0 49 4d 49 54 20 69 6e 20 63 6f 73 74 20 65 73 74  IMIT in cost est
1beb0 69 6d 61 74 65 73 20 2a 2f 0a 20 20 20 20 20 20  imates */.      
1bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bed0 20 20 2f 2a 20 20 20 20 20 30 78 38 30 30 30 20    /*     0x8000 
1bee0 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79     not currently
1bef0 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c   used */../* All
1bf00 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
1bf10 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57  es from sqlite3W
1bf20 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 29  hereIsDistinct()
1bf30 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52  .*/.#define WHER
1bf40 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20  E_DISTINCT_NOOP 
1bf50 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49       0  /* DISTI
1bf60 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20  NCT keyword not 
1bf70 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
1bf80 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
1bf90 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e  NIQUE    1  /* N
1bfa0 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a  o duplicates */.
1bfb0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1bfc0 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20  STINCT_ORDERED  
1bfd0 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69   2  /* All dupli
1bfe0 63 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65  cates are adjace
1bff0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nt */.#define WH
1c000 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f  ERE_DISTINCT_UNO
1c010 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70  RDERED 3  /* Dup
1c020 6c 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74  licates are scat
1c030 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tered */../*.** 
1c040 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65  A NameContext de
1c050 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20  fines a context 
1c060 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f  in which to reso
1c070 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f  lve table and co
1c080 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20  lumn.** names.  
1c090 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73  The context cons
1c0a0 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f  ists of a list o
1c0b0 66 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53  f tables (the pS
1c0c0 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e  rcList) field an
1c0d0 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e  d.** a list of n
1c0e0 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
1c0f0 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e  (pEList).  The n
1c100 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
1c110 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e  list may.** be N
1c120 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63  ULL.  The pSrc c
1c130 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
1c140 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
1c150 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20   a SELECT or.** 
1c160 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  to the table bei
1c170 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62  ng operated on b
1c180 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  y INSERT, UPDATE
1c190 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68  , or DELETE.  Th
1c1a0 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72  e.** pEList corr
1c1b0 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72  esponds to the r
1c1c0 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53  esult set of a S
1c1d0 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c  ELECT and is NUL
1c1e0 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73  L for.** other s
1c1f0 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
1c200 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61   NameContexts ca
1c210 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68  n be nested.  Wh
1c220 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  en resolving nam
1c230 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f  es, the inner-mo
1c240 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  st.** context is
1c250 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e   searched first.
1c260 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73    If no match is
1c270 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74   found, the next
1c280 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78   outer.** contex
1c290 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49  t is checked.  I
1c2a0 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c  f there is still
1c2b0 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e   no match, the n
1c2c0 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69  ext context.** i
1c2d0 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73  s checked.  This
1c2e0 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75   process continu
1c2f0 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20  es until either 
1c300 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
1c310 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65  .** or all conte
1c320 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20  xts are check.  
1c330 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20  When a match is 
1c340 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20  found, the nRef 
1c350 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65  member of.** the
1c360 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e   context contain
1c370 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73  ing the match is
1c380 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a   incremented..**
1c390 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72  .** Each subquer
1c3a0 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d  y gets a new Nam
1c3b0 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70  eContext.  The p
1c3c0 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74  Next field point
1c3d0 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  s to the.** Name
1c3e0 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70  Context in the p
1c3f0 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68  arent query.  Th
1c400 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f  us the process o
1c410 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a  f scanning the.*
1c420 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69  * NameContext li
1c430 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
1c440 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f  o searching thro
1c450 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79  ugh successively
1c460 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65   outer.** subque
1c470 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  ries looking for
1c480 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72   a match..*/.str
1c490 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  uct NameContext 
1c4a0 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
1c4b0 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  e;       /* The 
1c4c0 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c  parser */.  SrcL
1c4d0 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20  ist *pSrcList;  
1c4e0 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
1c4f0 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72  tables used to r
1c500 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a  esolve names */.
1c510 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78    union {.    Ex
1c520 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
1c530 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c     /* Optional l
1c540 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65  ist of result-se
1c550 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 20  t columns */.   
1c560 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
1c570 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  fo;   /* Informa
1c580 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65  tion about aggre
1c590 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65  gates at this le
1c5a0 76 65 6c 20 2a 2f 0a 20 20 20 20 55 70 73 65 72  vel */.    Upser
1c5b0 74 20 2a 70 55 70 73 65 72 74 3b 20 20 20 20 20  t *pUpsert;     
1c5c0 2f 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  /* ON CONFLICT c
1c5d0 6c 61 75 73 65 20 69 6e 66 6f 72 6d 61 74 69 6f  lause informatio
1c5e0 6e 20 66 72 6f 6d 20 61 6e 20 75 70 73 65 72 74  n from an upsert
1c5f0 20 2a 2f 0a 20 20 7d 20 75 4e 43 3b 0a 20 20 4e   */.  } uNC;.  N
1c600 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78  ameContext *pNex
1c610 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65  t;  /* Next oute
1c620 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20  r name context. 
1c630 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d   NULL for outerm
1c640 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  ost */.  int nRe
1c650 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  f;            /*
1c660 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73   Number of names
1c670 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69   resolved by thi
1c680 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69  s context */.  i
1c690 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
1c6a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1c6b0 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65   errors encounte
1c6c0 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76  red while resolv
1c6d0 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75  ing names */.  u
1c6e0 31 36 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20  16 ncFlags;     
1c6f0 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d      /* Zero or m
1c700 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64  ore NC_* flags d
1c710 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a  efined below */.
1c720 20 20 53 65 6c 65 63 74 20 2a 70 57 69 6e 53 65    Select *pWinSe
1c730 6c 65 63 74 3b 20 20 2f 2a 20 53 45 4c 45 43 54  lect;  /* SELECT
1c740 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20 61   statement for a
1c750 6e 79 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69  ny window functi
1c760 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ons */.};../*.**
1c770 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
1c780 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74  for the NameCont
1c790 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65  ext, ncFlags fie
1c7a0 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  ld..**.** Value 
1c7b0 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c  constraints (all
1c7c0 20 63 68 65 63 6b 65 64 20 76 69 61 20 61 73 73   checked via ass
1c7d0 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4e 43  ert()):.**    NC
1c7e0 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20 53 46  _HasAgg    == SF
1c7f0 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 4e 43  _HasAgg.**    NC
1c800 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 46  _MinMaxAgg == SF
1c810 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 51  _MinMaxAgg == SQ
1c820 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
1c830 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  .**.*/.#define N
1c840 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 30  C_AllowAgg  0x00
1c850 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  01  /* Aggregate
1c860 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61   functions are a
1c870 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23  llowed here */.#
1c880 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64  define NC_PartId
1c890 78 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 54  x   0x0002  /* T
1c8a0 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67  rue if resolving
1c8b0 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78   a partial index
1c8c0 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e   WHERE */.#defin
1c8d0 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30  e NC_IsCheck   0
1c8e0 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69  x0004  /* True i
1c8f0 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  f resolving name
1c900 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e  s in a CHECK con
1c910 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
1c920 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20  ne NC_InAggFunc 
1c930 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20  0x0008  /* True 
1c940 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67  if analyzing arg
1c950 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67  uments to an agg
1c960 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
1c970 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78   NC_HasAgg    0x
1c980 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  0010  /* One or 
1c990 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
1c9a0 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f  unctions seen */
1c9b0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64 78 45  .#define NC_IdxE
1c9c0 78 70 72 20 20 20 30 78 30 30 32 30 20 20 2f 2a  xpr   0x0020  /*
1c9d0 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
1c9e0 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43 52  ng columns of CR
1c9f0 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64  EATE INDEX */.#d
1ca00 65 66 69 6e 65 20 4e 43 5f 56 61 72 53 65 6c 65  efine NC_VarSele
1ca10 63 74 20 30 78 30 30 34 30 20 20 2f 2a 20 41 20  ct 0x0040  /* A 
1ca20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75  correlated subqu
1ca30 65 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 65  ery has been see
1ca40 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  n */.#define NC_
1ca50 55 45 4c 69 73 74 20 20 20 20 30 78 30 30 38 30  UEList    0x0080
1ca60 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43    /* True if uNC
1ca70 2e 70 45 4c 69 73 74 20 69 73 20 75 73 65 64 20  .pEList is used 
1ca80 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 41  */.#define NC_UA
1ca90 67 67 49 6e 66 6f 20 20 30 78 30 31 30 30 20 20  ggInfo  0x0100  
1caa0 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70  /* True if uNC.p
1cab0 41 67 67 49 6e 66 6f 20 69 73 20 75 73 65 64 20  AggInfo is used 
1cac0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 55  */.#define NC_UU
1cad0 70 73 65 72 74 20 20 20 30 78 30 32 30 30 20 20  psert   0x0200  
1cae0 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70  /* True if uNC.p
1caf0 55 70 73 65 72 74 20 69 73 20 75 73 65 64 20 2a  Upsert is used *
1cb00 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e  /.#define NC_Min
1cb10 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f  MaxAgg 0x1000  /
1cb20 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67  * min/max aggreg
1cb30 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20  ates seen.  See 
1cb40 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64  note above */.#d
1cb50 65 66 69 6e 65 20 4e 43 5f 43 6f 6d 70 6c 65 78  efine NC_Complex
1cb60 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20 54 72     0x2000  /* Tr
1cb70 75 65 20 69 66 20 61 20 66 75 6e 63 74 69 6f 6e  ue if a function
1cb80 20 6f 72 20 73 75 62 71 75 65 72 79 20 73 65 65   or subquery see
1cb90 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  n */.#define NC_
1cba0 41 6c 6c 6f 77 57 69 6e 20 20 30 78 34 30 30 30  AllowWin  0x4000
1cbb0 20 20 2f 2a 20 57 69 6e 64 6f 77 20 66 75 6e 63    /* Window func
1cbc0 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65  tions are allowe
1cbd0 64 20 68 65 72 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  d here */../*.**
1cbe0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1cbf0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 62  the following ob
1cc00 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20 61  ject describes a
1cc10 20 73 69 6e 67 6c 65 20 4f 4e 20 43 4f 4e 46 4c   single ON CONFL
1cc20 49 43 54 0a 2a 2a 20 63 6c 61 75 73 65 20 69 6e  ICT.** clause in
1cc30 20 61 6e 20 75 70 73 65 72 74 2e 0a 2a 2a 0a 2a   an upsert..**.*
1cc40 2a 20 54 68 65 20 70 55 70 73 65 72 74 54 61 72  * The pUpsertTar
1cc50 67 65 74 20 66 69 65 6c 64 20 69 73 20 6f 6e 6c  get field is onl
1cc60 79 20 73 65 74 20 69 66 20 74 68 65 20 4f 4e 20  y set if the ON 
1cc70 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
1cc80 69 6e 63 6c 75 64 65 73 0a 2a 2a 20 63 6f 6e 66  includes.** conf
1cc90 6c 69 63 74 2d 74 61 72 67 65 74 20 63 6c 61 75  lict-target clau
1cca0 73 65 2e 20 20 28 49 6e 20 22 4f 4e 20 43 4f 4e  se.  (In "ON CON
1ccb0 46 4c 49 43 54 28 61 2c 62 29 22 20 74 68 65 20  FLICT(a,b)" the 
1ccc0 22 28 61 2c 62 29 22 20 69 73 20 74 68 65 0a 2a  "(a,b)" is the.*
1ccd0 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65  * conflict-targe
1cce0 74 20 63 6c 61 75 73 65 2e 29 20 20 54 68 65 20  t clause.)  The 
1ccf0 70 55 70 73 65 72 74 54 61 72 67 65 74 57 68 65  pUpsertTargetWhe
1cd00 72 65 20 69 73 20 74 68 65 20 6f 70 74 69 6f 6e  re is the option
1cd10 61 6c 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61 75  al.** WHERE clau
1cd20 73 65 20 75 73 65 64 20 74 6f 20 69 64 65 6e 74  se used to ident
1cd30 69 66 79 20 70 61 72 74 69 61 6c 20 75 6e 69 71  ify partial uniq
1cd40 75 65 20 69 6e 64 65 78 65 73 2e 0a 2a 2a 0a 2a  ue indexes..**.*
1cd50 2a 20 70 55 70 73 65 72 74 53 65 74 20 69 73 20  * pUpsertSet is 
1cd60 74 68 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75  the list of colu
1cd70 6d 6e 3d 65 78 70 72 20 74 65 72 6d 73 20 6f 66  mn=expr terms of
1cd80 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
1cd90 65 6d 65 6e 74 2e 20 0a 2a 2a 20 54 68 65 20 70  ement. .** The p
1cda0 55 70 73 65 72 74 53 65 74 20 66 69 65 6c 64 20  UpsertSet field 
1cdb0 69 73 20 4e 55 4c 4c 20 66 6f 72 20 61 20 4f 4e  is NULL for a ON
1cdc0 20 43 4f 4e 46 4c 49 43 54 20 44 4f 20 4e 4f 54   CONFLICT DO NOT
1cdd0 48 49 4e 47 2e 20 20 54 68 65 0a 2a 2a 20 70 55  HING.  The.** pU
1cde0 70 73 65 72 74 57 68 65 72 65 20 69 73 20 74 68  psertWhere is th
1cdf0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
1ce00 6f 72 20 74 68 65 20 55 50 44 41 54 45 20 61 6e  or the UPDATE an
1ce10 64 20 69 73 20 4e 55 4c 4c 20 69 66 20 74 68 65  d is NULL if the
1ce20 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65  .** WHERE clause
1ce30 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a 2a 2f 0a   is omitted..*/.
1ce40 73 74 72 75 63 74 20 55 70 73 65 72 74 20 7b 0a  struct Upsert {.
1ce50 20 20 45 78 70 72 4c 69 73 74 20 2a 70 55 70 73    ExprList *pUps
1ce60 65 72 74 54 61 72 67 65 74 3b 20 20 2f 2a 20 4f  ertTarget;  /* O
1ce70 70 74 69 6f 6e 61 6c 20 64 65 73 63 72 69 70 74  ptional descript
1ce80 69 6f 6e 20 6f 66 20 63 6f 6e 66 6c 69 63 74 69  ion of conflicti
1ce90 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78  ng index */.  Ex
1cea0 70 72 20 2a 70 55 70 73 65 72 74 54 61 72 67 65  pr *pUpsertTarge
1ceb0 74 57 68 65 72 65 3b 20 2f 2a 20 57 48 45 52 45  tWhere; /* WHERE
1cec0 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74   clause for part
1ced0 69 61 6c 20 69 6e 64 65 78 20 74 61 72 67 65 74  ial index target
1cee0 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
1cef0 2a 70 55 70 73 65 72 74 53 65 74 3b 20 20 20 20  *pUpsertSet;    
1cf00 20 2f 2a 20 54 68 65 20 53 45 54 20 63 6c 61 75   /* The SET clau
1cf10 73 65 20 66 72 6f 6d 20 61 6e 20 4f 4e 20 43 4f  se from an ON CO
1cf20 4e 46 4c 49 43 54 20 55 50 44 41 54 45 20 2a 2f  NFLICT UPDATE */
1cf30 0a 20 20 45 78 70 72 20 2a 70 55 70 73 65 72 74  .  Expr *pUpsert
1cf40 57 68 65 72 65 3b 20 20 20 20 20 20 20 2f 2a 20  Where;       /* 
1cf50 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
1cf60 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
1cf70 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 2f 2a 20   UPDATE */.  /* 
1cf80 54 68 65 20 66 69 65 6c 64 73 20 61 62 6f 76 65  The fields above
1cf90 20 63 6f 6d 70 72 69 73 65 20 74 68 65 20 70 61   comprise the pa
1cfa0 72 73 65 20 74 72 65 65 20 66 6f 72 20 74 68 65  rse tree for the
1cfb0 20 75 70 73 65 72 74 20 63 6c 61 75 73 65 2e 0a   upsert clause..
1cfc0 20 20 2a 2a 20 54 68 65 20 66 69 65 6c 64 73 20    ** The fields 
1cfd0 62 65 6c 6f 77 20 61 72 65 20 75 73 65 64 20 74  below are used t
1cfe0 6f 20 74 72 61 6e 73 66 65 72 20 69 6e 66 6f 72  o transfer infor
1cff0 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20  mation from the 
1d000 49 4e 53 45 52 54 0a 20 20 2a 2a 20 70 72 6f 63  INSERT.  ** proc
1d010 65 73 73 69 6e 67 20 64 6f 77 6e 20 69 6e 74 6f  essing down into
1d020 20 74 68 65 20 55 50 44 41 54 45 20 70 72 6f 63   the UPDATE proc
1d030 65 73 73 69 6e 67 20 77 68 69 6c 65 20 67 65 6e  essing while gen
1d040 65 72 61 74 69 6e 67 20 63 6f 64 65 2e 0a 20 20  erating code..  
1d050 2a 2a 20 55 70 73 65 72 74 20 6f 77 6e 73 20 74  ** Upsert owns t
1d060 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  he memory alloca
1d070 74 65 64 20 61 62 6f 76 65 2c 20 62 75 74 20 6e  ted above, but n
1d080 6f 74 20 74 68 65 20 6d 65 6d 6f 72 79 20 62 65  ot the memory be
1d090 6c 6f 77 2e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  low. */.  Index 
1d0a0 2a 70 55 70 73 65 72 74 49 64 78 3b 20 20 20 20  *pUpsertIdx;    
1d0b0 20 20 20 20 2f 2a 20 43 6f 6e 73 74 72 61 69 6e      /* Constrain
1d0c0 74 20 74 68 61 74 20 70 55 70 73 65 72 74 54 61  t that pUpsertTa
1d0d0 72 67 65 74 20 69 64 65 6e 74 69 66 69 65 73 20  rget identifies 
1d0e0 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 55  */.  SrcList *pU
1d0f0 70 73 65 72 74 53 72 63 3b 20 20 20 20 20 20 2f  psertSrc;      /
1d100 2a 20 54 61 62 6c 65 20 74 6f 20 62 65 20 75 70  * Table to be up
1d110 64 61 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72  dated */.  int r
1d120 65 67 44 61 74 61 3b 20 20 20 20 20 20 20 20 20  egData;         
1d130 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65       /* First re
1d140 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 61  gister holding a
1d150 72 72 61 79 20 6f 66 20 56 41 4c 55 45 53 20 2a  rray of VALUES *
1d160 2f 0a 20 20 69 6e 74 20 69 44 61 74 61 43 75 72  /.  int iDataCur
1d170 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1d180 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   Index of the da
1d190 74 61 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 69  ta cursor */.  i
1d1a0 6e 74 20 69 49 64 78 43 75 72 3b 20 20 20 20 20  nt iIdxCur;     
1d1b0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
1d1c0 78 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 69  x of the first i
1d1d0 6e 64 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a 7d  ndex cursor */.}
1d1e0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
1d1f0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1d200 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1d210 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66  contains all inf
1d220 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64  ormation.** need
1d230 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63  ed to generate c
1d240 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  ode for a single
1d250 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1d260 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65  t..**.** See the
1d270 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20   header comment 
1d280 6f 6e 20 74 68 65 20 63 6f 6d 70 75 74 65 4c 69  on the computeLi
1d290 6d 69 74 52 65 67 69 73 74 65 72 73 28 29 20 72  mitRegisters() r
1d2a0 6f 75 74 69 6e 65 20 66 6f 72 20 61 0a 2a 2a 20  outine for a.** 
1d2b0 64 65 74 61 69 6c 65 64 20 64 65 73 63 72 69 70  detailed descrip
1d2c0 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 65 61 6e  tion of the mean
1d2d0 69 6e 67 20 6f 66 20 74 68 65 20 69 4c 69 6d 69  ing of the iLimi
1d2e0 74 20 61 6e 64 20 69 4f 66 66 73 65 74 20 66 69  t and iOffset fi
1d2f0 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72  elds..**.** addr
1d300 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69  OpenEphm[] entri
1d310 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61  es contain the a
1d320 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65  ddress of OP_Ope
1d330 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64  nEphemeral opcod
1d340 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64  es..** These add
1d350 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20 73  resses must be s
1d360 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77 65  tored so that we
1d370 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64   can go back and
1d380 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20   fill in.** the 
1d390 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50  P4_KEYINFO and P
1d3a0 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74  2 parameters lat
1d3b0 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65  er.  Neither the
1d3c0 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20   KeyInfo nor.** 
1d3d0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1d3e0 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20  lumns in P2 can 
1d3f0 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74  be computed at t
1d400 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20  he same time.** 
1d410 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70  as the OP_OpenEp
1d420 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  hm instruction i
1d430 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20  s coded because 
1d440 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e  not.** enough in
1d450 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
1d460 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  the compound que
1d470 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74  ry is known at t
1d480 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68  hat point..** Th
1d490 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
1d4a0 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e  drOpenTran[0] an
1d4b0 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63  d [1] contains c
1d4c0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
1d4d0 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65  es.** for the re
1d4e0 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b  sult set.  The K
1d4f0 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
1d500 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61  penEphm[2] conta
1d510 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a  ins collating.**
1d520 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74   sequences for t
1d530 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1d540 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65  se..*/.struct Se
1d550 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73  lect {.  ExprLis
1d560 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20  t *pEList;      
1d570 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66  /* The fields of
1d580 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20   the result */. 
1d590 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
1d5a0 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
1d5b0 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41  f: TK_UNION TK_A
1d5c0 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20  LL TK_INTERSECT 
1d5d0 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c  TK_EXCEPT */.  L
1d5e0 6f 67 45 73 74 20 6e 53 65 6c 65 63 74 52 6f 77  ogEst nSelectRow
1d5f0 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  ;     /* Estimat
1d600 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73  ed number of res
1d610 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33  ult rows */.  u3
1d620 32 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20  2 selFlags;     
1d630 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20       /* Various 
1d640 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  SF_* values */. 
1d650 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66   int iLimit, iOf
1d660 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72  fset;   /* Memor
1d670 79 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64  y registers hold
1d680 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53  ing LIMIT & OFFS
1d690 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20  ET counters */. 
1d6a0 20 75 33 32 20 73 65 6c 49 64 3b 20 20 20 20 20   u32 selId;     
1d6b0 20 20 20 20 20 20 20 20 2f 2a 20 55 6e 69 71 75          /* Uniqu
1d6c0 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e 75 6d  e identifier num
1d6d0 62 65 72 20 66 6f 72 20 74 68 69 73 20 53 45 4c  ber for this SEL
1d6e0 45 43 54 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64  ECT */.  int add
1d6f0 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20  rOpenEphm[2];   
1d700 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20  /* OP_OpenEphem 
1d710 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20  opcodes related 
1d720 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a  to this select *
1d730 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
1d740 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
1d750 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
1d760 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
1d770 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1d780 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
1d790 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
1d7a0 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  oupBy;    /* The
1d7b0 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
1d7c0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76   */.  Expr *pHav
1d7d0 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ing;         /* 
1d7e0 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
1d7f0 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
1d800 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a  *pOrderBy;    /*
1d810 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
1d820 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ause */.  Select
1d830 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20   *pPrior;       
1d840 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74   /* Prior select
1d850 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   in a compound s
1d860 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
1d870 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65  */.  Select *pNe
1d880 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
1d890 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68  ext select to th
1d8a0 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70  e left in a comp
1d8b0 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ound */.  Expr *
1d8c0 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20  pLimit;         
1d8d0 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73   /* LIMIT expres
1d8e0 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
1d8f0 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
1d900 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20  With *pWith;    
1d910 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63         /* WITH c
1d920 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20 74  lause attached t
1d930 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f  o this select. O
1d940 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 23 69 66 6e 64  r NULL. */.#ifnd
1d950 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
1d960 49 4e 44 4f 57 46 55 4e 43 0a 20 20 57 69 6e 64  INDOWFUNC.  Wind
1d970 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20 20 20 20  ow *pWin;       
1d980 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 77 69     /* List of wi
1d990 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a  ndow functions *
1d9a0 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e  /.  Window *pWin
1d9b0 44 65 66 6e 3b 20 20 20 20 20 20 2f 2a 20 4c 69  Defn;      /* Li
1d9c0 73 74 20 6f 66 20 6e 61 6d 65 64 20 77 69 6e 64  st of named wind
1d9d0 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 2a  ow definitions *
1d9e0 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
1d9f0 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
1da00 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c  s for Select.sel
1da10 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46 22  Flags.  The "SF"
1da20 20 70 72 65 66 69 78 20 73 74 61 6e 64 73 20 66   prefix stands f
1da30 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c  or.** "Select Fl
1da40 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  ag"..**.** Value
1da50 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c   constraints (al
1da60 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61 73  l checked via as
1da70 73 65 72 74 28 29 29 0a 2a 2a 20 20 20 20 20 53  sert()).**     S
1da80 46 5f 48 61 73 41 67 67 20 20 20 20 20 3d 3d 20  F_HasAgg     == 
1da90 4e 43 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20  NC_HasAgg.**    
1daa0 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 3d   SF_MinMaxAgg  =
1dab0 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20  = NC_MinMaxAgg  
1dac0 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e     == SQLITE_FUN
1dad0 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20 20 20 20  C_MINMAX.**     
1dae0 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20 3d 3d  SF_FixedLimit ==
1daf0 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54   WHERE_USE_LIMIT
1db00 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44  .*/.#define SF_D
1db10 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 30 78  istinct       0x
1db20 30 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74  00001  /* Output
1db30 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49   should be DISTI
1db40 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NCT */.#define S
1db50 46 5f 41 6c 6c 20 20 20 20 20 20 20 20 20 20 20  F_All           
1db60 20 30 78 30 30 30 30 32 20 20 2f 2a 20 49 6e 63   0x00002  /* Inc
1db70 6c 75 64 65 73 20 74 68 65 20 41 4c 4c 20 6b 65  ludes the ALL ke
1db80 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65  yword */.#define
1db90 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20   SF_Resolved    
1dba0 20 20 20 30 78 30 30 30 30 34 20 20 2f 2a 20 49     0x00004  /* I
1dbb0 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20  dentifiers have 
1dbc0 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f  been resolved */
1dbd0 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72  .#define SF_Aggr
1dbe0 65 67 61 74 65 20 20 20 20 20 20 30 78 30 30 30  egate      0x000
1dbf0 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  08  /* Contains 
1dc00 61 67 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72  agg functions or
1dc10 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23   a GROUP BY */.#
1dc20 64 65 66 69 6e 65 20 53 46 5f 48 61 73 41 67 67  define SF_HasAgg
1dc30 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31 30           0x00010
1dc40 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67    /* Contains ag
1dc50 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1dc60 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
1dc70 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 30  UsesEphemeral  0
1dc80 78 30 30 30 32 30 20 20 2f 2a 20 55 73 65 73 20  x00020  /* Uses 
1dc90 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  the OpenEphemera
1dca0 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66  l opcode */.#def
1dcb0 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20  ine SF_Expanded 
1dcc0 20 20 20 20 20 20 30 78 30 30 30 34 30 20 20 2f        0x00040  /
1dcd0 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  * sqlite3SelectE
1dce0 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f  xpand() called o
1dcf0 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e  n this */.#defin
1dd00 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f  e SF_HasTypeInfo
1dd10 20 20 20 20 30 78 30 30 30 38 30 20 20 2f 2a 20      0x00080  /* 
1dd20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20  FROM subqueries 
1dd30 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64  have Table metad
1dd40 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ata */.#define S
1dd50 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20  F_Compound      
1dd60 20 30 78 30 30 31 30 30 20 20 2f 2a 20 50 61 72   0x00100  /* Par
1dd70 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t of a compound 
1dd80 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65  query */.#define
1dd90 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20   SF_Values      
1dda0 20 20 20 30 78 30 30 32 30 30 20 20 2f 2a 20 53     0x00200  /* S
1ddb0 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20  ynthesized from 
1ddc0 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f  VALUES clause */
1ddd0 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74  .#define SF_Mult
1dde0 69 56 61 6c 75 65 20 20 20 20 20 30 78 30 30 34  iValue     0x004
1ddf0 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41  00  /* Single VA
1de00 4c 55 45 53 20 74 65 72 6d 20 77 69 74 68 20 6d  LUES term with m
1de10 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
1de20 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65  #define SF_Neste
1de30 64 46 72 6f 6d 20 20 20 20 20 30 78 30 30 38 30  dFrom     0x0080
1de40 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20  0  /* Part of a 
1de50 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52  parenthesized FR
1de60 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  OM clause */.#de
1de70 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67  fine SF_MinMaxAg
1de80 67 20 20 20 20 20 20 30 78 30 31 30 30 30 20 20  g      0x01000  
1de90 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f 6e  /* Aggregate con
1dea0 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72  taining min() or
1deb0 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e   max() */.#defin
1dec0 65 20 53 46 5f 52 65 63 75 72 73 69 76 65 20 20  e SF_Recursive  
1ded0 20 20 20 20 30 78 30 32 30 30 30 20 20 2f 2a 20      0x02000  /* 
1dee0 54 68 65 20 72 65 63 75 72 73 69 76 65 20 70 61  The recursive pa
1def0 72 74 20 6f 66 20 61 20 72 65 63 75 72 73 69 76  rt of a recursiv
1df00 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  e CTE */.#define
1df10 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20 20   SF_FixedLimit  
1df20 20 20 20 30 78 30 34 30 30 30 20 20 2f 2a 20 6e     0x04000  /* n
1df30 53 65 6c 65 63 74 52 6f 77 20 73 65 74 20 62 79  SelectRow set by
1df40 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c 49 4d 49   a constant LIMI
1df50 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  T */.#define SF_
1df60 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20 30  MaybeConvert   0
1df70 78 30 38 30 30 30 20 20 2f 2a 20 4e 65 65 64 20  x08000  /* Need 
1df80 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
1df90 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
1dfa0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ) */.#define SF_
1dfb0 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20 20 30  Converted      0
1dfc0 78 31 30 30 30 30 20 20 2f 2a 20 42 79 20 63 6f  x10000  /* By co
1dfd0 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c  nvertCompoundSel
1dfe0 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20  ectToSubquery() 
1dff0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 49 6e  */.#define SF_In
1e000 63 6c 75 64 65 48 69 64 64 65 6e 20 20 30 78 32  cludeHidden  0x2
1e010 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c 75 64 65  0000  /* Include
1e020 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   hidden columns 
1e030 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65  in output */.#de
1e040 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6c 65 78 52  fine SF_ComplexR
1e050 65 73 75 6c 74 20 20 30 78 34 30 30 30 30 20 20  esult  0x40000  
1e060 2f 2a 20 52 65 73 75 6c 74 20 63 6f 6e 74 61 69  /* Result contai
1e070 6e 73 20 73 75 62 71 75 65 72 79 20 6f 72 20 66  ns subquery or f
1e080 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a  unction */../*.*
1e090 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66  * The results of
1e0a0 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65   a SELECT can be
1e0b0 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20   distributed in 
1e0c0 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73  several ways, as
1e0d0 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f   defined.** by o
1e0e0 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
1e0f0 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65  ing macros.  The
1e100 20 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65   "SRT" prefix me
1e110 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75  ans "SELECT Resu
1e120 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a  lt.** Type"..**.
1e130 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e  **     SRT_Union
1e140 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1e150 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e  ults as a key in
1e160 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64   a temporary ind
1e170 65 78 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ex.**           
1e180 20 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69            identi
1e190 66 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69  fied by pDest->i
1e1a0 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20  SDParm..**.**   
1e1b0 20 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20    SRT_Except    
1e1c0 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73    Remove results
1e1d0 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72   from the tempor
1e1e0 61 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d  ary index pDest-
1e1f0 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20  >iSDParm..**.** 
1e200 20 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20      SRT_Exists  
1e210 20 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e      Store a 1 in
1e220 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65   memory cell pDe
1e230 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74  st->iSDParm if t
1e240 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20  he result.**    
1e250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e260 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74   set is not empt
1e270 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  y..**.**     SRT
1e280 5f 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72  _Discard     Thr
1e290 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ow the results a
1e2a0 77 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73  way.  This is us
1e2b0 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20  ed by SELECT.** 
1e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2d0 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77      statements w
1e2e0 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77  ithin triggers w
1e2f0 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73  hose only purpos
1e300 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  e is.**         
1e310 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1e320 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20  side-effects of 
1e330 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
1e340 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   All of the abov
1e350 65 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67  e are free to ig
1e360 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52  nore their ORDER
1e370 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73   BY clause. Thos
1e380 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77  e that.** follow
1e390 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20   must honor the 
1e3a0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1e3b0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f  .**.**     SRT_O
1e3c0 75 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72  utput      Gener
1e3d0 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74  ate a row of out
1e3e0 70 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f  put (using the O
1e3f0 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20  P_ResultRow.**  
1e400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e410 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65     opcode) for e
1e420 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72  ach row in the r
1e430 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  esult set..**.**
1e440 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20       SRT_Mem    
1e450 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20       Only valid 
1e460 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
1e470 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
1e480 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1e490 20 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74           Store t
1e4a0 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  he first column 
1e4b0 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73  of the first res
1e4c0 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20  ult row.**      
1e4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1e4e0 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
1e4f0 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61  ->iSDParm then a
1e500 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a  bandon the rest.
1e510 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e520 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75         of the qu
1e530 65 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69  ery.  This desti
1e540 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22  nation implies "
1e550 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20  LIMIT 1"..**.** 
1e560 20 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20      SRT_Set     
1e570 20 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d      The result m
1e580 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20  ust be a single 
1e590 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65  column.  Store e
1e5a0 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ach.**          
1e5b0 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f             row o
1e5c0 66 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20  f result as the 
1e5d0 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65  key in table pDe
1e5e0 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e600 20 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66      Apply the af
1e610 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66  finity pDest->af
1e620 66 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f  fSdst before sto
1e630 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20  ring.**         
1e640 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1e650 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d  lts.  Used to im
1e660 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c  plement "IN (SEL
1e670 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a  ECT ...)"..**.**
1e680 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61       SRT_EphemTa
1e690 62 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74  b    Create an t
1e6a0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1e6b0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e  Dest->iSDParm an
1e6c0 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20  d store.**      
1e6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e6e0 68 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e  he result there.
1e6f0 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c   The cursor is l
1e700 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a  eft open after.*
1e710 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e720 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e        returning.
1e730 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
1e740 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20  RT_Table except 
1e750 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  that.**         
1e760 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1e770 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65   destination use
1e780 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  s OP_OpenEphemer
1e790 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20  al to create.** 
1e7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7b0 20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69      the table fi
1e7c0 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  rst..**.**     S
1e7d0 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47  RT_Coroutine   G
1e7e0 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75  enerate a co-rou
1e7f0 74 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e  tine that return
1e800 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a  s a new row of.*
1e810 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e820 20 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61        results ea
1e830 63 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e  ch time it is in
1e840 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72  voked.  The entr
1e850 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20  y point.**      
1e860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1e870 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  f the co-routine
1e880 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
1e890 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
1e8a0 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20  DParm.**        
1e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64               and
1e8c0 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20   the result row 
1e8d0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65  is stored in pDe
1e8e0 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74  st->nDest regist
1e8f0 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ers.**          
1e900 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74             start
1e910 69 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e  ing with pDest->
1e920 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  iSdst..**.**    
1e930 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
1e940 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1e950 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
1e960 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1e970 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66  ..**     SRT_Fif
1e980 6f 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73  o        This is
1e990 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54   like SRT_EphemT
1e9a0 61 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74  ab except that t
1e9b0 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20  he table.**     
1e9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9d0 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c  is assumed to al
1e9e0 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20  ready be open.  
1e9f0 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20  SRT_Fifo has.** 
1ea00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea10 20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e      the addition
1ea20 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62  al property of b
1ea30 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e  eing able to ign
1ea40 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
1ea50 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f             the O
1ea60 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1ea70 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
1ea80 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20  stFifo    Store 
1ea90 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d  results in a tem
1eaa0 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1eab0 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1eac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ead0 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65      But also use
1eae0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1eaf0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b   pDest->iSDParm+
1eb00 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  1 as.**         
1eb10 20 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65              a re
1eb20 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f  cord of all prio
1eb30 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67  r results and ig
1eb40 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61  nore any duplica
1eb50 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
1eb60 20 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20            rows. 
1eb70 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44   Name means:  "D
1eb80 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a  istinct Fifo"..*
1eb90 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65  *.**     SRT_Que
1eba0 75 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  ue       Store r
1ebb0 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
1ebc0 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
1ebd0 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a  iSDParm (really.
1ebe0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ebf0 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29         an index)
1ec00 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75  .  Append a sequ
1ec10 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74  ence number so t
1ec20 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a  hat all entries.
1ec30 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ec40 20 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69         are disti
1ec50 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  nct..**.**     S
1ec60 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53  RT_DistQueue   S
1ec70 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1ec80 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
1ec90 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e  Dest->iSDParm on
1eca0 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20  ly if.**        
1ecb0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1ecc0 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73   same record has
1ecd0 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72   never been stor
1ece0 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a  ed before.  The.
1ecf0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ed00 20 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20         index at 
1ed10 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
1ed20 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20   hold all prior 
1ed30 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  stores..*/.#defi
1ed40 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20  ne SRT_Union    
1ed50 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20      1  /* Store 
1ed60 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69  result as keys i
1ed70 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
1ed80 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74  efine SRT_Except
1ed90 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d         2  /* Rem
1eda0 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  ove result from 
1edb0 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f  a UNION index */
1edc0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69  .#define SRT_Exi
1edd0 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20  sts       3  /* 
1ede0 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72  Store 1 if the r
1edf0 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70  esult is not emp
1ee00 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ty */.#define SR
1ee10 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34  T_Discard      4
1ee20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65    /* Do not save
1ee30 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79   the results any
1ee40 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65  where */.#define
1ee50 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
1ee60 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    5  /* Store re
1ee70 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
1ee80 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
1ee90 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
1eea0 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
1eeb0 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   6  /* Like SRT_
1eec0 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65  Fifo, but unique
1eed0 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
1eee0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65  .#define SRT_Que
1eef0 75 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20  ue        7  /* 
1ef00 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
1ef10 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66  an queue */.#def
1ef20 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75  ine SRT_DistQueu
1ef30 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20  e    8  /* Like 
1ef40 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75  SRT_Queue, but u
1ef50 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
1ef60 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52  ly */../* The OR
1ef70 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
1ef80 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c   ignored for all
1ef90 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f   of the above */
1efa0 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62  .#define Ignorab
1efb0 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58  leOrderby(X) ((X
1efc0 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69  ->eDest)<=SRT_Di
1efd0 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e  stQueue)..#defin
1efe0 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20  e SRT_Output    
1eff0 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20     9  /* Output 
1f000 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75  each row of resu
1f010 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
1f020 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30  T_Mem         10
1f030 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1f040 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65  t in a memory ce
1f050 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ll */.#define SR
1f060 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31  T_Set         11
1f070 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1f080 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  ts as keys in an
1f090 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1f0a0 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20  e SRT_EphemTab  
1f0b0 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20    12  /* Create 
1f0c0 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e  transient tab an
1f0d0 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54  d store like SRT
1f0e0 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e  _Table */.#defin
1f0f0 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20  e SRT_Coroutine 
1f100 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74    13  /* Generat
1f110 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  e a single row o
1f120 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
1f130 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20  ine SRT_Table   
1f140 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65      14  /* Store
1f150 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
1f160 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
1f170 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a  c rowid */../*.*
1f180 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1f190 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73   this object des
1f1a0 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20  cribes where to 
1f1b0 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c  put of the resul
1f1c0 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43  ts of.** a SELEC
1f1d0 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
1f1e0 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
1f1f0 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20  t {.  u8 eDest; 
1f200 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f             /* Ho
1f210 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20  w to dispose of 
1f220 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e  the results.  On
1f230 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e   of SRT_* above.
1f240 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72   */.  int iSDPar
1f250 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  m;         /* A 
1f260 70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62  parameter used b
1f270 79 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70  y the eDest disp
1f280 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20  osal method */. 
1f290 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20   int iSdst;     
1f2a0 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
1f2b0 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73  gister where res
1f2c0 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e  ults are written
1f2d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b   */.  int nSdst;
1f2e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f2f0 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
1f300 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20  s allocated */. 
1f310 20 63 68 61 72 20 2a 7a 41 66 66 53 64 73 74 3b   char *zAffSdst;
1f320 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74        /* Affinit
1f330 79 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73  y used when eDes
1f340 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20  t==SRT_Set */.  
1f350 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
1f360 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75  By;  /* Key colu
1f370 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75  mns for SRT_Queu
1f380 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75  e and SRT_DistQu
1f390 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  eue */.};../*.**
1f3a0 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e   During code gen
1f3b0 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65  eration of state
1f3c0 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e  ments that do in
1f3d0 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49  serts into AUTOI
1f3e0 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c  NCREMENT.** tabl
1f3f0 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  es, the followin
1f400 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  g information is
1f410 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
1f420 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63   Table.u.autoInc
1f430 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66  .p.** pointer of
1f440 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d   each autoincrem
1f450 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63  ent table to rec
1f460 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e  ord some side in
1f470 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a  formation that.*
1f480 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  * the code gener
1f490 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20  ator needs.  We 
1f4a0 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72  have to keep per
1f4b0 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65  -table autoincre
1f4c0 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ment.** informat
1f4d0 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65  ion in case inse
1f4e0 72 74 73 20 61 72 65 20 64 6f 6e 65 20 77 69 74  rts are done wit
1f4f0 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54  hin triggers.  T
1f500 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a  riggers do not.*
1f510 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64  * normally coord
1f520 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69  inate their acti
1f530 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64  vities, but we d
1f540 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69  o need to coordi
1f550 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64  nate the.** load
1f560 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f  ing and saving o
1f570 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  f autoincrement 
1f580 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1f590 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
1f5a0 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e  fo {.  AutoincIn
1f5b0 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20  fo *pNext;   /* 
1f5c0 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  Next info block 
1f5d0 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65  in a list of the
1f5e0 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65  m all */.  Table
1f5f0 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
1f600 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69   /* Table this i
1f610 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73  nfo block refers
1f620 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62   to */.  int iDb
1f630 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1f640 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74  * Index in sqlit
1f650 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61  e3.aDb[] of data
1f660 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61  base holding pTa
1f670 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74  b */.  int regCt
1f680 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
1f690 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20  Memory register 
1f6a0 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69  holding the rowi
1f6b0 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a  d counter */.};.
1f6c0 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20  ./*.** At least 
1f6d0 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
1f6e0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1f6f0 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61 74  ructure is creat
1f700 65 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 74  ed for each.** t
1f710 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79 20  rigger that may 
1f720 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20 70  be fired while p
1f730 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54  arsing an INSERT
1f740 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45  , UPDATE or DELE
1f750 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e  TE.** statement.
1f760 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74   All such object
1f770 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
1f780 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  the linked list 
1f790 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72  headed at.** Par
1f7a0 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 61  se.pTriggerPrg a
1f7b0 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20  nd deleted once 
1f7c0 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c  statement compil
1f7d0 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a  ation has been.*
1f7e0 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a  * completed..**.
1f7f0 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70 72  ** A Vdbe sub-pr
1f800 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65  ogram that imple
1f810 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61  ments the body a
1f820 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  nd WHEN clause o
1f830 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69  f trigger.** Tri
1f840 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65 72  ggerPrg.pTrigger
1f850 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66  , assuming a def
1f860 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1f870 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72   clause of.** Tr
1f880 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c  iggerPrg.orconf,
1f890 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
1f8a0 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50 72  e TriggerPrg.pPr
1f8b0 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a  ogram variable..
1f8c0 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54 72  ** The Parse.pTr
1f8d0 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65  iggerPrg list ne
1f8e0 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f  ver contains two
1f8f0 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74 68   entries with th
1f900 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73  e same.** values
1f910 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67   for both pTrigg
1f920 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a  er and orconf..*
1f930 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72  *.** The Trigger
1f940 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20  Prg.aColmask[0] 
1f950 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
1f960 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64  to a mask of old
1f970 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63  .* columns.** ac
1f980 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20 74  cessed (or set t
1f990 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72 73  o 0 for triggers
1f9a0 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73 75   fired as a resu
1f9b0 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a 2a 20  lt of INSERT.** 
1f9c0 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d  statements). Sim
1f9d0 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67  ilarly, the Trig
1f9e0 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b  gerPrg.aColmask[
1f9f0 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  1] variable is s
1fa00 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20  et to.** a mask 
1fa10 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  of new.* columns
1fa20 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f   used by the pro
1fa30 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  gram..*/.struct 
1fa40 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54  TriggerPrg {.  T
1fa50 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72  rigger *pTrigger
1fa60 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65  ;      /* Trigge
1fa70 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77  r this program w
1fa80 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f  as coded from */
1fa90 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
1faa0 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Next;      /* Ne
1fab0 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73  xt entry in Pars
1fac0 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69  e.pTriggerPrg li
1fad0 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  st */.  SubProgr
1fae0 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
1faf0 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65  /* Program imple
1fb00 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72  menting pTrigger
1fb10 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74  /orconf */.  int
1fb20 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
1fb30 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1fb40 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69  ON CONFLICT poli
1fb50 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c  cy */.  u32 aCol
1fb60 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20  mask[2];        
1fb70 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e  /* Masks of old.
1fb80 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  *, new.* columns
1fb90 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a   accessed */.};.
1fba0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61  ./*.** The yDbMa
1fbb0 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72 20  sk datatype for 
1fbc0 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61  the bitmask of a
1fbd0 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
1fbe0 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51  bases..*/.#if SQ
1fbf0 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
1fc00 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20 75  D>30.  typedef u
1fc10 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79 44 62  nsigned char yDb
1fc20 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58  Mask[(SQLITE_MAX
1fc30 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b  _ATTACHED+9)/8];
1fc40 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1fc50 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28  Test(M,I)    (((
1fc60 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28  M)[(I)/8]&(1<<((
1fc70 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20 64 65  I)&7)))!=0).# de
1fc80 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28  fine DbMaskZero(
1fc90 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74 28 28  M)      memset((
1fca0 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a  M),0,sizeof(M)).
1fcb0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53  # define DbMaskS
1fcc0 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b  et(M,I)     (M)[
1fcd0 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29  (I)/8]|=(1<<((I)
1fce0 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  &7)).# define Db
1fcf0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20  MaskAllZero(M)  
1fd00 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c   sqlite3DbMaskAl
1fd10 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e  lZero(M).# defin
1fd20 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28  e DbMaskNonZero(
1fd30 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44 62 4d  M)   (sqlite3DbM
1fd40 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30  askAllZero(M)==0
1fd50 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65  ).#else.  typede
1fd60 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79  f unsigned int y
1fd70 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65  DbMask;.# define
1fd80 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29   DbMaskTest(M,I)
1fd90 20 20 20 20 28 28 28 4d 29 26 28 28 28 79 44 62      (((M)&(((yDb
1fda0 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d  Mask)1)<<(I)))!=
1fdb0 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  0).# define DbMa
1fdc0 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 28  skZero(M)      (
1fdd0 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62  M)=0.# define Db
1fde0 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20  MaskSet(M,I)    
1fdf0 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b   (M)|=(((yDbMask
1fe00 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65 66 69  )1)<<(I)).# defi
1fe10 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  ne DbMaskAllZero
1fe20 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64  (M)   (M)==0.# d
1fe30 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a  efine DbMaskNonZ
1fe40 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a  ero(M)   (M)!=0.
1fe50 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
1fe60 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74   SQL parser cont
1fe70 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20  ext.  A copy of 
1fe80 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
1fe90 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 68  s passed through
1fea0 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20 61  .** the parser a
1feb0 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c  nd down into all
1fec0 20 74 68 65 20 70 61 72 73 65 72 20 61 63 74 69   the parser acti
1fed0 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72  on routine in or
1fee0 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20  der to.** carry 
1fef0 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69  around informati
1ff00 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61  on that is globa
1ff10 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20  l to the entire 
1ff20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  parse..**.** The
1ff30 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64 69   structure is di
1ff40 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70  vided into two p
1ff50 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20  arts.  When the 
1ff60 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a  parser and code.
1ff70 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c  ** generate call
1ff80 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75   themselves recu
1ff90 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72  rsively, the fir
1ffa0 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 73  st part of the s
1ffb0 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63  tructure.** is c
1ffc0 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65 20  onstant but the 
1ffd0 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72  second part is r
1ffe0 65 73 65 74 20 61 74 20 74 68 65 20 62 65 67 69  eset at the begi
1fff0 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66  nning and end of
20000 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69  .** each recursi
20010 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54  on..**.** The nT
20020 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61  ableLock and aTa
20030 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65  bleLock variable
20040 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20  s are only used 
20050 69 66 20 74 68 65 20 73 68 61 72 65 64 2d 63 61  if the shared-ca
20060 63 68 65 0a 2a 2a 20 66 65 61 74 75 72 65 20 69  che.** feature i
20070 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71  s enabled (if sq
20080 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53  lite3Tsd()->useS
20090 68 61 72 65 64 44 61 74 61 20 69 73 20 74 72 75  haredData is tru
200a0 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20  e). They are.** 
200b0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
200c0 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c  e set of table-l
200d0 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20 62 79  ocks required by
200e0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62   the statement b
200f0 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64  eing.** compiled
20100 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  . Function sqlit
20110 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73  e3TableLock() is
20120 20 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74   used to add ent
20130 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c  ries to the.** l
20140 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50  ist..*/.struct P
20150 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  arse {.  sqlite3
20160 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a   *db;         /*
20170 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   The main databa
20180 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
20190 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b    char *zErrMsg;
201a0 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72         /* An err
201b0 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20  or message */.  
201c0 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20  Vdbe *pVdbe;    
201d0 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e       /* An engin
201e0 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20  e for executing 
201f0 64 61 74 61 62 61 73 65 20 62 79 74 65 63 6f 64  database bytecod
20200 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  e */.  int rc;  
20210 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
20220 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20  eturn code from 
20230 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75  execution */.  u
20240 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20  8 colNamesSet;  
20250 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65      /* TRUE afte
20260 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20  r OP_ColumnName 
20270 68 61 73 20 62 65 65 6e 20 69 73 73 75 65 64 20  has been issued 
20280 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38  to pVdbe */.  u8
20290 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20   checkSchema;   
202a0 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68     /* Causes sch
202b0 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b  ema cookie check
202c0 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
202d0 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20  */.  u8 nested; 
202e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
202f0 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
20300 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73 65  lls to the parse
20310 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  r/code generator
20320 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65   */.  u8 nTempRe
20330 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  g;         /* Nu
20340 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72  mber of temporar
20350 79 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 61  y registers in a
20360 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75  TempReg[] */.  u
20370 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20  8 isMultiWrite; 
20380 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73      /* True if s
20390 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64  tatement may mod
203a0 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69  ify/insert multi
203b0 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38  ple rows */.  u8
203c0 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20   mayAbort;      
203d0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74     /* True if st
203e0 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f  atement may thro
203f0 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70  w an ABORT excep
20400 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73  tion */.  u8 has
20410 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f  Compound;      /
20420 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65  * Need to invoke
20430 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
20440 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
20450 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e  () */.  u8 okCon
20460 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20  stFactor;    /* 
20470 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74  OK to factor out
20480 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20   constants */.  
20490 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61 73  u8 disableLookas
204a0 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  ide; /* Number o
204b0 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73 69 64  f times lookasid
204c0 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 61 62  e has been disab
204d0 6c 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61  led */.  int nRa
204e0 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
204f0 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d   Size of the tem
20500 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
20510 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69  block */.  int i
20520 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
20530 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65  /* First registe
20540 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72  r in temporary r
20550 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
20560 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
20570 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20580 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e  r of errors seen
20590 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20   */.  int nTab; 
205a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
205b0 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73  mber of previous
205c0 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42  ly allocated VDB
205d0 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69  E cursors */.  i
205e0 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
205f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
20600 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
20610 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
20620 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20  nt nOpAlloc;    
20630 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
20640 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64   slots allocated
20650 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20   for Vdbe.aOp[] 
20660 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c  */.  int szOpAll
20670 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 42 79 74  oc;       /* Byt
20680 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61  es of memory spa
20690 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  ce allocated for
206a0 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20   Vdbe.aOp[] */. 
206b0 20 69 6e 74 20 69 53 65 6c 66 54 61 62 3b 20 20   int iSelfTab;  
206c0 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 61        /* Table a
206d0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
206e0 6e 20 69 6e 64 65 78 20 6f 6e 20 65 78 70 72 2c  n index on expr,
206f0 20 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20 20   or negative.   
20700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20710 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 62 61      ** of the ba
20720 73 65 20 72 65 67 69 73 74 65 72 20 64 75 72 69  se register duri
20730 6e 67 20 63 68 65 63 6b 2d 63 6f 6e 73 74 72 61  ng check-constra
20740 69 6e 74 20 65 76 61 6c 20 2a 2f 0a 20 20 69 6e  int eval */.  in
20750 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20  t nLabel;       
20760 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20770 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20  labels used */. 
20780 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20   int *aLabel;   
20790 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74        /* Space t
207a0 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c  o hold the label
207b0 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
207c0 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43  *pConstExpr;/* C
207d0 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
207e0 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63  ons */.  Token c
207f0 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a  onstraintName;/*
20800 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
20810 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c  straint currentl
20820 79 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a  y being parsed *
20830 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74  /.  yDbMask writ
20840 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72  eMask;   /* Star
20850 74 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61  t a write transa
20860 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64  ction on these d
20870 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44  atabases */.  yD
20880 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b  bMask cookieMask
20890 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66  ;  /* Bitmask of
208a0 20 73 63 68 65 6d 61 20 76 65 72 69 66 69 65 64   schema verified
208b0 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
208c0 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20  int regRowid;   
208d0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
208e0 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f   holding rowid o
208f0 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65  f CREATE TABLE e
20900 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ntry */.  int re
20910 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f  gRoot;         /
20920 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
20930 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  ng root page num
20940 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65  ber for new obje
20950 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61  cts */.  int nMa
20960 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  xArg;         /*
20970 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65 64   Max args passed
20980 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f   to user functio
20990 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d  n by sub-program
209a0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63   */.  int nSelec
209b0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  t;         /* Nu
209c0 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73  mber of SELECT s
209d0 74 6d 74 73 2e 20 43 6f 75 6e 74 65 72 20 66 6f  tmts. Counter fo
209e0 72 20 53 65 6c 65 63 74 2e 73 65 6c 49 64 20 2a  r Select.selId *
209f0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
20a00 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
20a10 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c  HE.  int nTableL
20a20 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ock;        /* N
20a30 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69  umber of locks i
20a40 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a  n aTableLock */.
20a50 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61    TableLock *aTa
20a60 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75  bleLock; /* Requ
20a70 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73  ired table locks
20a80 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   for shared-cach
20a90 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  e mode */.#endif
20aa0 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
20ab0 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72  pAinc;  /* Infor
20ac0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54  mation about AUT
20ad0 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74  OINCREMENT count
20ae0 65 72 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ers */.  Parse *
20af0 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a  pToplevel;    /*
20b00 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
20b10 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61   for main progra
20b20 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20  m (or NULL) */. 
20b30 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72   Table *pTrigger
20b40 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74  Tab;  /* Table t
20b50 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e  riggers are bein
20b60 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20  g coded for */. 
20b70 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20   int addrCrTab; 
20b80 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
20b90 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 42 74 72   of OP_CreateBtr
20ba0 65 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45  ee opcode on CRE
20bb0 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75  ATE TABLE */.  u
20bc0 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20  32 nQueryLoop;  
20bd0 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65      /* Est numbe
20be0 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
20bf0 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c  of a query (10*l
20c00 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32  og2(N)) */.  u32
20c10 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20   oldmask;       
20c20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64    /* Mask of old
20c30 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
20c40 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e  enced */.  u32 n
20c50 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ewmask;         
20c60 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a  /* Mask of new.*
20c70 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
20c80 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69  ced */.  u8 eTri
20c90 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a  ggerOp;       /*
20ca0 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
20cb0 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45  NSERT or TK_DELE
20cc0 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f  TE */.  u8 eOrco
20cd0 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
20ce0 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
20cf0 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74  ICT policy for t
20d00 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a  rigger steps */.
20d10 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67    u8 disableTrig
20d20 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74  gers;  /* True t
20d30 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65  o disable trigge
20d40 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a  rs */..  /******
20d50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d90 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65 6c 64 73  ****.  ** Fields
20da0 20 61 62 6f 76 65 20 6d 75 73 74 20 62 65 20 69   above must be i
20db0 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65  nitialized to ze
20dc0 72 6f 2e 20 20 54 68 65 20 66 69 65 6c 64 73 20  ro.  The fields 
20dd0 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20 2a  that follow,.  *
20de0 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 62 65  * down to the be
20df0 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 72  ginning of the r
20e00 65 63 75 72 73 69 76 65 20 73 65 63 74 69 6f 6e  ecursive section
20e10 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f  , do not need to
20e20 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c   be.  ** initial
20e30 69 7a 65 64 20 61 73 20 74 68 65 79 20 77 69 6c  ized as they wil
20e40 6c 20 62 65 20 73 65 74 20 62 65 66 6f 72 65 20  l be set before 
20e50 62 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65  being used.  The
20e60 20 62 6f 75 6e 64 61 72 79 20 69 73 0a 20 20 2a   boundary is.  *
20e70 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  * determined by 
20e80 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61  offsetof(Parse,a
20e90 54 65 6d 70 52 65 67 29 2e 0a 20 20 2a 2a 2a 2a  TempReg)..  ****
20ea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20eb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20ec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20ed0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20ee0 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20 61  ******/..  int a
20ef0 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20  TempReg[8];     
20f00 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72     /* Holding ar
20f10 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ea for temporary
20f20 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20   registers */.  
20f30 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e  Token sNameToken
20f40 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e  ;       /* Token
20f50 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65   with unqualifie
20f60 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  d schema object 
20f70 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a  name */..  /****
20f80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20f90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20fa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20fb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20fc0 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20  ****.  ** Above 
20fd0 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77  is constant betw
20fe0 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20  een recursions. 
20ff0 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20   Below is reset 
21000 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72  before and after
21010 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72  .  ** each recur
21020 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64  sion.  The bound
21030 61 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73  ary between thes
21040 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73  e two regions is
21050 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a   determined.  **
21060 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28   using offsetof(
21070 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e  Parse,sLastToken
21080 29 20 73 6f 20 74 68 65 20 73 4c 61 73 74 54 6f  ) so the sLastTo
21090 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73 74 20 62  ken field must b
210a0 65 20 74 68 65 0a 20 20 2a 2a 20 66 69 72 73 74  e the.  ** first
210b0 20 66 69 65 6c 64 20 69 6e 20 74 68 65 20 72 65   field in the re
210c0 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a  cursive region..
210d0 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
210e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
210f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21100 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21110 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54  **********/..  T
21120 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b  oken sLastToken;
21130 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61         /* The la
21140 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20  st token parsed 
21150 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56 61 72 3b  */.  ynVar nVar;
21160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21170 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20  * Number of '?' 
21180 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69  variables seen i
21190 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72  n the SQL so far
211a0 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74   */.  u8 iPkSort
211b0 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
211c0 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20 66  /* ASC or DESC f
211d0 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  or INTEGER PRIMA
211e0 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65  RY KEY */.  u8 e
211f0 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20  xplain;         
21200 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
21210 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61   the EXPLAIN fla
21220 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68  g is found on th
21230 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 20 21  e query */.#if !
21240 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
21250 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
21260 45 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  E) && defined(SQ
21270 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
21280 41 42 4c 45 29 29 0a 20 20 75 38 20 65 50 61 72  ABLE)).  u8 ePar
21290 73 65 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  seMode;         
212a0 20 20 20 2f 2a 20 50 41 52 53 45 5f 4d 4f 44 45     /* PARSE_MODE
212b0 5f 58 58 58 20 63 6f 6e 73 74 61 6e 74 20 2a 2f  _XXX constant */
212c0 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
212d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
212e0 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
212f0 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20  VtabLock;       
21300 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
21310 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  f virtual tables
21320 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64   to lock */.#end
21330 69 66 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  if.  int nHeight
21340 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
21350 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65  * Expression tre
21360 65 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72  e height of curr
21370 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a  ent sub-select *
21380 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
21390 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
213a0 69 6e 74 20 61 64 64 72 45 78 70 6c 61 69 6e 3b  int addrExplain;
213b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64            /* Add
213c0 72 65 73 73 20 6f 66 20 63 75 72 72 65 6e 74 20  ress of current 
213d0 4f 50 5f 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64  OP_Explain opcod
213e0 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 56 4c  e */.#endif.  VL
213f0 69 73 74 20 2a 70 56 4c 69 73 74 3b 20 20 20 20  ist *pVList;    
21400 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69          /* Mappi
21410 6e 67 20 62 65 74 77 65 65 6e 20 76 61 72 69 61  ng between varia
21420 62 6c 65 20 6e 61 6d 65 73 20 61 6e 64 20 6e 75  ble names and nu
21430 6d 62 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20  mbers */.  Vdbe 
21440 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20 20 20  *pReprepare;    
21450 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67       /* VM being
21460 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71 6c   reprepared (sql
21470 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29 29  ite3Reprepare())
21480 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
21490 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20   *zTail;        
214a0 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20  /* All SQL text 
214b0 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 73 65  past the last se
214c0 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a  micolon parsed *
214d0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54  /.  Table *pNewT
214e0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  able;         /*
214f0 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63   A table being c
21500 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52  onstructed by CR
21510 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
21520 49 6e 64 65 78 20 2a 70 4e 65 77 49 6e 64 65 78  Index *pNewIndex
21530 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  ;         /* An 
21540 69 6e 64 65 78 20 62 65 69 6e 67 20 63 6f 6e 73  index being cons
21550 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54  tructed by CREAT
21560 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20 54 72 69  E INDEX */.  Tri
21570 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65  gger *pNewTrigge
21580 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65  r;     /* Trigge
21590 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63  r under construc
215a0 74 20 62 79 20 61 20 43 52 45 41 54 45 20 54 52  t by a CREATE TR
215b0 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74  IGGER */.  const
215c0 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
215d0 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20  ext; /* The 6th 
215e0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d  parameter to db-
215f0 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73  >xAuth callbacks
21600 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
21610 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
21620 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72  ABLE.  Token sAr
21630 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
21640 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78   /* Complete tex
21650 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72  t of a module ar
21660 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c  gument */.  Tabl
21670 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20  e **apVtabLock; 
21680 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
21690 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c   to virtual tabl
216a0 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69  es needing locki
216b0 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  ng */.#endif.  T
216c0 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62  able *pZombieTab
216d0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
216e0 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74   of Table object
216f0 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65  s to delete afte
21700 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20  r code gen */.  
21710 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69  TriggerPrg *pTri
21720 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e  ggerPrg;  /* Lin
21730 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65  ked list of code
21740 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20  d triggers */.  
21750 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20  With *pWith;    
21760 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
21770 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65  rent WITH clause
21780 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57  , or NULL */.  W
21790 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72 65 65  ith *pWithToFree
217a0 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72 65 65  ;        /* Free
217b0 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a 65 63   this WITH objec
217c0 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  t at the end of 
217d0 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 23 69 66  the parse */.#if
217e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
217f0 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 52 65  _ALTERTABLE.  Re
21800 6e 61 6d 65 54 6f 6b 65 6e 20 2a 70 52 65 6e 61  nameToken *pRena
21810 6d 65 3b 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e  me;     /* Token
21820 73 20 73 75 62 6a 65 63 74 20 74 6f 20 72 65 6e  s subject to ren
21830 61 6d 69 6e 67 20 62 79 20 41 4c 54 45 52 20 54  aming by ALTER T
21840 41 42 4c 45 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d  ABLE */.#endif.}
21850 3b 0a 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45  ;..#define PARSE
21860 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 20 20 20 20  _MODE_NORMAL    
21870 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 50 41      0.#define PA
21880 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c 41 52 45  RSE_MODE_DECLARE
21890 5f 56 54 41 42 20 20 31 0a 23 64 65 66 69 6e 65  _VTAB  1.#define
218a0 20 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41   PARSE_MODE_RENA
218b0 4d 45 5f 43 4f 4c 55 4d 4e 20 32 0a 23 64 65 66  ME_COLUMN 2.#def
218c0 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 52  ine PARSE_MODE_R
218d0 45 4e 41 4d 45 5f 54 41 42 4c 45 20 20 33 0a 0a  ENAME_TABLE  3..
218e0 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61 6e 64 20  /*.** Sizes and 
218f0 70 6f 69 6e 74 65 72 73 20 6f 66 20 76 61 72 69  pointers of vari
21900 6f 75 73 20 70 61 72 74 73 20 6f 66 20 74 68 65  ous parts of the
21910 20 50 61 72 73 65 20 6f 62 6a 65 63 74 2e 0a 2a   Parse object..*
21920 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  /.#define PARSE_
21930 48 44 52 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28  HDR_SZ offsetof(
21940 50 61 72 73 65 2c 61 54 65 6d 70 52 65 67 29 20  Parse,aTempReg) 
21950 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70 61 72  /* Recursive par
21960 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63 68 65 2a  t w/o aColCache*
21970 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  /.#define PARSE_
21980 52 45 43 55 52 53 45 5f 53 5a 20 6f 66 66 73 65  RECURSE_SZ offse
21990 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54  tof(Parse,sLastT
219a0 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52 65 63 75  oken)    /* Recu
219b0 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64  rsive part */.#d
219c0 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c  efine PARSE_TAIL
219d0 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50 61 72 73  _SZ (sizeof(Pars
219e0 65 29 2d 50 41 52 53 45 5f 52 45 43 55 52 53 45  e)-PARSE_RECURSE
219f0 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75  _SZ) /* Non-recu
21a00 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64  rsive part */.#d
21a10 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c  efine PARSE_TAIL
21a20 28 58 29 20 28 28 28 63 68 61 72 2a 29 28 58 29  (X) (((char*)(X)
21a30 29 2b 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f  )+PARSE_RECURSE_
21a40 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20  SZ)  /* Pointer 
21a50 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a  to tail */../*.*
21a60 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
21a70 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64   currently insid
21a80 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63  e an sqlite3_dec
21a90 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c  lare_vtab() call
21aa0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
21ab0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
21ac0 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49  ABLE.  #define I
21ad0 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30  N_DECLARE_VTAB 0
21ae0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
21af0 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
21b00 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72 73 65   (pParse->eParse
21b10 4d 6f 64 65 3d 3d 50 41 52 53 45 5f 4d 4f 44 45  Mode==PARSE_MODE
21b20 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 29 0a 23  _DECLARE_VTAB).#
21b30 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
21b40 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
21b50 4c 54 45 52 54 41 42 4c 45 29 0a 20 20 23 64 65  LTERTABLE).  #de
21b60 66 69 6e 65 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f  fine IN_RENAME_O
21b70 42 4a 45 43 54 20 30 0a 23 65 6c 73 65 0a 20 20  BJECT 0.#else.  
21b80 23 64 65 66 69 6e 65 20 49 4e 5f 52 45 4e 41 4d  #define IN_RENAM
21b90 45 5f 4f 42 4a 45 43 54 20 28 70 50 61 72 73 65  E_OBJECT (pParse
21ba0 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3e 3d 50 41  ->eParseMode>=PA
21bb0 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f  RSE_MODE_RENAME_
21bc0 43 4f 4c 55 4d 4e 29 0a 23 65 6e 64 69 66 0a 0a  COLUMN).#endif..
21bd0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
21be0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
21bf0 41 42 4c 45 29 20 26 26 20 64 65 66 69 6e 65 64  ABLE) && defined
21c00 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54  (SQLITE_OMIT_ALT
21c10 45 52 54 41 42 4c 45 29 0a 20 20 23 64 65 66 69  ERTABLE).  #defi
21c20 6e 65 20 49 4e 5f 53 50 45 43 49 41 4c 5f 50 41  ne IN_SPECIAL_PA
21c30 52 53 45 20 30 0a 23 65 6c 73 65 0a 20 20 23 64  RSE 0.#else.  #d
21c40 65 66 69 6e 65 20 49 4e 5f 53 50 45 43 49 41 4c  efine IN_SPECIAL
21c50 5f 50 41 52 53 45 20 28 70 50 61 72 73 65 2d 3e  _PARSE (pParse->
21c60 65 50 61 72 73 65 4d 6f 64 65 21 3d 50 41 52 53  eParseMode!=PARS
21c70 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 29 0a 23  E_MODE_NORMAL).#
21c80 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
21c90 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
21ca0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
21cb0 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61  ure can be decla
21cc0 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61  red on a stack a
21cd0 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  nd used.** to sa
21ce0 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75  ve the Parse.zAu
21cf0 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20  thContext value 
21d00 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
21d10 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72  e restored later
21d20 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68  ..*/.struct Auth
21d30 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73  Context {.  cons
21d40 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
21d50 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73  text;   /* Put s
21d60 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68  aved Parse.zAuth
21d70 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a  Context here */.
21d80 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
21d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21da0 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63   The Parse struc
21db0 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ture */.};../*.*
21dc0 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73  * Bitfield flags
21dd0 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e   for P5 value in
21de0 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73   various opcodes
21df0 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
21e00 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
21e10 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
21e20 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  ):.**    OPFLAG_
21e30 4c 45 4e 47 54 48 41 52 47 20 20 20 20 3d 3d 20  LENGTHARG    == 
21e40 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
21e50 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  TH.**    OPFLAG_
21e60 54 59 50 45 4f 46 41 52 47 20 20 20 20 3d 3d 20  TYPEOFARG    == 
21e70 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45  SQLITE_FUNC_TYPE
21e80 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  OF.**    OPFLAG_
21e90 42 55 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d 20  BULKCSR      == 
21ea0 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a  BTREE_BULKLOAD.*
21eb0 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 45 45 4b  *    OPFLAG_SEEK
21ec0 45 51 20 20 20 20 20 20 20 3d 3d 20 42 54 52 45  EQ       == BTRE
21ed0 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20 20  E_SEEK_EQ.**    
21ee0 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
21ef0 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f 52      == BTREE_FOR
21f00 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50 46  DELETE.**    OPF
21f10 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
21f20 20 3d 3d 20 42 54 52 45 45 5f 53 41 56 45 50 4f   == BTREE_SAVEPO
21f30 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46  SITION.**    OPF
21f40 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20  LAG_AUXDELETE   
21f50 20 3d 3d 20 42 54 52 45 45 5f 41 55 58 44 45 4c   == BTREE_AUXDEL
21f60 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ETE.*/.#define O
21f70 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20  PFLAG_NCHANGE   
21f80 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
21f90 50 5f 49 6e 73 65 72 74 3a 20 53 65 74 20 74 6f  P_Insert: Set to
21fa0 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61   update db->nCha
21fb0 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  nge */.         
21fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21fd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
21fe0 6c 73 6f 20 75 73 65 64 20 69 6e 20 50 32 20 28  lso used in P2 (
21ff0 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f 44 65  not P5) of OP_De
22000 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lete */.#define 
22010 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20  OPFLAG_EPHEM    
22020 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
22030 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d  OP_Column: Ephem
22040 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f  eral output is o
22050 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  k */.#define OPF
22060 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20  LAG_LASTROWID   
22070 20 20 30 78 32 30 20 20 20 20 2f 2a 20 53 65 74    0x20    /* Set
22080 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c   to update db->l
22090 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66  astRowid */.#def
220a0 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  ine OPFLAG_ISUPD
220b0 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20  ATE      0x04   
220c0 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65   /* This OP_Inse
220d0 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44  rt is an sql UPD
220e0 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
220f0 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20  PFLAG_APPEND    
22100 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54      0x08    /* T
22110 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  his is likely to
22120 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f   be an append */
22130 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22140 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78  USESEEKRESULT 0x
22150 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20  10    /* Try to 
22160 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20  avoid a seek in 
22170 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f  BtreeInsert() */
22180 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22190 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78  ISNOOP        0x
221a0 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65  40    /* OP_Dele
221b0 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61  te does pre-upda
221c0 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a  te-hook only */.
221d0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
221e0 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34  ENGTHARG     0x4
221f0 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
22200 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
22210 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66  length() */.#def
22220 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ine OPFLAG_TYPEO
22230 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20  FARG     0x80   
22240 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
22250 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  ly used for type
22260 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  of() */.#define 
22270 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20  OPFLAG_BULKCSR  
22280 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
22290 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74  OP_Open** used t
222a0 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73  o open bulk curs
222b0 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  or */.#define OP
222c0 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20  FLAG_SEEKEQ     
222d0 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50     0x02    /* OP
222e0 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75  _Open** cursor u
222f0 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79  ses EQ seek only
22300 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22310 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20  AG_FORDELETE    
22320 20 30 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x08    /* OP_O
22330 70 65 6e 20 73 68 6f 75 6c 64 20 75 73 65 20 42  pen should use B
22340 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a  TREE_FORDELETE *
22350 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22360 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30  _P2ISREG       0
22370 78 31 30 20 20 20 20 2f 2a 20 50 32 20 74 6f 20  x10    /* P2 to 
22380 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72  OP_Open** is a r
22390 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a  egister number *
223a0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
223b0 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30  _PERMUTE       0
223c0 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d  x01    /* OP_Com
223d0 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65  pare: use the pe
223e0 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  rmutation */.#de
223f0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56 45  fine OPFLAG_SAVE
22400 50 4f 53 49 54 49 4f 4e 20 20 30 78 30 32 20 20  POSITION  0x02  
22410 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 2f 49    /* OP_Delete/I
22420 6e 73 65 72 74 3a 20 73 61 76 65 20 63 75 72 73  nsert: save curs
22430 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65 66 69 6e  or pos */.#defin
22440 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  e OPFLAG_AUXDELE
22450 54 45 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  TE     0x04    /
22460 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e 64  * OP_Delete: ind
22470 65 78 20 69 6e 20 61 20 44 45 4c 45 54 45 20 6f  ex in a DELETE o
22480 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  p */.#define OPF
22490 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d 41 47 49 43  LAG_NOCHNG_MAGIC
224a0 20 20 30 78 36 64 20 20 20 20 2f 2a 20 4f 50 5f    0x6d    /* OP_
224b0 4d 61 6b 65 52 65 63 6f 72 64 3a 20 73 65 72 69  MakeRecord: seri
224c0 61 6c 74 79 70 65 20 31 30 20 69 73 20 6f 6b 20  altype 10 is ok 
224d0 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74  */../*. * Each t
224e0 72 69 67 67 65 72 20 70 72 65 73 65 6e 74 20 69  rigger present i
224f0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
22500 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20  chema is stored 
22510 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  as an instance o
22520 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67  f. * struct Trig
22530 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74  ger.. *. * Point
22540 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73  ers to instances
22550 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
22560 65 72 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  er are stored in
22570 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e   two ways.. * 1.
22580 20 49 6e 20 74 68 65 20 22 74 72 69 67 48 61 73   In the "trigHas
22590 68 22 20 68 61 73 68 20 74 61 62 6c 65 20 28 70  h" hash table (p
225a0 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74  art of the sqlit
225b0 65 33 2a 20 74 68 61 74 20 72 65 70 72 65 73 65  e3* that represe
225c0 6e 74 73 20 74 68 65 0a 20 2a 20 20 20 20 64 61  nts the. *    da
225d0 74 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c  tabase). This al
225e0 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72  lows Trigger str
225f0 75 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65  uctures to be re
22600 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e  trieved by name.
22610 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67  . * 2. All trigg
22620 65 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ers associated w
22630 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62  ith a single tab
22640 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64  le form a linked
22650 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65   list, using the
22660 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d  . *    pNext mem
22670 62 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72  ber of struct Tr
22680 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72  igger. A pointer
22690 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
226a0 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20  ement of the. * 
226b0 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69     linked list i
226c0 73 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20  s stored as the 
226d0 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65  "pTrigger" membe
226e0 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61  r of the associa
226f0 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74  ted. *    struct
22700 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68   Table.. *. * Th
22710 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
22720 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74  mber points to t
22730 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
22740 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   of a linked lis
22750 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20  t. * containing 
22760 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
22770 74 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ts specified as 
22780 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
22790 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20  ram.. */.struct 
227a0 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72  Trigger {.  char
227b0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
227c0 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20      /* The name 
227d0 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20  of the trigger  
227e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227f0 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20        */.  char 
22800 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  *table;         
22810 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20     /* The table 
22820 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68  or view to which
22830 20 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70   the trigger app
22840 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  lies */.  u8 op;
22850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22860 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44    /* One of TK_D
22870 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45  ELETE, TK_UPDATE
22880 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20  , TK_INSERT     
22890 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74      */.  u8 tr_t
228a0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
228b0 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47   /* One of TRIGG
228c0 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47  ER_BEFORE, TRIGG
228d0 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78  ER_AFTER */.  Ex
228e0 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20  pr *pWhen;      
228f0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
22900 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  N clause of the 
22910 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20  expression (may 
22920 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64  be NULL) */.  Id
22930 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20  List *pColumns; 
22940 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73        /* If this
22950 20 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46   is an UPDATE OF
22960 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74   <column-list> t
22970 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20  rigger,.        
22980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22990 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e       the <column
229a0 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64  -list> is stored
229b0 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d   here */.  Schem
229c0 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
229d0 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
229e0 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67  taining the trig
229f0 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ger */.  Schema 
22a00 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20  *pTabSchema;    
22a10 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
22a20 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20  ining the table 
22a30 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
22a40 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20   *step_list; /* 
22a50 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69  Link list of tri
22a60 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65  gger program ste
22a70 70 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a  ps             *
22a80 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
22a90 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
22aa0 65 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f  ext trigger asso
22ab0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
22ac0 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  table */.};../*.
22ad0 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20  ** A trigger is 
22ae0 65 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20  either a BEFORE 
22af0 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67  or an AFTER trig
22b00 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ger.  The follow
22b10 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a  ing constants.**
22b20 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68   determine which
22b30 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65  ..**.** If there
22b40 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72   are multiple tr
22b50 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68  iggers, you migh
22b60 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45  t of some BEFORE
22b70 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e   and some AFTER.
22b80 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65  .** In that case
22b90 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73  s, the constants
22ba0 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52   below can be OR
22bb0 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a  ed together..*/.
22bc0 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
22bd0 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e  BEFORE  1.#defin
22be0 65 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  e TRIGGER_AFTER 
22bf0 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e    2../*. * An in
22c00 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74  stance of struct
22c10 20 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20   TriggerStep is 
22c20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20  used to store a 
22c30 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65  single SQL state
22c40 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20  ment. * that is 
22c50 61 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67  a part of a trig
22c60 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a  ger-program.. *.
22c70 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20   * Instances of 
22c80 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
22c90 65 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ep are stored in
22ca0 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64   a singly linked
22cb0 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a   list (linked. *
22cc0 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78   using the "pNex
22cd0 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72  t" member) refer
22ce0 65 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74  enced by the "st
22cf0 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
22d00 6f 66 20 74 68 65 0a 20 2a 20 61 73 73 6f 63 69  of the. * associ
22d10 61 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67  ated struct Trig
22d20 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68  ger instance. Th
22d30 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
22d40 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  of the linked li
22d50 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72  st is. * the fir
22d60 73 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74  st step of the t
22d70 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a  rigger-program..
22d80 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d   *. * The "op" m
22d90 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20  ember indicates 
22da0 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
22db0 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53  a "DELETE", "INS
22dc0 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f  ERT", "UPDATE" o
22dd0 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74  r. * "SELECT" st
22de0 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61  atement. The mea
22df0 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68  nings of the oth
22e00 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65  er members is de
22e10 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a  termined by the.
22e20 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22   * value of "op"
22e30 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a   as follows:. *.
22e40 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53   * (op == TK_INS
22e50 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20  ERT). * orconf  
22e60 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20    -> stores the 
22e70 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
22e80 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74  rithm. * pSelect
22e90 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73     -> If this is
22ea0 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
22eb0 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73  ... SELECT ... s
22ec0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
22ed0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
22ee0 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69  his stores a poi
22ef0 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45  nter to the SELE
22f00 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74  CT statement. Ot
22f10 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
22f20 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
22f30 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
22f40 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65  he table to inse
22f50 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70  rt into.. * pExp
22f60 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73  rList -> If this
22f70 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
22f80 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e  TO ... VALUES ..
22f90 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
22fa0 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
22fb0 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61    this stores va
22fc0 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72  lues to be inser
22fd0 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e  ted. Otherwise N
22fe0 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20  ULL.. * pIdList 
22ff0 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
23000 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
23010 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  .. (<column-name
23020 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20  s>) VALUES .... 
23030 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  *              s
23040 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74  tatement, then t
23050 68 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63  his stores the c
23060 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62  olumn-names to b
23070 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  e. *            
23080 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e    inserted into.
23090 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
230a0 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72  _DELETE). * zTar
230b0 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
230c0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
230d0 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72  ble to delete fr
230e0 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  om.. * pWhere   
230f0 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
23100 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45  ause of the DELE
23110 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
23120 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
23130 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
23140 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
23150 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  .. *. * (op == T
23160 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a 54 61  K_UPDATE). * zTa
23170 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74  rget   -> Dequot
23180 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
23190 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 2e 0a  able to update..
231a0 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
231b0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
231c0 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
231d0 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
231e0 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
231f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
23200 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
23210 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20   pExprList -> A 
23220 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75  list of the colu
23230 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e  mns to update an
23240 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  d the expression
23250 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20  s to update. *  
23260 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6d              them
23270 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33   to. See sqlite3
23280 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e  Update() documen
23290 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e  tation of "pChan
232a0 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20  ges". *         
232b0 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20       argument.. 
232c0 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  *. */.struct Tri
232d0 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20  ggerStep {.  u8 
232e0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
232f0 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44    /* One of TK_D
23300 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45  ELETE, TK_UPDATE
23310 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f  , TK_INSERT, TK_
23320 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f  SELECT */.  u8 o
23330 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
23340 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20   /* OE_Rollback 
23350 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65  etc. */.  Trigge
23360 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f  r *pTrig;      /
23370 2a 20 54 68 65 20 74 72 69 67 67 65 72 20 74 68  * The trigger th
23380 61 74 20 74 68 69 73 20 73 74 65 70 20 69 73 20  at this step is 
23390 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53  a part of */.  S
233a0 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
233b0 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74      /* SELECT st
233c0 61 74 65 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f  atement or RHS o
233d0 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 53 45  f INSERT INTO SE
233e0 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68  LECT ... */.  ch
233f0 61 72 20 2a 7a 54 61 72 67 65 74 3b 20 20 20 20  ar *zTarget;    
23400 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62     /* Target tab
23410 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55  le for DELETE, U
23420 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f  PDATE, INSERT */
23430 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
23440 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
23450 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
23460 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
23470 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72   steps */.  Expr
23480 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b  List *pExprList;
23490 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66   /* SET clause f
234a0 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 49  or UPDATE */.  I
234b0 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20  dList *pIdList; 
234c0 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61      /* Column na
234d0 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a  mes for INSERT *
234e0 2f 0a 20 20 55 70 73 65 72 74 20 2a 70 55 70 73  /.  Upsert *pUps
234f0 65 72 74 3b 20 20 20 20 20 2f 2a 20 55 70 73 65  ert;     /* Upse
23500 72 74 20 63 6c 61 75 73 65 73 20 6f 6e 20 61 6e  rt clauses on an
23510 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 63 68 61   INSERT */.  cha
23520 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
23530 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 53 51    /* Original SQ
23540 4c 20 74 65 78 74 20 6f 66 20 74 68 69 73 20 63  L text of this c
23550 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 54 72 69 67  ommand */.  Trig
23560 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20  gerStep *pNext; 
23570 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20   /* Next in the 
23580 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54  link-list */.  T
23590 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73  riggerStep *pLas
235a0 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d  t;  /* Last elem
235b0 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74  ent in link-list
235c0 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20  . Valid for 1st 
235d0 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a  elem only */.};.
235e0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
235f0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
23600 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
23610 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
23620 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20  sqliteFix....** 
23630 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79  routines as they
23640 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20   walk the parse 
23650 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74  tree to make dat
23660 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73  abase references
23670 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f  .** explicit..*/
23680 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
23690 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b  DbFixer DbFixer;
236a0 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20  .struct DbFixer 
236b0 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
236c0 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  e;      /* The p
236d0 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20  arsing context. 
236e0 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   Error messages 
236f0 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
23700 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
23710 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65  a;    /* Fix ite
23720 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d  ms to this schem
23730 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f  a */.  int bVarO
23740 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68  nly;       /* Ch
23750 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65  eck for variable
23760 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79   references only
23770 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
23780 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b   *zDb;    /* Mak
23790 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63  e sure all objec
237a0 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ts are contained
237b0 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73   in this databas
237c0 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
237d0 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79  r *zType;  /* Ty
237e0 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  pe of the contai
237f0 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
23800 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
23810 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a  .  const Token *
23820 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f  pName; /* Name o
23830 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
23840 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
23850 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a   messages */.};.
23860 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
23870 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d  ed used to accum
23880 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f  ulate the text o
23890 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65  f a string where
238a0 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65   we.** do not ne
238b0 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68  cessarily know h
238c0 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e  ow big the strin
238d0 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65  g will be in the
238e0 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
238f0 73 71 6c 69 74 65 33 5f 73 74 72 20 7b 0a 20 20  sqlite3_str {.  
23900 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
23910 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c       /* Optional
23920 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f   database for lo
23930 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65  okaside.  Can be
23940 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20   NULL */.  char 
23950 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20  *zText;         
23960 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f  /* The string co
23970 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a  llected so far *
23980 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b  /.  u32  nAlloc;
23990 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75           /* Amou
239a0 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f  nt of space allo
239b0 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a  cated in zText *
239c0 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63  /.  u32  mxAlloc
239d0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69  ;        /* Maxi
239e0 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f  mum allowed allo
239f0 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e  cation.  0 for n
23a00 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a  o malloc usage *
23a10 2f 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20  /.  u32  nChar; 
23a20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
23a30 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  th of the string
23a40 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20   so far */.  u8 
23a50 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20    accError;     
23a60 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45    /* SQLITE_NOME
23a70 4d 20 6f 72 20 53 51 4c 49 54 45 5f 54 4f 4f 42  M or SQLITE_TOOB
23a80 49 47 20 2a 2f 0a 20 20 75 38 20 20 20 70 72 69  IG */.  u8   pri
23a90 6e 74 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20  ntfFlags;    /* 
23aa0 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 20 66 6c  SQLITE_PRINTF fl
23ab0 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  ags below */.};.
23ac0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
23ad0 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30  RINTF_INTERNAL 0
23ae0 78 30 31 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c  x01  /* Internal
23af0 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72  -use-only conver
23b00 74 65 72 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a  ters allowed */.
23b10 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
23b20 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30  RINTF_SQLFUNC  0
23b30 78 30 32 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63  x02  /* SQL func
23b40 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 74  tion arguments t
23b50 6f 20 56 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64  o VXPrintf */.#d
23b60 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49  efine SQLITE_PRI
23b70 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30  NTF_MALLOCED 0x0
23b80 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 78 54  4  /* True if xT
23b90 65 78 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ext is allocated
23ba0 20 73 70 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69   space */..#defi
23bb0 6e 65 20 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29  ne isMalloced(X)
23bc0 20 20 28 28 28 58 29 2d 3e 70 72 69 6e 74 66 46    (((X)->printfF
23bd0 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52  lags & SQLITE_PR
23be0 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d  INTF_MALLOCED)!=
23bf0 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69  0).../*.** A poi
23c00 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
23c10 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
23c20 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e  o communicate in
23c30 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f  formation.** fro
23c40 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e  m sqlite3Init an
23c50 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  d OP_ParseSchema
23c60 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65   into the sqlite
23c70 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a  3InitCallback..*
23c80 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
23c90 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
23ca0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
23cb0 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69  database being i
23cc0 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
23cd0 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b  char **pzErrMsg;
23ce0 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
23cf0 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65  sage stored here
23d00 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
23d10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66            /* 0 f
23d20 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  or main database
23d30 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32  .  1 for TEMP, 2
23d40 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20  .. for ATTACHed 
23d50 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
23d60 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
23d70 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68  lt code stored h
23d80 65 72 65 20 2a 2f 0a 20 20 75 33 32 20 6d 49 6e  ere */.  u32 mIn
23d90 69 74 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  itFlags;     /* 
23da0 46 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 6c 69 6e  Flags controllin
23db0 67 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  g error messages
23dc0 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a   */.} InitData;.
23dd0 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
23de0 61 6c 75 65 73 20 66 6f 72 20 6d 49 6e 69 74 46  alues for mInitF
23df0 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lags.*/.#define 
23e00 49 4e 49 54 46 4c 41 47 5f 41 6c 74 65 72 54 61  INITFLAG_AlterTa
23e10 62 6c 65 20 20 20 30 78 30 30 30 31 20 20 2f 2a  ble   0x0001  /*
23e20 20 54 68 69 73 20 69 73 20 61 20 72 65 70 61 72   This is a repar
23e30 73 65 20 61 66 74 65 72 20 41 4c 54 45 52 20 54  se after ALTER T
23e40 41 42 4c 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53  ABLE */../*.** S
23e50 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
23e60 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69  ing global confi
23e70 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f  guration data fo
23e80 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62  r the SQLite lib
23e90 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  rary..**.** This
23ea0 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20   structure also 
23eb0 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74  contains some st
23ec0 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ate information.
23ed0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74  .*/.struct Sqlit
23ee0 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74  e3Config {.  int
23ef0 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20   bMemstat;      
23f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23f10 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
23f20 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a   memory status *
23f30 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74  /.  int bCoreMut
23f40 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
23f50 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
23f60 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74   enable core mut
23f70 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
23f80 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20  FullMutex;      
23f90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23fa0 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66  True to enable f
23fb0 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ull mutexing */.
23fc0 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20    int bOpenUri; 
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fe0 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69      /* True to i
23ff0 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d  nterpret filenam
24000 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20  es as URIs */.  
24010 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20  int bUseCis;    
24020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24030 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e    /* Use coverin
24040 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75  g indices for fu
24050 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e  ll-scans */.  in
24060 74 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f 63 3b 20  t bSmallMalloc; 
24070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24080 2f 2a 20 41 76 6f 69 64 20 6c 61 72 67 65 20 6d  /* Avoid large m
24090 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
240a0 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 69  s if true */.  i
240b0 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20  nt mxStrlen;    
240c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240d0 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69   /* Maximum stri
240e0 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69  ng length */.  i
240f0 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b  nt neverCorrupt;
24100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24110 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
24120 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d  always well-form
24130 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f  ed */.  int szLo
24140 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
24150 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
24160 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
24170 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20  uffer size */.  
24180 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20  int nLookaside; 
24190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241a0 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
241b0 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f  kaside buffer co
241c0 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  unt */.  int nSt
241d0 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20 20 20 20  mtSpill;        
241e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
241f0 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c 6c  mt-journal spill
24200 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65 73 68 6f  -to-disk thresho
24210 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ld */.  sqlite3_
24220 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20  mem_methods m;  
24230 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77            /* Low
24240 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c  -level memory al
24250 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61  location interfa
24260 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
24270 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75  mutex_methods mu
24280 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77  tex;      /* Low
24290 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74  -level mutex int
242a0 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
242b0 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f  te3_pcache_metho
242c0 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a  ds2 pcache2;  /*
242d0 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d   Low-level page-
242e0 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20  cache interface 
242f0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70  */.  void *pHeap
24300 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24310 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73         /* Heap s
24320 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a  torage space */.
24330 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20    int nHeap;    
24340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24350 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70      /* Size of p
24360 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Heap[] */.  int 
24370 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20  mnReq, mxReq;   
24380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24390 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61   Min and max hea
243a0 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73  p requests sizes
243b0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
243c0 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20  t64 szMmap;     
243d0 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28          /* mmap(
243e0 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e  ) space per open
243f0 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74   file */.  sqlit
24400 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b  e3_int64 mxMmap;
24410 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24420 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f  Maximum value fo
24430 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f  r szMmap */.  vo
24440 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20  id *pPage;      
24450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24460 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d 65  /* Page cache me
24470 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  mory */.  int sz
24480 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
24490 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
244a0 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67 65  ize of each page
244b0 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
244c0 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20   int nPage;     
244d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244e0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
244f0 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d  pages in pPage[]
24500 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73   */.  int mxPars
24510 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20  erStack;        
24520 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d          /* maxim
24530 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65 20  um depth of the 
24540 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a  parser stack */.
24550 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63 68    int sharedCach
24560 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20  eEnabled;       
24570 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73      /* true if s
24580 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
24590 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33   enabled */.  u3
245a0 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20 20  2 szPma;        
245b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245c0 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65  /* Maximum Sorte
245d0 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20  r PMA size */.  
245e0 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67  /* The above mig
245f0 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  ht be initialize
24600 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20  d to non-zero.  
24610 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65  The following ne
24620 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a  ed to always.  *
24630 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a  * initially be z
24640 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f  ero, however. */
24650 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20  .  int isInit;  
24660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24670 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
24680 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  er initializatio
24690 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a  n has finished *
246a0 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65  /.  int inProgre
246b0 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ss;             
246c0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68        /* True wh
246d0 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ile initializati
246e0 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a  on in progress *
246f0 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49  /.  int isMutexI
24700 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
24710 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
24720 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65 20  ter mutexes are 
24730 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
24740 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69   int isMallocIni
24750 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
24760 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
24770 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69   malloc is initi
24780 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
24790 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20  isPCacheInit;   
247a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
247b0 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c   True after mall
247c0 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  oc is initialize
247d0 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49  d */.  int nRefI
247e0 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20  nitMutex;       
247f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
24800 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70  er of users of p
24810 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73  InitMutex */.  s
24820 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49  qlite3_mutex *pI
24830 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20  nitMutex;       
24840 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62   /* Mutex used b
24850 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61  y sqlite3_initia
24860 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  lize() */.  void
24870 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69   (*xLog)(void*,i
24880 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
24890 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72   /* Function for
248a0 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f   logging */.  vo
248b0 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20  id *pLogArg;    
248c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248d0 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
248e0 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a  ment to xLog() *
248f0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
24900 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20  ENABLE_SQLLOG.  
24910 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76  void(*xSqllog)(v
24920 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f  oid*,sqlite3*,co
24930 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
24940 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67  .  void *pSqllog
24950 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  Arg;.#endif.#ifd
24960 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ef SQLITE_VDBE_C
24970 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65  OVERAGE.  /* The
24980 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62   following callb
24990 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c  ack (if not NULL
249a0 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20  ) is invoked on 
249b0 65 76 65 72 79 20 56 44 42 45 20 62 72 61 6e 63  every VDBE branc
249c0 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  h.  ** operation
249d0 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62  .  Set the callb
249e0 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45  ack using SQLITE
249f0 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43  _TESTCTRL_VDBE_C
24a00 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20  OVERAGE..  */.  
24a10 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e  void (*xVdbeBran
24a20 63 68 29 28 76 6f 69 64 2a 2c 75 6e 73 69 67 6e  ch)(void*,unsign
24a30 65 64 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65  ed iSrcLine,u8 e
24a40 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f  This,u8 eMx);  /
24a50 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  * Callback */.  
24a60 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63  void *pVdbeBranc
24a70 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  hArg;           
24a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
24aa0 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e   argument */.#en
24ab0 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
24ac0 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20  TE_UNTESTABLE.  
24ad0 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62  int (*xTestCallb
24ae0 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20  ack)(int);      
24af0 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20    /* Invoked by 
24b00 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
24b10 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  ) */.#endif.  in
24b20 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c  t bLocaltimeFaul
24b30 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
24b40 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20  /* True to fail 
24b50 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c  localtime() call
24b60 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65  s */.  int iOnce
24b70 52 65 73 65 74 54 68 72 65 73 68 6f 6c 64 3b 20  ResetThreshold; 
24b80 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e           /* When
24b90 20 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63   to reset OP_Onc
24ba0 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20  e counters */.  
24bb0 75 33 32 20 73 7a 53 6f 72 74 65 72 52 65 66 3b  u32 szSorterRef;
24bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bd0 20 20 2f 2a 20 4d 69 6e 20 73 69 7a 65 20 69 6e    /* Min size in
24be0 20 62 79 74 65 73 20 74 6f 20 75 73 65 20 73 6f   bytes to use so
24bf0 72 74 65 72 2d 72 65 66 73 20 2a 2f 0a 7d 3b 0a  rter-refs */.};.
24c00 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  ./*.** This macr
24c10 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65  o is used inside
24c20 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61   of assert() sta
24c30 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63  tements to indic
24c40 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ate that.** the 
24c50 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76  assert is only v
24c60 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66  alid on a well-f
24c70 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20  ormed database. 
24c80 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a   Instead of:.**.
24c90 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
24ca0 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72   );.**.** One wr
24cb0 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ites:.**.**     
24cc0 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52  assert( X || COR
24cd0 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a  RUPT_DB );.**.**
24ce0 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74   CORRUPT_DB is t
24cf0 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61  rue during norma
24d00 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f  l operation.  CO
24d10 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f  RRUPT_DB does no
24d20 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68  t indicate.** th
24d30 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  at the database 
24d40 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f  is definitely co
24d50 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74  rrupt, only that
24d60 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72   it might be cor
24d70 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73  rupt..** For mos
24d80 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f  t test cases, CO
24d90 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20  RRUPT_DB is set 
24da0 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61  to false using a
24db0 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69   special.** sqli
24dc0 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
24dd0 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65  ().  This enable
24de0 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  s assert() state
24df0 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a  ments to prove.*
24e00 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72  * things that ar
24e10 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f  e always true fo
24e20 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  r well-formed da
24e30 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66  tabases..*/.#def
24e40 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20  ine CORRUPT_DB  
24e50 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e  (sqlite3Config.n
24e60 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a  everCorrupt==0).
24e70 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70  ./*.** Context p
24e80 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f  ointer passed do
24e90 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74  wn through the t
24ea0 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72  ree-walk..*/.str
24eb0 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50  uct Walker {.  P
24ec0 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
24ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ee0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73           /* Pars
24ef0 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a  er context.  */.
24f00 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c    int (*xExprCal
24f10 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20  lback)(Walker*, 
24f20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43  Expr*);     /* C
24f30 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72  allback for expr
24f40 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  essions */.  int
24f50 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
24f60 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  ck)(Walker*,Sele
24f70 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  ct*);  /* Callba
24f80 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
24f90 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65  /.  void (*xSele
24fa0 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c  ctCallback2)(Wal
24fb0 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a  ker*,Select*);/*
24fc0 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b   Second callback
24fd0 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
24fe0 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74    int walkerDept
24ff0 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
25000 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
25010 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72  umber of subquer
25020 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64  ies */.  u8 eCod
25030 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
25040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25050 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72     /* A small pr
25060 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f  ocessing code */
25070 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20  .  union {      
25080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25090 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
250a0 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63  Extra data for c
250b0 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e  allback */.    N
250c0 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b  ameContext *pNC;
250d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69           /* Nami
250f0 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  ng context */.  
25100 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
25110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25120 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
25130 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20   counter */.    
25140 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20 20  int iCur;       
25150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25160 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63            /* A c
25170 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
25180 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72      SrcList *pSr
25190 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20  cList;          
251a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
251b0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
251c0 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f      struct SrcCo
251d0 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20  unt *pSrcCount; 
251e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
251f0 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e   Counting column
25200 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20   references */. 
25210 20 20 20 73 74 72 75 63 74 20 43 43 75 72 48 69     struct CCurHi
25220 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20 20  nt *pCCurHint;  
25230 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25240 55 73 65 64 20 62 79 20 63 6f 64 65 43 75 72 73  Used by codeCurs
25250 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20  orHint() */.    
25260 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20  int *aiCol;     
25270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25280 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72            /* arr
25290 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64  ay of column ind
252a0 65 78 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75  exes */.    stru
252b0 63 74 20 49 64 78 43 6f 76 65 72 20 2a 70 49 64  ct IdxCover *pId
252c0 78 43 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20  xCover;         
252d0 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66        /* Check f
252e0 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72 61 67  or index coverag
252f0 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
25300 49 64 78 45 78 70 72 54 72 61 6e 73 20 2a 70 49  IdxExprTrans *pI
25310 64 78 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  dxTrans;        
25320 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69 64     /* Convert id
25330 78 65 64 20 65 78 70 72 20 74 6f 20 63 6f 6c 75  xed expr to colu
25340 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69  mn */.    ExprLi
25350 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
25360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25370 20 20 20 20 2f 2a 20 47 52 4f 55 50 20 42 59 20      /* GROUP BY 
25380 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 53 65  clause */.    Se
25390 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
253a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253b0 20 20 20 20 20 20 20 20 2f 2a 20 48 41 56 49 4e          /* HAVIN
253c0 47 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75 73  G to WHERE claus
253d0 65 20 63 74 78 20 2a 2f 0a 20 20 20 20 73 74 72  e ctx */.    str
253e0 75 63 74 20 57 69 6e 64 6f 77 52 65 77 72 69 74  uct WindowRewrit
253f0 65 20 2a 70 52 65 77 72 69 74 65 3b 20 20 20 20  e *pRewrite;    
25400 20 20 20 20 20 20 20 2f 2a 20 57 69 6e 64 6f 77         /* Window
25410 20 72 65 77 72 69 74 65 20 63 6f 6e 74 65 78 74   rewrite context
25420 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 57   */.    struct W
25430 68 65 72 65 43 6f 6e 73 74 20 2a 70 43 6f 6e 73  hereConst *pCons
25440 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
25450 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73    /* WHERE claus
25460 65 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20  e constants */. 
25470 20 20 20 73 74 72 75 63 74 20 52 65 6e 61 6d 65     struct Rename
25480 43 74 78 20 2a 70 52 65 6e 61 6d 65 3b 20 20 20  Ctx *pRename;   
25490 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
254a0 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20 63 6f  RENAME COLUMN co
254b0 6e 74 65 78 74 20 2a 2f 0a 20 20 7d 20 75 3b 0a  ntext */.  } u;.
254c0 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64  };../* Forward d
254d0 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69  eclarations */.i
254e0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
254f0 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  pr(Walker*, Expr
25500 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
25510 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b  alkExprList(Walk
25520 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
25530 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
25540 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20  Select(Walker*, 
25550 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
25560 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45  lite3WalkSelectE
25570 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  xpr(Walker*, Sel
25580 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
25590 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d  e3WalkSelectFrom
255a0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
255b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
255c0 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b  xprWalkNoop(Walk
255d0 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
255e0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
255f0 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20  lkNoop(Walker*, 
25600 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
25610 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 46  lite3SelectWalkF
25620 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  ail(Walker*, Sel
25630 65 63 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  ect*);.#ifdef SQ
25640 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f 69 64 20  LITE_DEBUG.void 
25650 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c  sqlite3SelectWal
25660 6b 41 73 73 65 72 74 32 28 57 61 6c 6b 65 72 2a  kAssert2(Walker*
25670 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 65 6e 64  , Select*);.#end
25680 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  if../*.** Return
25690 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70   code from the p
256a0 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e  arse-tree walkin
256b0 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64  g primitives and
256c0 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61   their.** callba
256d0 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  cks..*/.#define 
256e0 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20  WRC_Continue    
256f0 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20  0   /* Continue 
25700 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72  down into childr
25710 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  en */.#define WR
25720 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31 20  C_Prune       1 
25730 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72    /* Omit childr
25740 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20  en but continue 
25750 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73  walking siblings
25760 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
25770 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20 20  Abort       2   
25780 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74  /* Abandon the t
25790 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a  ree walk */../*.
257a0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
257b0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
257c0 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73 65   represents a se
257d0 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  t of one or more
257e0 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e   CTEs.** (common
257f0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
25800 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20 61  ns) created by a
25810 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61   single WITH cla
25820 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  use..*/.struct W
25830 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65  ith {.  int nCte
25840 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25850 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
25860 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65  r of CTEs in the
25870 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a   WITH clause */.
25880 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20    With *pOuter; 
25890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258a0 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20    /* Containing 
258b0 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
258c0 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74  NULL */.  struct
258d0 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20 20   Cte {          
258e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
258f0 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68 65   each CTE in the
25900 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e   WITH clause....
25910 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
25920 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
25930 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
25940 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20  of this CTE */. 
25950 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f     ExprList *pCo
25960 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ls;             
25970 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78     /* List of ex
25980 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61  plicit column na
25990 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  mes, or NULL */.
259a0 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
259b0 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ect;            
259c0 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e      /* The defin
259d0 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54  ition of this CT
259e0 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63  E */.    const c
259f0 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20 20  har *zCteErr;   
25a00 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
25a10 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69  r message for ci
25a20 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65  rcular reference
25a30 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d  s */.  } a[1];.}
25a40 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
25a50 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20  _DEBUG./*.** An 
25a60 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
25a70 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20  TreeView object 
25a80 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e  is used for prin
25a90 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74  ting the content
25aa0 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75   of.** data stru
25ab0 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65  ctures on sqlite
25ac0 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20 75  3DebugPrintf() u
25ad0 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65  sing a tree-like
25ae0 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74   view..*/.struct
25af0 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e   TreeView {.  in
25b00 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  t iLevel;       
25b10 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c        /* Which l
25b20 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65  evel of the tree
25b30 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20   we are on */.  
25b40 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20  u8  bLine[100]; 
25b50 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20          /* Draw 
25b60 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75  vertical in colu
25b70 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d  mn i if bLine[i]
25b80 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23   is true */.};.#
25b90 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
25ba0 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  DEBUG */../*.** 
25bb0 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 75  This object is u
25bc0 73 65 64 20 69 6e 20 76 61 72 69 6f 69 75 73 20  sed in varioius 
25bd0 77 61 79 73 2c 20 61 6c 6c 20 72 65 6c 61 74 65  ways, all relate
25be0 64 20 74 6f 20 77 69 6e 64 6f 77 20 66 75 6e 63  d to window func
25bf0 74 69 6f 6e 73 0a 2a 2a 0a 2a 2a 20 20 20 28 31  tions.**.**   (1
25c00 29 20 41 20 73 69 6e 67 6c 65 20 69 6e 73 74 61  ) A single insta
25c10 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
25c20 63 74 75 72 65 20 69 73 20 61 74 74 61 63 68 65  cture is attache
25c30 64 20 74 6f 20 74 68 65 0a 2a 2a 20 20 20 20 20  d to the.**     
25c40 20 20 74 68 65 20 45 78 70 72 2e 70 57 69 6e 20    the Expr.pWin 
25c50 66 69 65 6c 64 20 66 6f 72 20 65 61 63 68 20 77  field for each w
25c60 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 69  indow function i
25c70 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  n an expression 
25c80 74 72 65 65 2e 0a 2a 2a 20 20 20 20 20 20 20 54  tree..**       T
25c90 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73  his object holds
25ca0 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   the information
25cb0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
25cc0 65 20 4f 56 45 52 20 63 6c 61 75 73 65 2c 0a 2a  e OVER clause,.*
25cd0 2a 20 20 20 20 20 20 20 70 6c 75 73 20 61 64 64  *       plus add
25ce0 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75  itional fields u
25cf0 73 65 64 20 64 75 72 69 6e 67 20 63 6f 64 65 20  sed during code 
25d00 67 65 6e 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  generation..**.*
25d10 2a 20 20 20 28 32 29 20 41 6c 6c 20 77 69 6e 64  *   (2) All wind
25d20 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  ow functions in 
25d30 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20  a single SELECT 
25d40 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  form a linked-li
25d50 73 74 0a 2a 2a 20 20 20 20 20 20 20 61 74 74 61  st.**       atta
25d60 63 68 65 64 20 74 6f 20 53 65 6c 65 63 74 2e 70  ched to Select.p
25d70 57 69 6e 2e 20 20 54 68 65 20 57 69 6e 64 6f 77  Win.  The Window
25d80 2e 70 46 75 6e 63 20 61 6e 64 20 57 69 6e 64 6f  .pFunc and Windo
25d90 77 2e 70 45 78 70 72 0a 2a 2a 20 20 20 20 20 20  w.pExpr.**      
25da0 20 66 69 65 6c 64 73 20 70 6f 69 6e 74 20 62 61   fields point ba
25db0 63 6b 20 74 6f 20 74 68 65 20 65 78 70 72 65 73  ck to the expres
25dc0 73 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65  sion that is the
25dd0 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
25de0 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 33 29 20 54 68  ..**.**   (3) Th
25df0 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 57  e terms of the W
25e00 49 4e 44 4f 57 20 63 6c 61 75 73 65 20 6f 66 20  INDOW clause of 
25e10 61 20 53 45 4c 45 43 54 20 61 72 65 20 69 6e 73  a SELECT are ins
25e20 74 61 6e 63 65 73 20 6f 66 20 74 68 69 73 0a 2a  tances of this.*
25e30 2a 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 6f  *       object o
25e40 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
25e50 61 74 74 61 63 68 65 64 20 74 6f 20 53 65 6c 65  attached to Sele
25e60 63 74 2e 70 57 69 6e 44 65 66 6e 2e 0a 2a 2a 0a  ct.pWinDefn..**.
25e70 2a 2a 20 54 68 65 20 75 73 65 73 20 28 31 29 20  ** The uses (1) 
25e80 61 6e 64 20 28 32 29 20 61 72 65 20 72 65 61 6c  and (2) are real
25e90 6c 79 20 74 68 65 20 73 61 6d 65 20 57 69 6e 64  ly the same Wind
25ea0 6f 77 20 6f 62 6a 65 63 74 20 74 68 61 74 20 6a  ow object that j
25eb0 75 73 74 20 68 61 70 70 65 6e 73 0a 2a 2a 20 74  ust happens.** t
25ec0 6f 20 62 65 20 61 63 63 65 73 73 69 62 6c 65 20  o be accessible 
25ed0 69 6e 20 74 77 6f 20 64 69 66 66 65 72 65 6e 74  in two different
25ee0 20 77 61 79 73 2e 20 20 55 73 65 20 28 33 29 20   ways.  Use (3) 
25ef0 69 73 20 61 72 65 20 73 65 70 61 72 61 74 65 20  is are separate 
25f00 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75  objects..*/.stru
25f10 63 74 20 57 69 6e 64 6f 77 20 7b 0a 20 20 63 68  ct Window {.  ch
25f20 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
25f30 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
25f40 20 77 69 6e 64 6f 77 20 28 6d 61 79 20 62 65 20   window (may be 
25f50 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45 78 70 72 4c  NULL) */.  ExprL
25f60 69 73 74 20 2a 70 50 61 72 74 69 74 69 6f 6e 3b  ist *pPartition;
25f70 20 20 20 2f 2a 20 50 41 52 54 49 54 49 4f 4e 20     /* PARTITION 
25f80 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  BY clause */.  E
25f90 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
25fa0 79 3b 20 20 20 20 20 2f 2a 20 4f 52 44 45 52 20  y;     /* ORDER 
25fb0 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75  BY clause */.  u
25fc0 38 20 65 54 79 70 65 3b 20 20 20 20 20 20 20 20  8 eType;        
25fd0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 41 4e         /* TK_RAN
25fe0 47 45 20 6f 72 20 54 4b 5f 52 4f 57 53 20 2a 2f  GE or TK_ROWS */
25ff0 0a 20 20 75 38 20 65 53 74 61 72 74 3b 20 20 20  .  u8 eStart;   
26000 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 4e             /* UN
26010 42 4f 55 4e 44 45 44 2c 20 43 55 52 52 45 4e 54  BOUNDED, CURRENT
26020 2c 20 50 52 45 43 45 44 49 4e 47 20 6f 72 20 46  , PRECEDING or F
26030 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 75 38  OLLOWING */.  u8
26040 20 65 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20   eEnd;          
26050 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44        /* UNBOUND
26060 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50 52 45  ED, CURRENT, PRE
26070 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57  CEDING or FOLLOW
26080 49 4e 47 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ING */.  Expr *p
26090 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  Start;          
260a0 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 66   /* Expression f
260b0 6f 72 20 22 3c 65 78 70 72 3e 20 50 52 45 43 45  or "<expr> PRECE
260c0 44 49 4e 47 22 20 2a 2f 0a 20 20 45 78 70 72 20  DING" */.  Expr 
260d0 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
260e0 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
260f0 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 46 4f 4c   for "<expr> FOL
26100 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20 20 57 69 6e  LOWING" */.  Win
26110 64 6f 77 20 2a 70 4e 65 78 74 57 69 6e 3b 20 20  dow *pNextWin;  
26120 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 6e       /* Next win
26130 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 62 65 6c  dow function bel
26140 6f 6e 67 69 6e 67 20 74 6f 20 74 68 69 73 20 53  onging to this S
26150 45 4c 45 43 54 20 2a 2f 0a 20 20 45 78 70 72 20  ELECT */.  Expr 
26160 2a 70 46 69 6c 74 65 72 3b 20 20 20 20 20 20 20  *pFilter;       
26170 20 20 20 2f 2a 20 54 68 65 20 46 49 4c 54 45 52     /* The FILTER
26180 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
26190 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b   FuncDef *pFunc;
261a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
261b0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e  function */.  in
261c0 74 20 69 45 70 68 43 73 72 3b 20 20 20 20 20 20  t iEphCsr;      
261d0 20 20 20 20 20 20 2f 2a 20 50 61 72 74 69 74 69        /* Partiti
261e0 6f 6e 20 62 75 66 66 65 72 20 6f 72 20 50 65 65  on buffer or Pee
261f0 72 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e  r buffer */.  in
26200 74 20 72 65 67 41 63 63 75 6d 3b 0a 20 20 69 6e  t regAccum;.  in
26210 74 20 72 65 67 52 65 73 75 6c 74 3b 0a 20 20 69  t regResult;.  i
26220 6e 74 20 63 73 72 41 70 70 3b 20 20 20 20 20 20  nt csrApp;      
26230 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69         /* Functi
26240 6f 6e 20 63 75 72 73 6f 72 20 28 75 73 65 64 20  on cursor (used 
26250 62 79 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20  by min/max) */. 
26260 20 69 6e 74 20 72 65 67 41 70 70 3b 20 20 20 20   int regApp;    
26270 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63           /* Func
26280 74 69 6f 6e 20 72 65 67 69 73 74 65 72 20 28 61  tion register (a
26290 6c 73 6f 20 75 73 65 64 20 62 79 20 6d 69 6e 2f  lso used by min/
262a0 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65  max) */.  int re
262b0 67 50 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  gPart;          
262c0 20 20 2f 2a 20 46 69 72 73 74 20 69 6e 20 61 20    /* First in a 
262d0 73 65 74 20 6f 66 20 72 65 67 69 73 74 65 72 73  set of registers
262e0 20 68 6f 6c 64 69 6e 67 20 50 41 52 54 49 54 49   holding PARTITI
262f0 4f 4e 20 42 59 0a 20 20 20 20 20 20 20 20 20 20  ON BY.          
26300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26310 2a 2a 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20  ** and ORDER BY 
26320 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 77  values for the w
26330 69 6e 64 6f 77 20 2a 2f 0a 20 20 45 78 70 72 20  indow */.  Expr 
26340 2a 70 4f 77 6e 65 72 3b 20 20 20 20 20 20 20 20  *pOwner;        
26350 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
26360 20 6f 62 6a 65 63 74 20 74 68 69 73 20 77 69 6e   object this win
26370 64 6f 77 20 69 73 20 61 74 74 61 63 68 65 64 20  dow is attached 
26380 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 66  to */.  int nBuf
26390 66 65 72 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  ferCol;         
263a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
263b0 75 6d 6e 73 20 69 6e 20 62 75 66 66 65 72 20 74  umns in buffer t
263c0 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 41  able */.  int iA
263d0 72 67 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  rgCol;          
263e0 20 20 2f 2a 20 4f 66 66 73 65 74 20 6f 66 20 66    /* Offset of f
263f0 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 66 6f  irst argument fo
26400 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  r this function 
26410 2a 2f 0a 7d 3b 0a 0a 23 69 66 6e 64 65 66 20 53  */.};..#ifndef S
26420 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f  QLITE_OMIT_WINDO
26430 57 46 55 4e 43 0a 76 6f 69 64 20 73 71 6c 69 74  WFUNC.void sqlit
26440 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 73  e3WindowDelete(s
26450 71 6c 69 74 65 33 2a 2c 20 57 69 6e 64 6f 77 2a  qlite3*, Window*
26460 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
26470 69 6e 64 6f 77 4c 69 73 74 44 65 6c 65 74 65 28  indowListDelete(
26480 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e  sqlite3 *db, Win
26490 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64 6f 77 20  dow *p);.Window 
264a0 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 6c  *sqlite3WindowAl
264b0 6c 6f 63 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  loc(Parse*, int,
264c0 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 69 6e 74   int, Expr*, int
264d0 20 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20   , Expr*);.void 
264e0 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74  sqlite3WindowAtt
264f0 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
26500 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 69 6e 74  *, Window*);.int
26510 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f   sqlite3WindowCo
26520 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 20 57 69  mpare(Parse*, Wi
26530 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b  ndow*, Window*);
26540 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
26550 64 6f 77 43 6f 64 65 49 6e 69 74 28 50 61 72 73  dowCodeInit(Pars
26560 65 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f  e*, Window*);.vo
26570 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
26580 43 6f 64 65 53 74 65 70 28 50 61 72 73 65 2a 2c  CodeStep(Parse*,
26590 20 53 65 6c 65 63 74 2a 2c 20 57 68 65 72 65 49   Select*, WhereI
265a0 6e 66 6f 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  nfo*, int, int);
265b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64  .int sqlite3Wind
265c0 6f 77 52 65 77 72 69 74 65 28 50 61 72 73 65 2a  owRewrite(Parse*
265d0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
265e0 73 71 6c 69 74 65 33 45 78 70 61 6e 64 53 75 62  sqlite3ExpandSub
265f0 71 75 65 72 79 28 50 61 72 73 65 2a 2c 20 73 74  query(Parse*, st
26600 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
26610 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
26620 33 57 69 6e 64 6f 77 55 70 64 61 74 65 28 50 61  3WindowUpdate(Pa
26630 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57  rse*, Window*, W
26640 69 6e 64 6f 77 2a 2c 20 46 75 6e 63 44 65 66 2a  indow*, FuncDef*
26650 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74  );.Window *sqlit
26660 65 33 57 69 6e 64 6f 77 44 75 70 28 73 71 6c 69  e3WindowDup(sqli
26670 74 65 33 20 2a 64 62 2c 20 45 78 70 72 20 2a 70  te3 *db, Expr *p
26680 4f 77 6e 65 72 2c 20 57 69 6e 64 6f 77 20 2a 70  Owner, Window *p
26690 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74  );.Window *sqlit
266a0 65 33 57 69 6e 64 6f 77 4c 69 73 74 44 75 70 28  e3WindowListDup(
266b0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e  sqlite3 *db, Win
266c0 64 6f 77 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71  dow *p);.void sq
266d0 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74  lite3WindowFunct
266e0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 23 65 6c 73  ions(void);.#els
266f0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
26700 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 61  e3WindowDelete(a
26710 2c 62 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,b).# define sql
26720 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69  ite3WindowFuncti
26730 6f 6e 73 28 29 0a 23 20 64 65 66 69 6e 65 20 73  ons().# define s
26740 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61  qlite3WindowAtta
26750 63 68 28 61 2c 62 2c 63 29 0a 23 65 6e 64 69 66  ch(a,b,c).#endif
26760 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67  ../*.** Assuming
26770 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74   zIn points to t
26780 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
26790 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74   a UTF-8 charact
267a0 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a  er,.** advance z
267b0 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  In to point to t
267c0 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
267d0 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20   the next UTF-8 
267e0 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64  character..*/.#d
267f0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49  efine SQLITE_SKI
26800 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20  P_UTF8(zIn) {   
26810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26820 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28       \.  if( (*(
26830 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b  zIn++))>=0xc0 ){
26840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
26860 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e      while( (*zIn
26870 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29   & 0xc0)==0x80 )
26880 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20  { zIn++; }      
26890 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20         \.  }    
268a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268d0 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  \.}../*.** The S
268e0 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63  QLITE_*_BKPT mac
268f0 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75  ros are substitu
26900 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f  tes for the erro
26910 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20  r codes with.** 
26920 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75  the same name bu
26930 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42  t without the _B
26940 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65  KPT suffix.  The
26950 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65  se macros invoke
26960 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61  .** routines tha
26970 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e  t report the lin
26980 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63  e-number on whic
26990 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67  h the error orig
269a0 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  inated.** using 
269b0 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20  sqlite3_log().  
269c0 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73  The routines als
269d0 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76  o provide a conv
269e0 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20  enient place.** 
269f0 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65  to set a debugge
26a00 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f  r breakpoint..*/
26a10 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 6f  .int sqlite3Repo
26a20 72 74 45 72 72 6f 72 28 69 6e 74 20 69 45 72 72  rtError(int iErr
26a30 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f  , int lineno, co
26a40 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 29  nst char *zType)
26a50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  ;.int sqlite3Cor
26a60 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a  ruptError(int);.
26a70 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73  int sqlite3Misus
26a80 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  eError(int);.int
26a90 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
26aa0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66  Error(int);.#def
26ab0 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
26ac0 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  PT_BKPT sqlite3C
26ad0 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
26ae0 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
26af0 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
26b00 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
26b10 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
26b20 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e  efine SQLITE_CAN
26b30 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74  TOPEN_BKPT sqlit
26b40 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
26b50 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66  __LINE__).#ifdef
26b60 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
26b70 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d  int sqlite3Nomem
26b80 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e  Error(int);.  in
26b90 74 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f  t sqlite3Ioerrno
26ba0 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20  memError(int);. 
26bb0 20 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72   int sqlite3Corr
26bc0 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74  uptPgnoError(int
26bd0 2c 50 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65  ,Pgno);.# define
26be0 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
26bf0 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45  PT sqlite3NomemE
26c00 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
26c10 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
26c20 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  OERR_NOMEM_BKPT 
26c30 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65  sqlite3Ioerrnome
26c40 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  mError(__LINE__)
26c50 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
26c60 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29  _CORRUPT_PGNO(P)
26c70 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50   sqlite3CorruptP
26c80 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  gnoError(__LINE_
26c90 5f 2c 28 50 29 29 0a 23 65 6c 73 65 0a 23 20 64  _,(P)).#else.# d
26ca0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d  efine SQLITE_NOM
26cb0 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e  EM_BKPT SQLITE_N
26cc0 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51  OMEM.# define SQ
26cd0 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
26ce0 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45  _BKPT SQLITE_IOE
26cf0 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e  RR_NOMEM.# defin
26d00 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
26d10 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33  _PGNO(P) sqlite3
26d20 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c  CorruptError(__L
26d30 49 4e 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f  INE__).#endif../
26d40 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54  *.** FTS3 and FT
26d50 53 34 20 62 6f 74 68 20 72 65 71 75 69 72 65 20  S4 both require 
26d60 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75  virtual table su
26d70 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66  pport.*/.#if def
26d80 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
26d90 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23  _VIRTUALTABLE).#
26da0 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
26db0 41 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65  ABLE_FTS3.# unde
26dc0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
26dd0 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  FTS4.#endif../*.
26de0 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c  ** FTS4 is reall
26df0 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66  y an extension f
26e00 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20  or FTS3.  It is 
26e10 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  enabled using th
26e20 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  e.** SQLITE_ENAB
26e30 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20  LE_FTS3 macro.  
26e40 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e  But to avoid con
26e50 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63  fusion we also c
26e60 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54  all.** the SQLIT
26e70 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61  E_ENABLE_FTS4 ma
26e80 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20  cro to serve as 
26e90 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c  an alias for SQL
26ea0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e  ITE_ENABLE_FTS3.
26eb0 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
26ec0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
26ed0 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  S4) && !defined(
26ee0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
26ef0 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  S3).# define SQL
26f00 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
26f10 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
26f20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64  The ctype.h head
26f30 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72  er is needed for
26f40 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65   non-ASCII syste
26f50 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a  ms.  It is also.
26f60 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53  ** needed by FTS
26f70 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69  3 when FTS3 is i
26f80 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61  ncluded in the a
26f90 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  malgamation..*/.
26fa0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
26fb0 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a  ITE_ASCII) || \.
26fc0 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c      (defined(SQL
26fd0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
26fe0 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
26ff0 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29  TE_AMALGAMATION)
27000 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79  ).# include <cty
27010 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  pe.h>.#endif../*
27020 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
27030 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74  g macros mimic t
27040 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72  he standard libr
27050 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ary functions to
27060 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70  upper(),.** issp
27070 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29  ace(), isalnum()
27080 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20  , isdigit() and 
27090 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70  isxdigit(), resp
270a0 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a  ectively. The.**
270b0 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73   sqlite versions
270c0 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41   only work for A
270d0 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c  SCII characters,
270e0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c   regardless of l
270f0 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ocale..*/.#ifdef
27100 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20   SQLITE_ASCII.# 
27110 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
27120 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e  upper(x)  ((x)&~
27130 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
27140 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
27150 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65  (x)]&0x20)).# de
27160 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
27170 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ace(x)   (sqlite
27180 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
27190 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
271a0 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  01).# define sql
271b0 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
271c0 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
271d0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
271e0 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65  )(x)]&0x06).# de
271f0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
27200 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65  pha(x)   (sqlite
27210 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
27220 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
27230 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  02).# define sql
27240 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
27250 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
27260 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
27270 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65  )(x)]&0x04).# de
27280 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
27290 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65  igit(x)  (sqlite
272a0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
272b0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
272c0 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  08).# define sql
272d0 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
272e0 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f   (sqlite3UpperTo
272f0 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20  Lower[(unsigned 
27300 63 68 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66  char)(x)]).# def
27310 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f  ine sqlite3Isquo
27320 74 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  te(x)   (sqlite3
27330 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
27340 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 38  ed char)(x)]&0x8
27350 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
27360 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
27370 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75  (x)   toupper((u
27380 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
27390 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
273a0 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69  e3Isspace(x)   i
273b0 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64  sspace((unsigned
273c0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
273d0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e  ine sqlite3Isaln
273e0 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28  um(x)   isalnum(
273f0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27400 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
27410 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20  ite3Isalpha(x)  
27420 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e   isalpha((unsign
27430 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
27440 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64  efine sqlite3Isd
27450 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69  igit(x)   isdigi
27460 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
27470 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
27480 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
27490 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73  )  isxdigit((uns
274a0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
274b0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
274c0 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c  Tolower(x)   tol
274d0 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  ower((unsigned c
274e0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
274f0 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65  e sqlite3Isquote
27500 28 78 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c  (x)   ((x)=='"'|
27510 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d  |(x)=='\''||(x)=
27520 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a  ='['||(x)=='`').
27530 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
27540 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a  e3IsIdChar(u8);.
27550 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20  ./*.** Internal 
27560 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79  function prototy
27570 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  pes.*/.int sqlit
27580 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20  e3StrICmp(const 
27590 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
275a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
275b0 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68  trlen30(const ch
275c0 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ar*);.char *sqli
275d0 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28 43 6f  te3ColumnType(Co
275e0 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23 64  lumn*,char*);.#d
275f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72  efine sqlite3Str
27600 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74  NICmp sqlite3_st
27610 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69  rnicmp..int sqli
27620 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f  te3MallocInit(vo
27630 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
27640 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29  3MallocEnd(void)
27650 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d  ;.void *sqlite3M
27660 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64  alloc(u64);.void
27670 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a   *sqlite3MallocZ
27680 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a  ero(u64);.void *
27690 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
276a0 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36  ero(sqlite3*, u6
276b0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
276c0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c  3DbMallocRaw(sql
276d0 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  ite3*, u64);.voi
276e0 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
276f0 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74 65 33 2a  ocRawNN(sqlite3*
27700 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71  , u64);.char *sq
27710 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71  lite3DbStrDup(sq
27720 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
27730 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  r*);.char *sqlit
27740 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69  e3DbStrNDup(sqli
27750 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
27760 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71  , u64);.char *sq
27770 6c 69 74 65 33 44 62 53 70 61 6e 44 75 70 28 73  lite3DbSpanDup(s
27780 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
27790 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
277a0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52  ;.void *sqlite3R
277b0 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36  ealloc(void*, u6
277c0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
277d0 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65  3DbReallocOrFree
277e0 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
277f0 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a   *, u64);.void *
27800 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
27810 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
27820 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73   *, u64);.void s
27830 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c  qlite3DbFree(sql
27840 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76  ite3*, void*);.v
27850 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65  oid sqlite3DbFre
27860 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  eNN(sqlite3*, vo
27870 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
27880 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64  3MallocSize(void
27890 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  *);.int sqlite3D
278a0 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69  bMallocSize(sqli
278b0 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f  te3*, void*);.vo
278c0 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d  id *sqlite3PageM
278d0 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
278e0 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65   sqlite3PageFree
278f0 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
27900 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75  lite3MemSetDefau
27910 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65  lt(void);.#ifnde
27920 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
27930 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  BLE.void sqlite3
27940 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b  BenignMallocHook
27950 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  s(void (*)(void)
27960 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  , void (*)(void)
27970 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
27980 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46  lite3HeapNearlyF
27990 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a  ull(void);../*.*
279a0 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74  * On systems wit
279b0 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70  h ample stack sp
279c0 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70  ace and that sup
279d0 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d  port alloca(), m
279e0 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c  ake.** use of al
279f0 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e  loca() to obtain
27a00 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65   space for large
27a10 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63   automatic objec
27a20 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c  ts.  By default,
27a30 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65  .** obtain space
27a40 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a   from malloc()..
27a50 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61  **.** The alloca
27a60 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72  () routine never
27a70 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20   returns NULL.  
27a80 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20  This will cause 
27a90 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68  code paths.** th
27aa0 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c  at deal with sql
27ab0 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29  ite3StackAlloc()
27ac0 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20   failures to be 
27ad0 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a  unreachable..*/.
27ae0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
27af0 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e  E_ALLOCA.# defin
27b00 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
27b10 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c  locRaw(D,N)   al
27b20 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65  loca(N).# define
27b30 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
27b40 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d  ocZero(D,N)  mem
27b50 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30  set(alloca(N), 0
27b60 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  , N).# define sq
27b70 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44  lite3StackFree(D
27b80 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ,P).#else.# defi
27b90 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
27ba0 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73  llocRaw(D,N)   s
27bb0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
27bc0 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  w(D,N).# define 
27bd0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
27be0 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69  cZero(D,N)  sqli
27bf0 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
27c00 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  D,N).# define sq
27c10 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44  lite3StackFree(D
27c20 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65  ,P)       sqlite
27c30 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e  3DbFree(D,P).#en
27c40 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20 61  dif../* Do not a
27c50 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59 53  llow both MEMSYS
27c60 35 20 61 6e 64 20 4d 45 4d 53 59 53 33 20 74 6f  5 and MEMSYS3 to
27c70 20 62 65 20 64 65 66 69 6e 65 64 20 74 6f 67 65   be defined toge
27c80 74 68 65 72 2e 20 20 49 66 20 74 68 65 79 0a 2a  ther.  If they.*
27c90 2a 20 61 72 65 2c 20 64 69 73 61 62 6c 65 20 4d  * are, disable M
27ca0 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65 66  EMSYS3.*/.#ifdef
27cb0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
27cc0 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c  EMSYS5.const sql
27cd0 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
27ce0 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d   *sqlite3MemGetM
27cf0 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 75  emsys5(void);.#u
27d00 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
27d10 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64 69  LE_MEMSYS3.#endi
27d20 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
27d30 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63  ENABLE_MEMSYS3.c
27d40 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
27d50 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
27d60 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76  3MemGetMemsys3(v
27d70 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23  oid);.#endif...#
27d80 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55  ifndef SQLITE_MU
27d90 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74  TEX_OMIT.  sqlit
27da0 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
27db0 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44   const *sqlite3D
27dc0 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64  efaultMutex(void
27dd0 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
27de0 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
27df0 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74   *sqlite3NoopMut
27e00 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
27e10 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
27e20 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74  e3MutexAlloc(int
27e30 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
27e40 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b  MutexInit(void);
27e50 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
27e60 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65  texEnd(void);.#e
27e70 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
27e80 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  d(SQLITE_MUTEX_O
27e90 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  MIT) && !defined
27ea0 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f  (SQLITE_MUTEX_NO
27eb0 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  OP).  void sqlit
27ec0 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28  e3MemoryBarrier(
27ed0 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64  void);.#else.# d
27ee0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
27ef0 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e  oryBarrier().#en
27f00 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74  dif..sqlite3_int
27f10 36 34 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  64 sqlite3Status
27f20 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64  Value(int);.void
27f30 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 55 70   sqlite3StatusUp
27f40 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  (int, int);.void
27f50 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f   sqlite3StatusDo
27f60 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  wn(int, int);.vo
27f70 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
27f80 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69  Highwater(int, i
27f90 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
27fa0 4c 6f 6f 6b 61 73 69 64 65 55 73 65 64 28 73 71  LookasideUsed(sq
27fb0 6c 69 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a 0a 2f  lite3*,int*);../
27fc0 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74 65  * Access to mute
27fd0 78 65 73 20 75 73 65 64 20 62 79 20 73 71 6c 69  xes used by sqli
27fe0 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a  te3_status() */.
27ff0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
28000 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75 74  qlite3Pcache1Mut
28010 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65  ex(void);.sqlite
28020 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
28030 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64  MallocMutex(void
28040 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  );..#if defined(
28050 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 55  SQLITE_ENABLE_MU
28060 4c 54 49 54 48 52 45 41 44 45 44 5f 43 48 45 43  LTITHREADED_CHEC
28070 4b 53 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  KS) && !defined(
28080 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49  SQLITE_MUTEX_OMI
28090 54 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  T).void sqlite3M
280a0 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e  utexWarnOnConten
280b0 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 6d 75 74  tion(sqlite3_mut
280c0 65 78 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ex*);.#else.# de
280d0 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 75 74 65  fine sqlite3Mute
280e0 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f  xWarnOnContentio
280f0 6e 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  n(x).#endif..#if
28100 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
28110 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
28120 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e    int sqlite3IsN
28130 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73  aN(double);.#els
28140 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
28150 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65  e3IsNaN(X)  0.#e
28160 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
28170 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
28180 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
28190 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61  re holds informa
281a0 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a  tion about SQL.*
281b0 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75  * functions argu
281c0 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74  ments that are t
281d0 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  he parameters to
281e0 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75   the printf() fu
281f0 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  nction..*/.struc
28200 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
28210 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20  s {.  int nArg; 
28220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28230 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  * Total number o
28240 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
28250 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20   int nUsed;     
28260 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
28270 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
28280 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
28290 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
282a0 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68  **apArg;   /* Th
282b0 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65  e argument value
282c0 73 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72 20 2a 73  s */.};..char *s
282d0 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71  qlite3MPrintf(sq
282e0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
282f0 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a  r*, ...);.char *
28300 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28  sqlite3VMPrintf(
28310 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
28320 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
28330 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
28340 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
28350 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45  ined(SQLITE_HAVE
28360 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69  _OS_TRACE).  voi
28370 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  d sqlite3DebugPr
28380 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a  intf(const char*
28390 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23  , ...);.#endif.#
283a0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
283b0 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a  E_TEST).  void *
283c0 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54  sqlite3TestTextT
283d0 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a  oPtr(const char*
283e0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  );.#endif..#if d
283f0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
28400 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  BUG).  void sqli
28410 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28  te3TreeViewExpr(
28420 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
28430 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76   Expr*, u8);.  v
28440 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
28450 69 65 77 42 61 72 65 45 78 70 72 4c 69 73 74 28  iewBareExprList(
28460 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
28470 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
28480 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
28490 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
284a0 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65  ExprList(TreeVie
284b0 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69  w*, const ExprLi
284c0 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  st*, u8, const c
284d0 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
284e0 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 65 6c  lite3TreeViewSel
284f0 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ect(TreeView*, c
28500 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38  onst Select*, u8
28510 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
28520 33 54 72 65 65 56 69 65 77 57 69 74 68 28 54 72  3TreeViewWith(Tr
28530 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57  eeView*, const W
28540 69 74 68 2a 2c 20 75 38 29 3b 0a 23 69 66 6e 64  ith*, u8);.#ifnd
28550 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
28560 49 4e 44 4f 57 46 55 4e 43 0a 20 20 76 6f 69 64  INDOWFUNC.  void
28570 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
28580 57 69 6e 64 6f 77 28 54 72 65 65 56 69 65 77 2a  Window(TreeView*
28590 2c 20 63 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c  , const Window*,
285a0 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c   u8);.  void sql
285b0 69 74 65 33 54 72 65 65 56 69 65 77 57 69 6e 46  ite3TreeViewWinF
285c0 75 6e 63 28 54 72 65 65 56 69 65 77 2a 2c 20 63  unc(TreeView*, c
285d0 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38  onst Window*, u8
285e0 29 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  );.#endif.#endif
285f0 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ...void sqlite3S
28600 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a  etString(char **
28610 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  , sqlite3*, cons
28620 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
28630 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50  qlite3ErrorMsg(P
28640 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
28650 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
28660 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68  qlite3Dequote(ch
28670 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
28680 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65  e3TokenInit(Toke
28690 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  n*,char*);.int s
286a0 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64  qlite3KeywordCod
286b0 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  e(const unsigned
286c0 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
286d0 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73  t sqlite3RunPars
286e0 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  er(Parse*, const
286f0 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29   char*, char **)
28700 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
28710 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65  nishCoding(Parse
28720 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
28730 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  etTempReg(Parse*
28740 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
28750 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61  eleaseTempReg(Pa
28760 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  rse*,int);.int s
28770 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e  qlite3GetTempRan
28780 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  ge(Parse*,int);.
28790 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
287a0 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72  aseTempRange(Par
287b0 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  se*,int,int);.vo
287c0 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54  id sqlite3ClearT
287d0 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73  empRegCache(Pars
287e0 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  e*);.#ifdef SQLI
287f0 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c  TE_DEBUG.int sql
28800 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e  ite3NoTempsInRan
28810 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e  ge(Parse*,int,in
28820 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70 72 20  t);.#endif.Expr 
28830 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f  *sqlite3ExprAllo
28840 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  c(sqlite3*,int,c
28850 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29  onst Token*,int)
28860 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
28870 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  xpr(sqlite3*,int
28880 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
28890 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
288a0 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73 71  ttachSubtrees(sq
288b0 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70  lite3*,Expr*,Exp
288c0 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  r*,Expr*);.Expr 
288d0 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50 61  *sqlite3PExpr(Pa
288e0 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a  rse*, int, Expr*
288f0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
28900 71 6c 69 74 65 33 50 45 78 70 72 41 64 64 53 65  qlite3PExprAddSe
28910 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70  lect(Parse*, Exp
28920 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 45 78  r*, Select*);.Ex
28930 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
28940 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  nd(sqlite3*,Expr
28950 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  *, Expr*);.Expr 
28960 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63  *sqlite3ExprFunc
28970 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  tion(Parse*,Expr
28980 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69  List*, Token*, i
28990 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
289a0 33 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75  3ExprAssignVarNu
289b0 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70  mber(Parse*, Exp
289c0 72 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73  r*, u32);.void s
289d0 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74 65  qlite3ExprDelete
289e0 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a  (sqlite3*, Expr*
289f0 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
28a00 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65  ite3ExprListAppe
28a10 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  nd(Parse*,ExprLi
28a20 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  st*,Expr*);.Expr
28a30 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
28a40 72 4c 69 73 74 41 70 70 65 6e 64 56 65 63 74 6f  rListAppendVecto
28a50 72 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  r(Parse*,ExprLis
28a60 74 2a 2c 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a  t*,IdList*,Expr*
28a70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
28a80 78 70 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72  xprListSetSortOr
28a90 64 65 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e  der(ExprList*,in
28aa0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28ab0 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28  ExprListSetName(
28ac0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
28ad0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
28ae0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
28af0 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a  stSetSpan(Parse*
28b00 2c 45 78 70 72 4c 69 73 74 2a 2c 63 6f 6e 73 74  ,ExprList*,const
28b10 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
28b20 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
28b30 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28  3ExprListDelete(
28b40 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69  sqlite3*, ExprLi
28b50 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  st*);.u32 sqlite
28b60 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63  3ExprListFlags(c
28b70 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b  onst ExprList*);
28b80 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
28b90 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a  (sqlite3*, char*
28ba0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
28bb0 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64  nitCallback(void
28bc0 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20  *, int, char**, 
28bd0 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  char**);.int sql
28be0 69 74 65 33 49 6e 69 74 4f 6e 65 28 73 71 6c 69  ite3InitOne(sqli
28bf0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a  te3*, int, char*
28c00 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71  *, u32);.void sq
28c10 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73  lite3Pragma(Pars
28c20 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
28c30 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69  ,Token*,int);.#i
28c40 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
28c50 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d  T_VIRTUALTABLE.M
28c60 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 50 72  odule *sqlite3Pr
28c70 61 67 6d 61 56 74 61 62 52 65 67 69 73 74 65 72  agmaVtabRegister
28c80 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
28c90 63 68 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65  char *zName);.#e
28ca0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
28cb0 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
28cc0 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c  OfConnection(sql
28cd0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
28ce0 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
28cf0 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ma(sqlite3*,int)
28d00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
28d10 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72  llapseDatabaseAr
28d20 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ray(sqlite3*);.v
28d30 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
28d40 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73  tInternalChanges
28d50 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
28d60 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f   sqlite3DeleteCo
28d70 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65  lumnNames(sqlite
28d80 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20  3*,Table*);.int 
28d90 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72  sqlite3ColumnsFr
28da0 6f 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  omExprList(Parse
28db0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a  *,ExprList*,i16*
28dc0 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64  ,Column**);.void
28dd0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 41 64   sqlite3SelectAd
28de0 64 43 6f 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f  dColumnTypeAndCo
28df0 6c 6c 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54  llation(Parse*,T
28e00 61 62 6c 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  able*,Select*);.
28e10 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65  Table *sqlite3Re
28e20 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28  sultSetOfSelect(
28e30 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Parse*,Select*);
28e40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
28e50 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
28e60 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65  se *, int);.Inde
28e70 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72  x *sqlite3Primar
28e80 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a  yKeyIndex(Table*
28e90 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f  );.i16 sqlite3Co
28ea0 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65  lumnOfIndex(Inde
28eb0 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73  x*, i16);.void s
28ec0 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
28ed0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
28ee0 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
28ef0 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49  t,int);.#if SQLI
28f00 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e  TE_ENABLE_HIDDEN
28f10 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20  _COLUMNS.  void 
28f20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f  sqlite3ColumnPro
28f30 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28  pertiesFromName(
28f40 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29  Table*, Column*)
28f50 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
28f60 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72   sqlite3ColumnPr
28f70 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65  opertiesFromName
28f80 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  (T,C) /* no-op *
28f90 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  /.#endif.void sq
28fa0 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50  lite3AddColumn(P
28fb0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
28fc0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
28fd0 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72  e3AddNotNull(Par
28fe0 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
28ff0 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72  sqlite3AddPrimar
29000 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  yKey(Parse*, Exp
29010 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
29020 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
29030 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73  ite3AddCheckCons
29040 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45  traint(Parse*, E
29050 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
29060 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c  te3AddDefaultVal
29070 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ue(Parse*,Expr*,
29080 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
29090 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
290a0 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65  qlite3AddCollate
290b0 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
290c0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
290d0 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65  e3EndTable(Parse
290e0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
290f0 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  u8,Select*);.int
29100 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69   sqlite3ParseUri
29110 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  (const char*,con
29120 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65  st char*,unsigne
29130 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20  d int*,.        
29140 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
29150 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a  te3_vfs**,char**
29160 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65  ,char **);.Btree
29170 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54   *sqlite3DbNameT
29180 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  oBtree(sqlite3*,
29190 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 0a 23  const char*);..#
291a0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  ifdef SQLITE_UNT
291b0 45 53 54 41 42 4c 45 0a 23 20 64 65 66 69 6e 65  ESTABLE.# define
291c0 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
291d0 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65  (X) SQLITE_OK.#e
291e0 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  lse.  int sqlite
291f0 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a  3FaultSim(int);.
29200 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a  #endif..Bitvec *
29210 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65  sqlite3BitvecCre
29220 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71  ate(u32);.int sq
29230 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28  lite3BitvecTest(
29240 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
29250 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
29260 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76  TestNotNull(Bitv
29270 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73  ec*, u32);.int s
29280 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74 28  qlite3BitvecSet(
29290 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76  Bitvec*, u32);.v
292a0 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65  oid sqlite3Bitve
292b0 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20  cClear(Bitvec*, 
292c0 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  u32, void*);.voi
292d0 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 44  d sqlite3BitvecD
292e0 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b  estroy(Bitvec*);
292f0 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74 76  .u32 sqlite3Bitv
29300 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b  ecSize(Bitvec*);
29310 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29320 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e 74 20 73  UNTESTABLE.int s
29330 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c  qlite3BitvecBuil
29340 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a  tinTest(int,int*
29350 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65  );.#endif..RowSe
29360 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74  t *sqlite3RowSet
29370 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  Init(sqlite3*);.
29380 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
29390 65 74 44 65 6c 65 74 65 28 76 6f 69 64 2a 29 3b  etDelete(void*);
293a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
293b0 53 65 74 43 6c 65 61 72 28 76 6f 69 64 2a 29 3b  SetClear(void*);
293c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
293d0 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74  SetInsert(RowSet
293e0 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  *, i64);.int sql
293f0 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52  ite3RowSetTest(R
29400 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74  owSet*, int iBat
29410 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  ch, i64);.int sq
29420 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28  lite3RowSetNext(
29430 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a  RowSet*, i64*);.
29440 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
29450 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54  ateView(Parse*,T
29460 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
29470 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65  en*,ExprList*,Se
29480 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  lect*,int,int);.
29490 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
294a0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
294b0 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  || !defined(SQLI
294c0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
294d0 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  ABLE).  int sqli
294e0 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
294f0 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62  Names(Parse*,Tab
29500 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
29510 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77  fine sqlite3View
29520 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41  GetColumnNames(A
29530 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69  ,B) 0.#endif..#i
29540 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  f SQLITE_MAX_ATT
29550 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73  ACHED>30.  int s
29560 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
29570 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65  ero(yDbMask);.#e
29580 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
29590 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  3DropTable(Parse
295a0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
295b0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
295c0 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c  ite3CodeDropTabl
295d0 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
295e0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
295f0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
29600 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
29610 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  able*);.void sql
29620 69 74 65 33 46 72 65 65 49 6e 64 65 78 28 73 71  ite3FreeIndex(sq
29630 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b  lite3*, Index*);
29640 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29650 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
29660 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NT.  void sqlite
29670 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
29680 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  gin(Parse *pPars
29690 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  e);.  void sqlit
296a0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
296b0 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  nd(Parse *pParse
296c0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
296d0 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
296e0 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23  rementBegin(X).#
296f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
29700 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
29710 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  X).#endif.void s
29720 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72  qlite3Insert(Par
29730 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53  se*, SrcList*, S
29740 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c  elect*, IdList*,
29750 20 69 6e 74 2c 20 55 70 73 65 72 74 2a 29 3b 0a   int, Upsert*);.
29760 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72  void *sqlite3Arr
29770 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74  ayAllocate(sqlit
29780 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e  e3*,void*,int,in
29790 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74  t*,int*);.IdList
297a0 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41   *sqlite3IdListA
297b0 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 20 49 64  ppend(Parse*, Id
297c0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
297d0 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73  int sqlite3IdLis
297e0 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63  tIndex(IdList*,c
297f0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63  onst char*);.Src
29800 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
29810 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69  ListEnlarge(sqli
29820 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
29830 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69  int, int);.SrcLi
29840 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
29850 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
29860 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
29870 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72  en*, Token*);.Sr
29880 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
29890 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54  cListAppendFromT
298a0 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  erm(Parse*, SrcL
298b0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
298c0 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
298d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298e0 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65              Toke
298f0 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  n*, Select*, Exp
29900 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  r*, IdList*);.vo
29910 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
29920 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65  tIndexedBy(Parse
29930 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54   *, SrcList *, T
29940 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71  oken *);.void sq
29950 6c 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e 63  lite3SrcListFunc
29960 41 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72 63  Args(Parse*, Src
29970 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
29980 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
29990 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61  dexedByLookup(Pa
299a0 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72  rse *, struct Sr
299b0 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76  cList_item *);.v
299c0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
299d0 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
299e0 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
299f0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73  sqlite3SrcListAs
29a00 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73  signCursors(Pars
29a10 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76  e*, SrcList*);.v
29a20 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73  oid sqlite3IdLis
29a30 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
29a40 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
29a50 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44   sqlite3SrcListD
29a60 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
29a70 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78  SrcList*);.Index
29a80 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74   *sqlite3Allocat
29a90 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c  eIndexObject(sql
29aa0 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68  ite3*,i16,int,ch
29ab0 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar**);.void sqli
29ac0 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50  te3CreateIndex(P
29ad0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
29ae0 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  en*,SrcList*,Exp
29af0 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e  rList*,int,Token
29b00 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
29b10 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
29b20 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  r*, int, int, u8
29b30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
29b40 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ropIndex(Parse*,
29b50 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
29b60 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65  .int sqlite3Sele
29b70 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ct(Parse*, Selec
29b80 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29  t*, SelectDest*)
29b90 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
29ba0 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65  3SelectNew(Parse
29bb0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c  *,ExprList*,SrcL
29bc0 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
29bd0 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
29be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
29bf0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75  xpr*,ExprList*,u
29c00 33 32 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  32,Expr*);.void 
29c10 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c  sqlite3SelectDel
29c20 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65  ete(sqlite3*, Se
29c30 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  lect*);.Table *s
29c40 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f  qlite3SrcListLoo
29c50 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  kup(Parse*, SrcL
29c60 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
29c70 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72  e3IsReadOnly(Par
29c80 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
29c90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
29ca0 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  penTable(Parse*,
29cb0 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69   int iCur, int i
29cc0 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  Db, Table*, int)
29cd0 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
29ce0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
29cf0 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29  TE_DELETE_LIMIT)
29d00 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
29d10 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
29d20 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  Y).Expr *sqlite3
29d30 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65  LimitWhere(Parse
29d40 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
29d50 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
29d60 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a  ,char*);.#endif.
29d70 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
29d80 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53  teFrom(Parse*, S
29d90 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  rcList*, Expr*, 
29da0 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
29db0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
29dc0 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72  pdate(Parse*, Sr
29dd0 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
29de0 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 45 78 70 72  *,Expr*,int,Expr
29df0 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 0a 20 20 20  List*,Expr*,.   
29e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e10 55 70 73 65 72 74 2a 29 3b 0a 57 68 65 72 65 49  Upsert*);.WhereI
29e20 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72  nfo *sqlite3Wher
29e30 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72  eBegin(Parse*,Sr
29e40 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
29e50 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  rList*,ExprList*
29e60 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,u16,int);.void 
29e70 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28  sqlite3WhereEnd(
29e80 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67  WhereInfo*);.Log
29e90 45 73 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  Est sqlite3Where
29ea0 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57  OutputRowCount(W
29eb0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
29ec0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
29ed0 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f  stinct(WhereInfo
29ee0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
29ef0 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68  hereIsOrdered(Wh
29f00 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
29f10 71 6c 69 74 65 33 57 68 65 72 65 4f 72 64 65 72  qlite3WhereOrder
29f20 42 79 4c 69 6d 69 74 4f 70 74 4c 61 62 65 6c 28  ByLimitOptLabel(
29f30 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
29f40 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53   sqlite3WhereIsS
29f50 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  orted(WhereInfo*
29f60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
29f70 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c  ereContinueLabel
29f80 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
29f90 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 72  t sqlite3WhereBr
29fa0 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e  eakLabel(WhereIn
29fb0 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
29fc0 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28  3WhereOkOnePass(
29fd0 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a  WhereInfo*, int*
29fe0 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  );.#define ONEPA
29ff0 53 53 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20  SS_OFF      0   
2a000 20 20 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f       /* Use of O
2a010 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77  NEPASS not allow
2a020 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e  ed */.#define ON
2a030 45 50 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31  EPASS_SINGLE   1
2a040 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41          /* ONEPA
2a050 53 53 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73  SS valid for a s
2a060 69 6e 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65  ingle row update
2a070 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50   */.#define ONEP
2a080 41 53 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20  ASS_MULTI    2  
2a090 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53        /* ONEPASS
2a0a0 20 69 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75   is valid for mu
2a0b0 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76  ltiple rows */.v
2a0c0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
2a0d0 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75  odeLoadIndexColu
2a0e0 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78  mn(Parse*, Index
2a0f0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2a100 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2a110 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28  prCodeGetColumn(
2a120 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2a130 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  int, int, int, u
2a140 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
2a150 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
2a160 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20  nOfTable(Vdbe*, 
2a170 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
2a180 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2a190 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65  ite3ExprCodeMove
2a1a0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
2a1b0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2a1c0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61  lite3ExprCode(Pa
2a1d0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2a1e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a1f0 78 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72 73  xprCodeCopy(Pars
2a200 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
2a210 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2a220 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28  rCodeFactorable(
2a230 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2a240 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2a250 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50  ExprCodeAtInit(P
2a260 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2a270 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2a280 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73  xprCodeTemp(Pars
2a290 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29  e*, Expr*, int*)
2a2a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2a2b0 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73  rCodeTarget(Pars
2a2c0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
2a2d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2a2e0 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61  rCodeAndCache(Pa
2a2f0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2a300 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2a310 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50  prCodeExprList(P
2a320 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
2a330 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
2a340 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2a350 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78  ECEL_DUP      0x
2a360 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74  01  /* Deep, not
2a370 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20   shallow copies 
2a380 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
2a390 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20  E_ECEL_FACTOR   
2a3a0 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20  0x02  /* Factor 
2a3b0 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72  out constant ter
2a3c0 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ms */.#define SQ
2a3d0 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20  LITE_ECEL_REF   
2a3e0 20 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20     0x04  /* Use 
2a3f0 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72  ExprList.u.x.iOr
2a400 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66  derByCol */.#def
2a410 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
2a420 4f 4d 49 54 52 45 46 20 20 30 78 30 38 20 20 2f  OMITREF  0x08  /
2a430 2a 20 4f 6d 69 74 20 69 66 20 45 78 70 72 4c 69  * Omit if ExprLi
2a440 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43  st.u.x.iOrderByC
2a450 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  ol */.void sqlit
2a460 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72  e3ExprIfTrue(Par
2a470 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
2a480 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2a490 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50  te3ExprIfFalse(P
2a4a0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2a4b0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2a4c0 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
2a4d0 44 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Dup(Parse*, Expr
2a4e0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61  *, int, int);.Ta
2a4f0 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  ble *sqlite3Find
2a500 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63  Table(sqlite3*,c
2a510 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2a520 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  t char*);.#defin
2a530 65 20 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20  e LOCATE_VIEW   
2a540 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f   0x01.#define LO
2a550 43 41 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30  CATE_NOERR   0x0
2a560 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  2.Table *sqlite3
2a570 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73  LocateTable(Pars
2a580 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e  e*,u32 flags,con
2a590 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2a5a0 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  char*);.Table *s
2a5b0 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
2a5c0 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32  eItem(Parse*,u32
2a5d0 20 66 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72   flags,struct Sr
2a5e0 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49  cList_item *);.I
2a5f0 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e  ndex *sqlite3Fin
2a600 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  dIndex(sqlite3*,
2a610 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2a620 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2a630 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2a640 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
2a650 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
2a660 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2a670 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
2a680 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  teIndex(sqlite3*
2a690 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
2a6a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2a6b0 61 63 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b  acuum(Parse*,Tok
2a6c0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2a6d0 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a  3RunVacuum(char*
2a6e0 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  *, sqlite3*, int
2a6f0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
2a700 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71  NameFromToken(sq
2a710 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
2a720 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2a730 43 6f 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 45  Compare(Parse*,E
2a740 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
2a750 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2a760 70 72 43 6f 6d 70 61 72 65 53 6b 69 70 28 45 78  prCompareSkip(Ex
2a770 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
2a780 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2a790 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70  rListCompare(Exp
2a7a0 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  rList*, ExprList
2a7b0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2a7c0 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45  ite3ExprImpliesE
2a7d0 78 70 72 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  xpr(Parse*,Expr*
2a7e0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
2a7f0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d  nt sqlite3ExprIm
2a800 70 6c 69 65 73 4e 6f 6e 4e 75 6c 6c 52 6f 77 28  pliesNonNullRow(
2a810 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  Expr*,int);.void
2a820 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
2a830 79 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61  yzeAggregates(Na
2a840 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
2a850 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a860 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69  ExprAnalyzeAggLi
2a870 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  st(NameContext*,
2a880 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
2a890 73 71 6c 69 74 65 33 45 78 70 72 43 6f 76 65 72  sqlite3ExprCover
2a8a0 65 64 42 79 49 6e 64 65 78 28 45 78 70 72 2a 2c  edByIndex(Expr*,
2a8b0 20 69 6e 74 20 69 43 75 72 2c 20 49 6e 64 65 78   int iCur, Index
2a8c0 20 2a 70 49 64 78 29 3b 0a 69 6e 74 20 73 71 6c   *pIdx);.int sql
2a8d0 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73  ite3FunctionUses
2a8e0 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53  ThisSrc(Expr*, S
2a8f0 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a  rcList*);.Vdbe *
2a900 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50  sqlite3GetVdbe(P
2a910 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20  arse*);.#ifndef 
2a920 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
2a930 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  E.void sqlite3Pr
2a940 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64  ngSaveState(void
2a950 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
2a960 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28  rngRestoreState(
2a970 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  void);.#endif.vo
2a980 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
2a990 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69  ckAll(sqlite3*,i
2a9a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2a9b0 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
2a9c0 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  a(Parse*, int);.
2a9d0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
2a9e0 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d  VerifyNamedSchem
2a9f0 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  a(Parse*, const 
2aa00 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64  char *zDb);.void
2aa10 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61   sqlite3BeginTra
2aa20 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsaction(Parse*,
2aa30 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2aa40 74 65 33 45 6e 64 54 72 61 6e 73 61 63 74 69 6f  te3EndTransactio
2aa50 6e 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  n(Parse*,int);.v
2aa60 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70  oid sqlite3Savep
2aa70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  oint(Parse*, int
2aa80 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2aa90 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
2aaa0 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a  points(sqlite3 *
2aab0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c  );.void sqlite3L
2aac0 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73  eaveMutexAndClos
2aad0 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a  eZombie(sqlite3*
2aae0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2aaf0 70 72 49 64 54 6f 54 72 75 65 46 61 6c 73 65 28  prIdToTrueFalse(
2ab00 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2ab10 74 65 33 45 78 70 72 54 72 75 74 68 56 61 6c 75  te3ExprTruthValu
2ab20 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a  e(const Expr*);.
2ab30 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2ab40 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29  sConstant(Expr*)
2ab50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2ab60 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f  rIsConstantNotJo
2ab70 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  in(Expr*);.int s
2ab80 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
2ab90 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45  tantOrFunction(E
2aba0 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73  xpr*, u8);.int s
2abb0 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
2abc0 74 61 6e 74 4f 72 47 72 6f 75 70 42 79 28 50 61  tantOrGroupBy(Pa
2abd0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  rse*, Expr*, Exp
2abe0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
2abf0 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43  ite3ExprIsTableC
2ac00 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e  onstant(Expr*,in
2ac10 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
2ac20 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f  E_ENABLE_CURSOR_
2ac30 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65  HINTS.int sqlite
2ac40 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62  3ExprContainsSub
2ac50 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65  query(Expr*);.#e
2ac60 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2ac70 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78  ExprIsInteger(Ex
2ac80 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
2ac90 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65  sqlite3ExprCanBe
2aca0 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a  Null(const Expr*
2acb0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2acc0 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74  prNeedsNoAffinit
2acd0 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78  yChange(const Ex
2ace0 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20  pr*, char);.int 
2acf0 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63  sqlite3IsRowid(c
2ad00 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2ad10 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
2ad20 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20  eRowDelete(.    
2ad30 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72  Parse*,Table*,Tr
2ad40 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  igger*,int,int,i
2ad50 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c  nt,i16,u8,u8,u8,
2ad60 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2ad70 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64  e3GenerateRowInd
2ad80 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  exDelete(Parse*,
2ad90 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
2ada0 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69  t, int*, int);.i
2adb0 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  nt sqlite3Genera
2adc0 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65  teIndexKey(Parse
2add0 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20  *, Index*, int, 
2ade0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49  int, int, int*,I
2adf0 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ndex*,int);.void
2ae00 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50   sqlite3ResolveP
2ae10 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73  artIdxLabel(Pars
2ae20 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  e*,int);.int sql
2ae30 69 74 65 33 45 78 70 72 52 65 66 65 72 65 6e 63  ite3ExprReferenc
2ae40 65 73 55 70 64 61 74 65 64 43 6f 6c 75 6d 6e 28  esUpdatedColumn(
2ae50 45 78 70 72 2a 2c 69 6e 74 2a 2c 69 6e 74 29 3b  Expr*,int*,int);
2ae60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
2ae70 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43  erateConstraintC
2ae80 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62  hecks(Parse*,Tab
2ae90 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74  le*,int*,int,int
2aea0 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20  ,int,int,.      
2aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
2aed0 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  8,u8,int,int*,in
2aee0 74 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 23 69 66  t*,Upsert*);.#if
2aef0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2af00 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f  E_NULL_TRIM.  vo
2af10 69 64 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b  id sqlite3SetMak
2af20 65 52 65 63 6f 72 64 50 35 28 56 64 62 65 2a 2c  eRecordP5(Vdbe*,
2af30 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23  Table*);.#else.#
2af40 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
2af50 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 41  etMakeRecordP5(A
2af60 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  ,B).#endif.void 
2af70 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49  sqlite3CompleteI
2af80 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsertion(Parse*,
2af90 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69  Table*,int,int,i
2afa0 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c  nt,int*,int,int,
2afb0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2afc0 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64  3OpenTableAndInd
2afd0 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62  ices(Parse*, Tab
2afe0 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e  le*, int, u8, in
2aff0 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e  t, u8*, int*, in
2b000 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
2b010 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61  3BeginWriteOpera
2b020 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
2b030 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2b040 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50  ite3MultiWrite(P
2b050 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
2b060 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72  ite3MayAbort(Par
2b070 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
2b080 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74  e3HaltConstraint
2b090 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
2b0a0 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38  t, char*, i8, u8
2b0b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
2b0c0 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28  niqueConstraint(
2b0d0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64  Parse*, int, Ind
2b0e0 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
2b0f0 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e  e3RowidConstrain
2b100 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54  t(Parse*, int, T
2b110 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71  able*);.Expr *sq
2b120 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c  lite3ExprDup(sql
2b130 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29  ite3*,Expr*,int)
2b140 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
2b150 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73  te3ExprListDup(s
2b160 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74  qlite3*,ExprList
2b170 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  *,int);.SrcList 
2b180 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44  *sqlite3SrcListD
2b190 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c  up(sqlite3*,SrcL
2b1a0 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73  ist*,int);.IdLis
2b1b0 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
2b1c0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c  Dup(sqlite3*,IdL
2b1d0 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73  ist*);.Select *s
2b1e0 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28  qlite3SelectDup(
2b1f0 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
2b200 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2b210 74 65 33 49 6e 73 65 72 74 42 75 69 6c 74 69 6e  te3InsertBuiltin
2b220 46 75 6e 63 73 28 46 75 6e 63 44 65 66 2a 2c 69  Funcs(FuncDef*,i
2b230 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71  nt);.FuncDef *sq
2b240 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f  lite3FindFunctio
2b250 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  n(sqlite3*,const
2b260 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38 2c 75 38   char*,int,u8,u8
2b270 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2b280 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75  egisterBuiltinFu
2b290 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
2b2a0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
2b2b0 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74  terDateTimeFunct
2b2c0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
2b2d0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
2b2e0 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e 42 75 69  PerConnectionBui
2b2f0 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71  ltinFunctions(sq
2b300 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
2b310 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
2b320 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  k(sqlite3*);.int
2b330 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
2b340 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69  eckSickOrOk(sqli
2b350 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
2b360 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28  te3ChangeCookie(
2b370 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23  Parse*, int);..#
2b380 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2b390 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26  TE_OMIT_VIEW) &&
2b3a0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2b3b0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76  _OMIT_TRIGGER).v
2b3c0 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72  oid sqlite3Mater
2b3d0 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65  ializeView(Parse
2b3e0 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a  *, Table*, Expr*
2b3f0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  , ExprList*,Expr
2b400 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  *,int);.#endif..
2b410 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2b420 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f  MIT_TRIGGER.  vo
2b430 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
2b440 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
2b450 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
2b460 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63  ,int,IdList*,Src
2b470 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
2b480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b490 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74    Expr*,int, int
2b4a0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2b4b0 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28 50  3FinishTrigger(P
2b4c0 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74  arse*, TriggerSt
2b4d0 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20  ep*, Token*);.  
2b4e0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
2b4f0 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
2b500 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
2b510 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
2b520 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61 72  opTriggerPtr(Par
2b530 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a  se*, Trigger*);.
2b540 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
2b550 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
2b560 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c  Parse *, Table*,
2b570 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
2b580 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20   int *pMask);.  
2b590 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
2b5a0 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72 73  TriggerList(Pars
2b5b0 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20  e *, Table *);. 
2b5c0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
2b5d0 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73  eRowTrigger(Pars
2b5e0 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69  e*, Trigger *, i
2b5f0 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
2b600 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20  nt, Table *,.   
2b610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b620 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e           int, in
2b630 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
2b640 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
2b650 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72 73  iggerDirect(Pars
2b660 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  e *, Trigger *, 
2b670 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
2b680 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
2b690 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65  sqliteViewTrigge
2b6a0 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  rs(Parse*, Table
2b6b0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45  *, Expr*, int, E
2b6c0 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69  xprList*);.  voi
2b6d0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
2b6e0 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74  riggerStep(sqlit
2b6f0 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  e3*, TriggerStep
2b700 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
2b710 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
2b720 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69  rSelectStep(sqli
2b730 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 0a 20 20  te3*,Select*,.  
2b740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b760 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2b770 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
2b780 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
2b790 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73  qlite3TriggerIns
2b7a0 65 72 74 53 74 65 70 28 50 61 72 73 65 2a 2c 54  ertStep(Parse*,T
2b7b0 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a  oken*, IdList*,.
2b7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7e0 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c          Select*,
2b7f0 75 38 2c 55 70 73 65 72 74 2a 2c 0a 20 20 20 20  u8,Upsert*,.    
2b800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b820 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2b830 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2b840 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
2b850 69 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74  ite3TriggerUpdat
2b860 65 53 74 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b  eStep(Parse*,Tok
2b870 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45  en*,ExprList*, E
2b880 78 70 72 2a 2c 20 75 38 2c 0a 20 20 20 20 20 20  xpr*, u8,.      
2b890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8b0 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f    const char*,co
2b8c0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72  nst char*);.  Tr
2b8d0 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
2b8e0 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53  e3TriggerDeleteS
2b8f0 74 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  tep(Parse*,Token
2b900 2a 2c 20 45 78 70 72 2a 2c 0a 20 20 20 20 20 20  *, Expr*,.      
2b910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b930 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f    const char*,co
2b940 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
2b950 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
2b960 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
2b970 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76  , Trigger*);.  v
2b980 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
2b990 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
2b9a0 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
2b9b0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75  onst char*);.  u
2b9c0 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  32 sqlite3Trigge
2b9d0 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c  rColmask(Parse*,
2b9e0 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73  Trigger*,ExprLis
2b9f0 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65  t*,int,int,Table
2ba00 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65  *,int);.# define
2ba10 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
2ba20 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70  level(p) ((p)->p
2ba30 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e  Toplevel ? (p)->
2ba40 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29  pToplevel : (p))
2ba50 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2ba60 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 28  3IsToplevel(p) (
2ba70 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d  (p)->pToplevel==
2ba80 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
2ba90 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
2baa0 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46  sExist(B,C,D,E,F
2bab0 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
2bac0 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
2bad0 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  r(A,B).# define 
2bae0 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
2baf0 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66  erPtr(A,B).# def
2bb00 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  ine sqlite3Unlin
2bb10 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
2bb20 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e  r(A,B,C).# defin
2bb30 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
2bb40 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c  Trigger(A,B,C,D,
2bb50 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66  E,F,G,H,I).# def
2bb60 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
2bb70 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
2bb80 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64  A,B,C,D,E,F).# d
2bb90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
2bba0 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30  ggerList(X, Y) 0
2bbb0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2bbc0 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70  3ParseToplevel(p
2bbd0 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) p.# define sql
2bbe0 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70  ite3IsToplevel(p
2bbf0 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 1.# define sql
2bc00 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
2bc10 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  sk(A,B,C,D,E,F,G
2bc20 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  ) 0.#endif..int 
2bc30 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28  sqlite3JoinType(
2bc40 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
2bc50 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
2bc60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
2bc70 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ateForeignKey(Pa
2bc80 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2bc90 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73   Token*, ExprLis
2bca0 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  t*, int);.void s
2bcb0 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69  qlite3DeferForei
2bcc0 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e  gnKey(Parse*, in
2bcd0 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
2bce0 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
2bcf0 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  ATION.  void sql
2bd00 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72  ite3AuthRead(Par
2bd10 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61  se*,Expr*,Schema
2bd20 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69  *,SrcList*);.  i
2bd30 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  nt sqlite3AuthCh
2bd40 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20  eck(Parse*,int, 
2bd50 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2bd60 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2bd70 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
2bd80 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
2bd90 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75  tPush(Parse*, Au
2bda0 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73  thContext*, cons
2bdb0 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
2bdc0 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
2bdd0 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65  extPop(AuthConte
2bde0 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  xt*);.  int sqli
2bdf0 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50  te3AuthReadCol(P
2be00 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
2be10 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  r *, const char 
2be20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23  *, int);.#else.#
2be30 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
2be40 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29  uthRead(a,b,c,d)
2be50 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2be60 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63  3AuthCheck(a,b,c
2be70 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f  ,d,e)    SQLITE_
2be80 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  OK.# define sqli
2be90 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75  te3AuthContextPu
2bea0 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69  sh(a,b,c).# defi
2beb0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
2bec0 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76  ntextPop(a)  ((v
2bed0 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a  oid)(a)).#endif.
2bee0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61  void sqlite3Atta
2bef0 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
2bf00 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  , Expr*, Expr*);
2bf10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74  .void sqlite3Det
2bf20 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
2bf30 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2bf40 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a  FixInit(DbFixer*
2bf50 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63  , Parse*, int, c
2bf60 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2bf70 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  t Token*);.int s
2bf80 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73 74  qlite3FixSrcList
2bf90 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69  (DbFixer*, SrcLi
2bfa0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
2bfb0 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69 78  3FixSelect(DbFix
2bfc0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
2bfd0 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
2bfe0 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  r(DbFixer*, Expr
2bff0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2c000 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69 78  ixExprList(DbFix
2c010 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
2c020 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54  .int sqlite3FixT
2c030 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69 78  riggerStep(DbFix
2c040 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  er*, TriggerStep
2c050 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
2c060 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  toF(const char *
2c070 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c  z, double*, int,
2c080 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
2c090 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20  3GetInt32(const 
2c0a0 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69  char *, int*);.i
2c0b0 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63  nt sqlite3Atoi(c
2c0c0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 69 66  onst char*);.#if
2c0d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2c0e0 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69 74  _UTF16.int sqlit
2c0f0 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63  e3Utf16ByteLen(c
2c100 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61  onst void *pData
2c110 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 23 65  , int nChar);.#e
2c120 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2c130 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73  Utf8CharLen(cons
2c140 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69  t char *pData, i
2c150 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73  nt nByte);.u32 s
2c160 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63  qlite3Utf8Read(c
2c170 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45  onst u8**);.LogE
2c180 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
2c190 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71  (u64);.LogEst sq
2c1a0 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c  lite3LogEstAdd(L
2c1b0 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23  ogEst,LogEst);.#
2c1c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2c1d0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2c1e0 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
2c1f0 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64  gEstFromDouble(d
2c200 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 23  ouble);.#endif.#
2c210 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2c220 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43  E_ENABLE_STMT_SC
2c230 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20  ANSTATUS) || \. 
2c240 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
2c250 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
2c260 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20  R_STAT4) || \.  
2c270 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45    defined(SQLITE
2c280 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54  _EXPLAIN_ESTIMAT
2c290 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71 6c  ED_ROWS).u64 sql
2c2a0 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28  ite3LogEstToInt(
2c2b0 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a  LogEst);.#endif.
2c2c0 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 56 4c  VList *sqlite3VL
2c2d0 69 73 74 41 64 64 28 73 71 6c 69 74 65 33 2a 2c  istAdd(sqlite3*,
2c2e0 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  VList*,const cha
2c2f0 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f 6e  r*,int,int);.con
2c300 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2c310 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 56  VListNumToName(V
2c320 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  List*,int);.int 
2c330 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d 65  sqlite3VListName
2c340 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f 6e  ToNum(VList*,con
2c350 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 0a  st char*,int);..
2c360 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74  /*.** Routines t
2c370 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  o read and write
2c380 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
2c390 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73   integers.  Thes
2c3a0 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
2c3b0 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c  defined locally,
2c3c0 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20   but now we use 
2c3d0 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69  the varint routi
2c3e0 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e  nes in the util.
2c3f0 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e  c.** file..*/.in
2c400 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69  t sqlite3PutVari
2c410 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  nt(unsigned char
2c420 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69  *, u64);.u8 sqli
2c430 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e  te3GetVarint(con
2c440 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2c450 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73   *, u64 *);.u8 s
2c460 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
2c470 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  2(const unsigned
2c480 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b   char *, u32 *);
2c490 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69  .int sqlite3Vari
2c4a0 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f  ntLen(u64 v);../
2c4b0 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20  *.** The common 
2c4c0 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76 61  case is for a va
2c4d0 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e  rint to be a sin
2c4e0 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79 20  gle byte.  They 
2c4f0 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63  following.** mac
2c500 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63  ros handle the c
2c510 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f  ommon case witho
2c520 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20 63  ut a procedure c
2c530 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61  all, but then ca
2c540 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64  ll.** the proced
2c550 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76  ure for larger v
2c560 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69  arints..*/.#defi
2c570 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41  ne getVarint32(A
2c580 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a  ,B)  \.  (u8)((*
2c590 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28  (A)<(u8)0x80)?((
2c5a0 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a  B)=(u32)*(A)),1:
2c5b0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2c5c0 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28  32((A),(u32 *)&(
2c5d0 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74  B))).#define put
2c5e0 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c  Varint32(A,B)  \
2c5f0 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42  .  (u8)(((u32)(B
2c600 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28  )<(u32)0x80)?(*(
2c610 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61  A)=(unsigned cha
2c620 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c  r)(B)),1:\.  sql
2c630 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28 41  ite3PutVarint((A
2c640 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  ),(B))).#define 
2c650 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  getVarint    sql
2c660 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64  ite3GetVarint.#d
2c670 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20  efine putVarint 
2c680 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72     sqlite3PutVar
2c690 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72  int...const char
2c6a0 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66   *sqlite3IndexAf
2c6b0 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65  finityStr(sqlite
2c6c0 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  3*, Index*);.voi
2c6d0 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66  d sqlite3TableAf
2c6e0 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61  finity(Vdbe*, Ta
2c6f0 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72  ble*, int);.char
2c700 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41   sqlite3CompareA
2c710 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
2c720 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b  xpr, char aff2);
2c730 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
2c740 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72  xAffinityOk(Expr
2c750 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69 64   *pExpr, char id
2c760 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61  x_affinity);.cha
2c770 72 20 73 71 6c 69 74 65 33 54 61 62 6c 65 43 6f  r sqlite3TableCo
2c780 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 54 61 62  lumnAffinity(Tab
2c790 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 73  le*,int);.char s
2c7a0 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69  qlite3ExprAffini
2c7b0 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  ty(Expr *pExpr);
2c7c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
2c7d0 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  64(const char*, 
2c7e0 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  i64*, int, u8);.
2c7f0 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72  int sqlite3DecOr
2c800 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63  HexToI64(const c
2c810 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69  har*, i64*);.voi
2c820 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69  d sqlite3ErrorWi
2c830 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20  thMsg(sqlite3*, 
2c840 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
2c850 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,...);.void sqli
2c860 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33  te3Error(sqlite3
2c870 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2c880 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f 72 28  ite3SystemError(
2c890 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
2c8a0 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54  oid *sqlite3HexT
2c8b0 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20  oBlob(sqlite3*, 
2c8c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
2c8d0 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65  nt n);.u8 sqlite
2c8e0 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29  3HexToInt(int h)
2c8f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f  ;.int sqlite3Two
2c900 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  PartName(Parse *
2c910 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
2c920 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a   *, Token **);..
2c930 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2c940 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45  TE_NEED_ERR_NAME
2c950 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ).const char *sq
2c960 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74  lite3ErrName(int
2c970 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
2c980 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2c990 44 45 53 45 52 49 41 4c 49 5a 45 0a 69 6e 74 20  DESERIALIZE.int 
2c9a0 73 71 6c 69 74 65 33 4d 65 6d 64 62 49 6e 69 74  sqlite3MemdbInit
2c9b0 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
2c9c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2c9d0 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a  te3ErrStr(int);.
2c9e0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53  int sqlite3ReadS
2c9f0 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61  chema(Parse *pPa
2ca00 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  rse);.CollSeq *s
2ca10 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65  qlite3FindCollSe
2ca20 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e  q(sqlite3*,u8 en
2ca30 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  c, const char*,i
2ca40 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2ca50 49 73 42 69 6e 61 72 79 28 63 6f 6e 73 74 20 43  IsBinary(const C
2ca60 6f 6c 6c 53 65 71 2a 29 3b 0a 43 6f 6c 6c 53 65  ollSeq*);.CollSe
2ca70 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  q *sqlite3Locate
2ca80 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
2ca90 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61  Parse, const cha
2caa0 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65  r*zName);.CollSe
2cab0 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f  q *sqlite3ExprCo
2cac0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
2cad0 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72  rse, Expr *pExpr
2cae0 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
2caf0 74 65 33 45 78 70 72 4e 4e 43 6f 6c 6c 53 65 71  te3ExprNNCollSeq
2cb00 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
2cb10 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e  Expr *pExpr);.in
2cb20 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c  t sqlite3ExprCol
2cb30 6c 53 65 71 4d 61 74 63 68 28 50 61 72 73 65 2a  lSeqMatch(Parse*
2cb40 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45  ,Expr*,Expr*);.E
2cb50 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
2cb60 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28  AddCollateToken(
2cb70 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
2cb80 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  xpr*, const Toke
2cb90 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a  n*, int);.Expr *
2cba0 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f  sqlite3ExprAddCo
2cbb0 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73  llateString(Pars
2cbc0 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63  e*,Expr*,const c
2cbd0 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  har*);.Expr *sql
2cbe0 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c  ite3ExprSkipColl
2cbf0 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  ate(Expr*);.int 
2cc00 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c  sqlite3CheckColl
2cc10 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c  Seq(Parse *, Col
2cc20 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  lSeq *);.int sql
2cc30 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e  ite3CheckObjectN
2cc40 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e  ame(Parse *, con
2cc50 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64  st char *);.void
2cc60 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
2cc70 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a  hanges(sqlite3 *
2cc80 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2cc90 74 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a  te3AddInt64(i64*
2cca0 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
2ccb0 65 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c  e3SubInt64(i64*,
2ccc0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
2ccd0 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69  3MulInt64(i64*,i
2cce0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
2ccf0 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23  AbsInt32(int);.#
2cd00 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2cd10 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f  BLE_8_3_NAMES.vo
2cd20 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75  id sqlite3FileSu
2cd30 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72  ffix3(const char
2cd40 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65  *, char*);.#else
2cd50 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2cd60 33 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59  3FileSuffix3(X,Y
2cd70 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69  ).#endif.u8 sqli
2cd80 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f  te3GetBoolean(co
2cd90 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b  nst char *z,u8);
2cda0 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  ..const void *sq
2cdb0 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73  lite3ValueText(s
2cdc0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
2cdd0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  8);.int sqlite3V
2cde0 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65  alueBytes(sqlite
2cdf0 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76  3_value*, u8);.v
2ce00 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2ce10 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76  SetStr(sqlite3_v
2ce20 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  alue*, int, cons
2ce30 74 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20  t void *,u8,.   
2ce40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce50 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69       void(*)(voi
2ce60 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  d*));.void sqlit
2ce70 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73  e3ValueSetNull(s
2ce80 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
2ce90 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2cea0 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61  eFree(sqlite3_va
2ceb0 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76  lue*);.sqlite3_v
2cec0 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c  alue *sqlite3Val
2ced0 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29  ueNew(sqlite3 *)
2cee0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2cef0 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 68 61 72  _OMIT_UTF16.char
2cf00 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f   *sqlite3Utf16to
2cf10 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  8(sqlite3 *, con
2cf20 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75  st void*, int, u
2cf30 38 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  8);.#endif.int s
2cf40 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45  qlite3ValueFromE
2cf50 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45  xpr(sqlite3 *, E
2cf60 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73  xpr *, u8, u8, s
2cf70 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
2cf80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2cf90 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79  lueApplyAffinity
2cfa0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
2cfb0 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64  , u8, u8);.#ifnd
2cfc0 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
2cfd0 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f  MATION.extern co
2cfe0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2cff0 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  r sqlite3OpcodeP
2d000 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72  roperty[];.exter
2d010 6e 20 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c  n const char sql
2d020 69 74 65 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b  ite3StrBINARY[];
2d030 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
2d040 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
2d050 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
2d060 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
2d070 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
2d080 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b  lite3CtypeMap[];
2d090 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f  .extern const To
2d0a0 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f  ken sqlite3IntTo
2d0b0 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53  kens[];.extern S
2d0c0 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74  QLITE_WSD struct
2d0d0 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73   Sqlite3Config s
2d0e0 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78  qlite3Config;.ex
2d0f0 74 65 72 6e 20 46 75 6e 63 44 65 66 48 61 73 68  tern FuncDefHash
2d100 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46   sqlite3BuiltinF
2d110 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65  unctions;.#ifnde
2d120 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
2d130 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c  D.extern int sql
2d140 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b  ite3PendingByte;
2d150 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  .#endif.#endif.#
2d160 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
2d170 4c 45 0a 65 78 74 65 72 6e 20 73 71 6c 69 74 65  LE.extern sqlite
2d180 33 5f 75 69 6e 74 36 34 20 73 71 6c 69 74 65 33  3_uint64 sqlite3
2d190 4e 50 72 6f 66 69 6c 65 43 6e 74 3b 0a 23 65 6e  NProfileCnt;.#en
2d1a0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2d1b0 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71  RootPageMoved(sq
2d1c0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
2d1d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2d1e0 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73  ite3Reindex(Pars
2d1f0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
2d200 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2d210 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28  3AlterFunctions(
2d220 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
2d230 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61  te3AlterRenameTa
2d240 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
2d250 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ist*, Token*);.v
2d260 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
2d270 52 65 6e 61 6d 65 43 6f 6c 75 6d 6e 28 50 61 72  RenameColumn(Par
2d280 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
2d290 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
2d2a0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f  int sqlite3GetTo
2d2b0 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ken(const unsign
2d2c0 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a  ed char *, int *
2d2d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e  );.void sqlite3N
2d2e0 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65  estedParse(Parse
2d2f0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2d300 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
2d310 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
2d320 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74  Statements(sqlit
2d330 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  e3*, int);.int s
2d340 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c  qlite3CodeSubsel
2d350 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ect(Parse*, Expr
2d360 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
2d370 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
2d380 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65  tPrep(Parse*, Se
2d390 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
2d3a0 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  xt*);.void sqlit
2d3b0 65 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d  e3SelectWrongNum
2d3c0 54 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65  TermsError(Parse
2d3d0 20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74   *pParse, Select
2d3e0 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   *p);.int sqlite
2d3f0 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63  3MatchSpanName(c
2d400 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2d410 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2d420 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2d430 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2d440 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28  esolveExprNames(
2d450 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
2d460 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2d470 33 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74  3ResolveExprList
2d480 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
2d490 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  t*, ExprList*);.
2d4a0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
2d4b0 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50  lveSelectNames(P
2d4c0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
2d4d0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
2d4e0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
2d4f0 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28  veSelfReference(
2d500 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
2d510 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  t,Expr*,ExprList
2d520 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2d530 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70  esolveOrderGroup
2d540 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  By(Parse*, Selec
2d550 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  t*, ExprList*, c
2d560 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2d570 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44  d sqlite3ColumnD
2d580 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54  efault(Vdbe *, T
2d590 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
2d5a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2d5b0 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c  lterFinishAddCol
2d5c0 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  umn(Parse *, Tok
2d5d0 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
2d5e0 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64  te3AlterBeginAdd
2d5f0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
2d600 53 72 63 4c 69 73 74 20 2a 29 3b 0a 76 6f 69 64  SrcList *);.void
2d610 20 2a 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 54   *sqlite3RenameT
2d620 6f 6b 65 6e 4d 61 70 28 50 61 72 73 65 2a 2c 20  okenMap(Parse*, 
2d630 76 6f 69 64 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  void*, Token*);.
2d640 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61  void sqlite3Rena
2d650 6d 65 54 6f 6b 65 6e 52 65 6d 61 70 28 50 61 72  meTokenRemap(Par
2d660 73 65 2a 2c 20 76 6f 69 64 20 2a 70 54 6f 2c 20  se*, void *pTo, 
2d670 76 6f 69 64 20 2a 70 46 72 6f 6d 29 3b 0a 76 6f  void *pFrom);.vo
2d680 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65  id sqlite3Rename
2d690 45 78 70 72 55 6e 6d 61 70 28 50 61 72 73 65 2a  ExprUnmap(Parse*
2d6a0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
2d6b0 71 6c 69 74 65 33 52 65 6e 61 6d 65 45 78 70 72  qlite3RenameExpr
2d6c0 6c 69 73 74 55 6e 6d 61 70 28 50 61 72 73 65 2a  listUnmap(Parse*
2d6d0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 43 6f  , ExprList*);.Co
2d6e0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65  llSeq *sqlite3Ge
2d6f0 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c  tCollSeq(Parse*,
2d700 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20   u8, CollSeq *, 
2d710 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
2d720 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69  ar sqlite3Affini
2d730 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61  tyType(const cha
2d740 72 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 76 6f  r*, Column*);.vo
2d750 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
2d760 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
2d770 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2d780 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79  qlite3InvokeBusy
2d790 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64  Handler(BusyHand
2d7a0 6c 65 72 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ler*, sqlite3_fi
2d7b0 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
2d7c0 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a  3FindDb(sqlite3*
2d7d0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2d7e0 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65  qlite3FindDbName
2d7f0 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
2d800 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
2d810 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
2d820 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  ad(sqlite3*,int 
2d830 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  iDB);.void sqlit
2d840 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d  e3DeleteIndexSam
2d850 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e  ples(sqlite3*,In
2d860 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
2d870 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74  te3DefaultRowEst
2d880 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  (Index*);.void s
2d890 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69  qlite3RegisterLi
2d8a0 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  keFunctions(sqli
2d8b0 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  te3*, int);.int 
2d8c0 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e  sqlite3IsLikeFun
2d8d0 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45  ction(sqlite3*,E
2d8e0 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29  xpr*,int*,char*)
2d8f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
2d900 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a  hemaClear(void *
2d910 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74  );.Schema *sqlit
2d920 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69  e3SchemaGet(sqli
2d930 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b  te3 *, Btree *);
2d940 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65  .int sqlite3Sche
2d950 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65  maToIndex(sqlite
2d960 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29  3 *db, Schema *)
2d970 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
2d980 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73  e3KeyInfoAlloc(s
2d990 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29  qlite3*,int,int)
2d9a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65  ;.void sqlite3Ke
2d9b0 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e  yInfoUnref(KeyIn
2d9c0 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
2d9d0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66  qlite3KeyInfoRef
2d9e0 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49  (KeyInfo*);.KeyI
2d9f0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2da00 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65  nfoOfIndex(Parse
2da10 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 4b 65 79 49  *, Index*);.KeyI
2da20 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2da30 6e 66 6f 46 72 6f 6d 45 78 70 72 4c 69 73 74 28  nfoFromExprList(
2da40 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2da50 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23  *, int, int);..#
2da60 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2da70 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  UG.int sqlite3Ke
2da80 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65  yInfoIsWriteable
2da90 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64  (KeyInfo*);.#end
2daa0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72  if.int sqlite3Cr
2dab0 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33  eateFunc(sqlite3
2dac0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2dad0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64  , int, int, void
2dae0 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73   *,.  void (*)(s
2daf0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2db00 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2db10 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
2db20 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2db30 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2db40 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20 76 6f 69  alue **), .  voi
2db50 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2db60 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20  ntext*),.  void 
2db70 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2db80 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  ext*),.  void (*
2db90 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2dba0 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2dbb0 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20 46 75 6e  alue **), .  Fun
2dbc0 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
2dbd0 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64  structor.);.void
2dbe0 20 73 71 6c 69 74 65 33 4e 6f 6f 70 44 65 73 74   sqlite3NoopDest
2dbf0 72 75 63 74 6f 72 28 76 6f 69 64 2a 29 3b 0a 76  ructor(void*);.v
2dc00 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61  oid sqlite3OomFa
2dc10 75 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ult(sqlite3*);.v
2dc20 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c  oid sqlite3OomCl
2dc30 65 61 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  ear(sqlite3*);.i
2dc40 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  nt sqlite3ApiExi
2dc50 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  t(sqlite3 *db, i
2dc60 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2dc70 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65  OpenTempDatabase
2dc80 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64  (Parse *);..void
2dc90 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2dca0 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20  Init(StrAccum*, 
2dcb0 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c  sqlite3*, char*,
2dcc0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 63 68 61 72   int, int);.char
2dcd0 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75   *sqlite3StrAccu
2dce0 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d  mFinish(StrAccum
2dcf0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2dd00 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53  SelectDestInit(S
2dd10 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69  electDest*,int,i
2dd20 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
2dd30 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78  e3CreateColumnEx
2dd40 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72  pr(sqlite3 *, Sr
2dd50 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e  cList *, int, in
2dd60 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  t);..void sqlite
2dd70 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73  3BackupRestart(s
2dd80 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29  qlite3_backup *)
2dd90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ;.void sqlite3Ba
2dda0 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74  ckupUpdate(sqlit
2ddb0 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e  e3_backup *, Pgn
2ddc0 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a  o, const u8 *);.
2ddd0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2dde0 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 69 6e  OMIT_SUBQUERY.in
2ddf0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
2de00 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70  ckIN(Parse*, Exp
2de10 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
2de20 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43  ine sqlite3ExprC
2de30 68 65 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49  heckIN(x,y) SQLI
2de40 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69  TE_OK.#endif..#i
2de50 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2de60 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
2de70 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e  4.void sqlite3An
2de80 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76  alyzeFunctions(v
2de90 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
2dea0 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61  3Stat4ProbeSetVa
2deb0 6c 75 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c  lue(.    Parse*,
2dec0 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52  Index*,UnpackedR
2ded0 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e  ecord**,Expr*,in
2dee0 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74  t,int,int*);.int
2def0 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c   sqlite3Stat4Val
2df00 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65  ueFromExpr(Parse
2df10 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71  *, Expr*, u8, sq
2df20 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
2df30 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
2df40 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63  4ProbeFree(Unpac
2df50 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74  kedRecord*);.int
2df60 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c   sqlite3Stat4Col
2df70 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  umn(sqlite3*, co
2df80 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
2df90 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  int, sqlite3_val
2dfa0 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69  ue**);.char sqli
2dfb0 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66  te3IndexColumnAf
2dfc0 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 2a 2c  finity(sqlite3*,
2dfd0 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23   Index*, int);.#
2dfe0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
2dff0 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
2e000 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65  e LEMON-generate
2e010 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69 66 6e  d parser.*/.#ifn
2e020 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47  def SQLITE_AMALG
2e030 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 2a  AMATION.  void *
2e040 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c  sqlite3ParserAll
2e050 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29  oc(void*(*)(u64)
2e060 2c 20 50 61 72 73 65 2a 29 3b 0a 20 20 76 6f 69  , Parse*);.  voi
2e070 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46  d sqlite3ParserF
2e080 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28  ree(void*, void(
2e090 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65 6e 64  *)(void*));.#end
2e0a0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  if.void sqlite3P
2e0b0 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74  arser(void*, int
2e0c0 2c 20 54 6f 6b 65 6e 29 3b 0a 69 6e 74 20 73 71  , Token);.int sq
2e0d0 6c 69 74 65 33 50 61 72 73 65 72 46 61 6c 6c 62  lite3ParserFallb
2e0e0 61 63 6b 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  ack(int);.#ifdef
2e0f0 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b   YYTRACKMAXSTACK
2e100 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69  DEPTH.  int sqli
2e110 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65  te3ParserStackPe
2e120 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69  ak(void*);.#endi
2e130 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  f..void sqlite3A
2e140 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  utoLoadExtension
2e150 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66  s(sqlite3*);.#if
2e160 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2e170 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
2e180 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c    void sqlite3Cl
2e190 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oseExtensions(sq
2e1a0 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23  lite3*);.#else.#
2e1b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
2e1c0 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58  loseExtensions(X
2e1d0 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ).#endif..#ifnde
2e1e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
2e1f0 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69  ARED_CACHE.  voi
2e200 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  d sqlite3TableLo
2e210 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c  ck(Parse *, int,
2e220 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20   int, u8, const 
2e230 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  char *);.#else. 
2e240 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2e250 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c  TableLock(v,w,x,
2e260 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  y,z).#endif..#if
2e270 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
2e280 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66    int sqlite3Utf
2e290 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68  8To8(unsigned ch
2e2a0 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
2e2b0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
2e2c0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
2e2d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2e2e0 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64  tabClear(Y).#  d
2e2f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2e300 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54  bSync(X,Y) SQLIT
2e310 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
2e320 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
2e330 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
2e340 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
2e350 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
2e360 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
2e370 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65  (db) 0.#  define
2e380 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
2e390 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2e3a0 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
2e3b0 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2e3c0 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
2e3d0 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  st(X).#  define 
2e3e0 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
2e3f0 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51  oint(X, Y, Z) SQ
2e400 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
2e410 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62  e sqlite3GetVTab
2e420 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c  le(X,Y)  ((VTabl
2e430 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76  e*)0).#else.   v
2e440 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43  oid sqlite3VtabC
2e450 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62  lear(sqlite3 *db
2e460 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f  , Table*);.   vo
2e470 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69  id sqlite3VtabDi
2e480 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33  sconnect(sqlite3
2e490 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b   *db, Table *p);
2e4a0 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2e4b0 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20  tabSync(sqlite3 
2e4c0 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20  *db, Vdbe*);.   
2e4d0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52  int sqlite3VtabR
2e4e0 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20  ollback(sqlite3 
2e4f0 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  *db);.   int sql
2e500 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73  ite3VtabCommit(s
2e510 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
2e520 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2e530 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  Lock(VTable *);.
2e540 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2e550 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65  tabUnlock(VTable
2e560 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
2e570 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
2e580 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20  st(sqlite3*);.  
2e590 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
2e5a0 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65  Savepoint(sqlite
2e5b0 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  3 *, int, int);.
2e5c0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2e5d0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
2e5e0 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76  Vdbe*, sqlite3_v
2e5f0 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65  tab*);.   VTable
2e600 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62   *sqlite3GetVTab
2e610 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
2e620 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20  le*);.   Module 
2e630 2a 73 71 6c 69 74 65 33 56 74 61 62 43 72 65 61  *sqlite3VtabCrea
2e640 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20 73  teModule(.     s
2e650 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f  qlite3*,.     co
2e660 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
2e670 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
2e680 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64  dule*,.     void
2e690 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a 29 28  *,.     void(*)(
2e6a0 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20  void*).   );.#  
2e6b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2e6c0 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64  abInSync(db) ((d
2e6d0 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26  b)->nVTrans>0 &&
2e6e0 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d   (db)->aVTrans==
2e6f0 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  0).#endif.int sq
2e700 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f  lite3VtabEponymo
2e710 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73  usTableInit(Pars
2e720 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69  e*,Module*);.voi
2e730 64 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f  d sqlite3VtabEpo
2e740 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72  nymousTableClear
2e750 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65  (sqlite3*,Module
2e760 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e770 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65  VtabMakeWritable
2e780 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
2e790 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2e7a0 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73  bBeginParse(Pars
2e7b0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
2e7c0 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  n*, Token*, int)
2e7d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2e7e0 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61  abFinishParse(Pa
2e7f0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
2e800 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
2e810 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a  rgInit(Parse*);.
2e820 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2e830 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a  ArgExtend(Parse*
2e840 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2e850 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
2e860 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69  eate(sqlite3*, i
2e870 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
2e880 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20  , char **);.int 
2e890 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
2e8a0 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54  onnect(Parse*, T
2e8b0 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
2e8c0 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
2e8d0 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  oy(sqlite3*, int
2e8e0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2e8f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2e900 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c  Begin(sqlite3 *,
2e910 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63   VTable *);.Func
2e920 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62  Def *sqlite3Vtab
2e930 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e  OverloadFunction
2e940 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44  (sqlite3 *,FuncD
2e950 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45  ef*, int nArg, E
2e960 78 70 72 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69  xpr*);.sqlite3_i
2e970 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74  nt64 sqlite3Stmt
2e980 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69  CurrentTime(sqli
2e990 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69  te3_context*);.i
2e9a0 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  nt sqlite3VdbePa
2e9b0 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62  rameterIndex(Vdb
2e9c0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
2e9d0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2e9e0 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e  e3TransferBindin
2e9f0 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  gs(sqlite3_stmt 
2ea00 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  *, sqlite3_stmt 
2ea10 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ea20 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73  ParserReset(Pars
2ea30 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
2ea40 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29  Reprepare(Vdbe*)
2ea50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2ea60 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74  prListCheckLengt
2ea70 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  h(Parse*, ExprLi
2ea80 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
2ea90 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
2eaa0 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65  te3BinaryCompare
2eab0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
2eac0 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29   Expr *, Expr *)
2ead0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d  ;.int sqlite3Tem
2eae0 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20  pInMemory(const 
2eaf0 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74  sqlite3*);.const
2eb00 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f   char *sqlite3Jo
2eb10 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e  urnalModename(in
2eb20 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
2eb30 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
2eb40 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  t sqlite3Checkpo
2eb50 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  int(sqlite3*, in
2eb60 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
2eb70 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
2eb80 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
2eb90 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
2eba0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
2ebb0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ;.#endif.#ifndef
2ebc0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45   SQLITE_OMIT_CTE
2ebd0 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33  .  With *sqlite3
2ebe0 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57  WithAdd(Parse*,W
2ebf0 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  ith*,Token*,Expr
2ec00 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  List*,Select*);.
2ec10 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69    void sqlite3Wi
2ec20 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  thDelete(sqlite3
2ec30 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64  *,With*);.  void
2ec40 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
2ec50 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20  (Parse*, With*, 
2ec60 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69  u8);.#else.#defi
2ec70 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  ne sqlite3WithPu
2ec80 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e  sh(x,y,z).#defin
2ec90 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  e sqlite3WithDel
2eca0 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ete(x,y).#endif.
2ecb0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2ecc0 4d 49 54 5f 55 50 53 45 52 54 0a 20 20 55 70 73  MIT_UPSERT.  Ups
2ecd0 65 72 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65  ert *sqlite3Upse
2ece0 72 74 4e 65 77 28 73 71 6c 69 74 65 33 2a 2c 45  rtNew(sqlite3*,E
2ecf0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  xprList*,Expr*,E
2ed00 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
2ed10 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
2ed20 70 73 65 72 74 44 65 6c 65 74 65 28 73 71 6c 69  psertDelete(sqli
2ed30 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20  te3*,Upsert*);. 
2ed40 20 55 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33   Upsert *sqlite3
2ed50 55 70 73 65 72 74 44 75 70 28 73 71 6c 69 74 65  UpsertDup(sqlite
2ed60 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 69  3*,Upsert*);.  i
2ed70 6e 74 20 73 71 6c 69 74 65 33 55 70 73 65 72 74  nt sqlite3Upsert
2ed80 41 6e 61 6c 79 7a 65 54 61 72 67 65 74 28 50 61  AnalyzeTarget(Pa
2ed90 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 55 70  rse*,SrcList*,Up
2eda0 73 65 72 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  sert*);.  void s
2edb0 71 6c 69 74 65 33 55 70 73 65 72 74 44 6f 55 70  qlite3UpsertDoUp
2edc0 64 61 74 65 28 50 61 72 73 65 2a 2c 55 70 73 65  date(Parse*,Upse
2edd0 72 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e 64 65 78  rt*,Table*,Index
2ede0 2a 2c 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 64  *,int);.#else.#d
2edf0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73  efine sqlite3Ups
2ee00 65 72 74 4e 65 77 28 76 2c 77 2c 78 2c 79 2c 7a  ertNew(v,w,x,y,z
2ee10 29 20 28 28 55 70 73 65 72 74 2a 29 30 29 0a 23  ) ((Upsert*)0).#
2ee20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70  define sqlite3Up
2ee30 73 65 72 74 44 65 6c 65 74 65 28 78 2c 79 29 0a  sertDelete(x,y).
2ee40 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55  #define sqlite3U
2ee50 70 73 65 72 74 44 75 70 28 78 2c 79 29 20 20 20  psertDup(x,y)   
2ee60 20 20 20 20 28 28 55 70 73 65 72 74 2a 29 30 29      ((Upsert*)0)
2ee70 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 65 63  .#endif.../* Dec
2ee80 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75  larations for fu
2ee90 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e  nctions in fkey.
2eea0 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20  c. All of these 
2eeb0 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a  are replaced by.
2eec0 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20  ** no-op macros 
2eed0 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  if OMIT_FOREIGN_
2eee0 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20  KEY is defined. 
2eef0 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20  In this case no 
2ef00 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66  foreign.** key f
2ef10 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
2ef20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d  available. If OM
2ef30 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64 65  IT_TRIGGER is de
2ef40 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49  fined but.** OMI
2ef50 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
2ef60 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20   not, only some 
2ef70 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73  of the functions
2ef80 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e   are no-oped. In
2ef90 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f  .** this case fo
2efa0 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70  reign keys are p
2efb0 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74  arsed, but no ot
2efc0 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  her functionalit
2efd0 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64 65 64  y is.** provided
2efe0 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66   (enforcement of
2eff0 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   FK constraints 
2f000 72 65 71 75 69 72 65 73 20 74 68 65 20 74 72 69  requires the tri
2f010 67 67 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d  ggers sub-system
2f020 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  )..*/.#if !defin
2f030 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
2f040 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21  OREIGN_KEY) && !
2f050 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2f060 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76  MIT_TRIGGER).  v
2f070 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65  oid sqlite3FkChe
2f080 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ck(Parse*, Table
2f090 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2f0a0 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
2f0b0 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62  sqlite3FkDropTab
2f0c0 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
2f0d0 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  st *, Table*);. 
2f0e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41   void sqlite3FkA
2f0f0 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54  ctions(Parse*, T
2f100 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  able*, ExprList*
2f110 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
2f120 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2f130 46 6b 52 65 71 75 69 72 65 64 28 50 61 72 73 65  FkRequired(Parse
2f140 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c  *, Table*, int*,
2f150 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c   int);.  u32 sql
2f160 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61  ite3FkOldmask(Pa
2f170 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  rse*, Table*);. 
2f180 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b   FKey *sqlite3Fk
2f190 52 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65  References(Table
2f1a0 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
2f1b0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63  fine sqlite3FkAc
2f1c0 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c  tions(a,b,c,d,e,
2f1d0 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  f).  #define sql
2f1e0 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c  ite3FkCheck(a,b,
2f1f0 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69  c,d,e,f).  #defi
2f200 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  ne sqlite3FkDrop
2f210 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23  Table(a,b,c).  #
2f220 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2f230 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20  Oldmask(a,b)    
2f240 20 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65       0.  #define
2f250 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72   sqlite3FkRequir
2f260 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30  ed(a,b,c,d)    0
2f270 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2f280 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 61  e3FkReferences(a
2f290 29 20 20 20 20 20 20 20 20 30 0a 23 65 6e 64 69  )        0.#endi
2f2a0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
2f2b0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
2f2c0 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  Y.  void sqlite3
2f2d0 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  FkDelete(sqlite3
2f2e0 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69   *, Table*);.  i
2f2f0 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  nt sqlite3FkLoca
2f300 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54  teIndex(Parse*,T
2f310 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65  able*,FKey*,Inde
2f320 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73  x**,int**);.#els
2f330 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
2f340 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29  te3FkDelete(a,b)
2f350 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2f360 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
2f370 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69  a,b,c,d,e).#endi
2f380 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61  f.../*.** Availa
2f390 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74  ble fault inject
2f3a0 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20  ors.  Should be 
2f3b0 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69  numbered beginni
2f3c0 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64  ng with 0..*/.#d
2f3d0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55  efine SQLITE_FAU
2f3e0 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f  LTINJECTOR_MALLO
2f3f0 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20  C     0.#define 
2f400 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
2f410 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20  CTOR_COUNT      
2f420 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  1../*.** The int
2f430 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f  erface to the co
2f440 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73  de in fault.c us
2f450 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69  ed for identifyi
2f460 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d  ng "benign".** m
2f470 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20  alloc failures. 
2f480 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65  This is only pre
2f490 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 55  sent if SQLITE_U
2f4a0 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20 69 73 20  NTESTABLE.** is 
2f4b0 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a  not defined..*/.
2f4c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55  #ifndef SQLITE_U
2f4d0 4e 54 45 53 54 41 42 4c 45 0a 20 20 76 6f 69 64  NTESTABLE.  void
2f4e0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
2f4f0 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
2f500 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
2f510 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76  ndBenignMalloc(v
2f520 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  oid);.#else.  #d
2f530 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67  efine sqlite3Beg
2f540 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
2f550 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2f560 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
2f570 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  c().#endif../*.*
2f580 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
2f590 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
2f5a0 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
2f5b0 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ).*/.#define IN_
2f5c0 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20  INDEX_ROWID     
2f5d0 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68     1   /* Search
2f5e0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
2f5f0 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  e table */.#defi
2f600 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20  ne IN_INDEX_EPH 
2f610 20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20           2   /* 
2f620 53 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65  Search an epheme
2f630 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64  ral b-tree */.#d
2f640 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
2f650 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20 20 20  NDEX_ASC    3   
2f660 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65  /* Existing inde
2f670 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23  x ASCENDING */.#
2f680 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2f690 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20 20  INDEX_DESC   4  
2f6a0 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64   /* Existing ind
2f6b0 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f  ex DESCENDING */
2f6c0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2f6d0 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35  X_NOOP         5
2f6e0 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61     /* No table a
2f6f0 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f  vailable. Use co
2f700 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a  mparisons */./*.
2f710 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73  ** Allowed flags
2f720 20 66 6f 72 20 74 68 65 20 33 72 64 20 70 61 72   for the 3rd par
2f730 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
2f740 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a  3FindInIndex()..
2f750 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2f760 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20  DEX_NOOP_OK     
2f770 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f  0x0001  /* OK to
2f780 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58   return IN_INDEX
2f790 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65  _NOOP */.#define
2f7a0 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52   IN_INDEX_MEMBER
2f7b0 53 48 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a  SHIP  0x0002  /*
2f7c0 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
2f7d0 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70  d for membership
2f7e0 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65   test */.#define
2f7f0 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20   IN_INDEX_LOOP  
2f800 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
2f810 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
2f820 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69  d as a loop */.i
2f830 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  nt sqlite3FindIn
2f840 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45  Index(Parse *, E
2f850 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a  xpr *, u32, int*
2f860 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73 71  , int*);..int sq
2f870 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e  lite3JournalOpen
2f880 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20  (sqlite3_vfs *, 
2f890 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71  const char *, sq
2f8a0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e  lite3_file *, in
2f8b0 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
2f8c0 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  ite3JournalSize(
2f8d0 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a  sqlite3_vfs *);.
2f8e0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f8f0 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43  TE_ENABLE_ATOMIC
2f900 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c 20 64 65  _WRITE) \. || de
2f910 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2f920 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
2f930 5f 57 52 49 54 45 29 0a 20 20 69 6e 74 20 73 71  _WRITE).  int sq
2f940 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61  lite3JournalCrea
2f950 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  te(sqlite3_file 
2f960 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  *);.#endif..int 
2f970 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49 73  sqlite3JournalIs
2f980 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65 33  InMemory(sqlite3
2f990 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64 20  _file *p);.void 
2f9a0 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61  sqlite3MemJourna
2f9b0 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69  lOpen(sqlite3_fi
2f9c0 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  le *);..void sql
2f9d0 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68  ite3ExprSetHeigh
2f9e0 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20  tAndFlags(Parse 
2f9f0 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
2fa00 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  );.#if SQLITE_MA
2fa10 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
2fa20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65   int sqlite3Sele
2fa30 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c  ctExprHeight(Sel
2fa40 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ect *);.  int sq
2fa50 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
2fa60 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  ight(Parse*, int
2fa70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
2fa80 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  ne sqlite3Select
2fa90 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a  ExprHeight(x) 0.
2faa0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2fab0 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
2fac0 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33  (x,y).#endif..u3
2fad0 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74  2 sqlite3Get4byt
2fae0 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f  e(const u8*);.vo
2faf0 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79  id sqlite3Put4by
2fb00 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23  te(u8*, u32);..#
2fb10 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2fb20 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
2fb30 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  Y.  void sqlite3
2fb40 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
2fb50 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c  d(sqlite3 *, sql
2fb60 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20  ite3 *);.  void 
2fb70 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2fb80 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  nUnlocked(sqlite
2fb90 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73  3 *db);.  void s
2fba0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2fbb0 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a  Closed(sqlite3 *
2fbc0 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  db);.#else.  #de
2fbd0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
2fbe0 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c  ectionBlocked(x,
2fbf0 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  y).  #define sql
2fc00 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
2fc10 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66  locked(x).  #def
2fc20 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
2fc30 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23  ctionClosed(x).#
2fc40 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2fc50 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69  LITE_DEBUG.  voi
2fc60 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54  d sqlite3ParserT
2fc70 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72  race(FILE*, char
2fc80 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20   *);.#endif.#if 
2fc90 64 65 66 69 6e 65 64 28 59 59 43 4f 56 45 52 41  defined(YYCOVERA
2fca0 47 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  GE).  int sqlite
2fcb0 33 50 61 72 73 65 72 43 6f 76 65 72 61 67 65 28  3ParserCoverage(
2fcc0 46 49 4c 45 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  FILE*);.#endif..
2fcd0 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  /*.** If the SQL
2fce0 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41  ITE_ENABLE IOTRA
2fcf0 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74  CE exists then t
2fd00 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
2fd10 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54  le.** sqlite3IoT
2fd20 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65  race is a pointe
2fd30 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69  r to a printf-li
2fd40 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20  ke routine used 
2fd50 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20  to.** print I/O 
2fd60 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73  tracing messages
2fd70 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
2fd80 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43  TE_ENABLE_IOTRAC
2fd90 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  E.# define IOTRA
2fda0 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74  CE(A)  if( sqlit
2fdb0 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c  e3IoTrace ){ sql
2fdc0 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d  ite3IoTrace A; }
2fdd0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56  .  void sqlite3V
2fde0 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64  dbeIOTraceSql(Vd
2fdf0 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49  be*);.SQLITE_API
2fe00 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76   SQLITE_EXTERN v
2fe10 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43  oid (SQLITE_CDEC
2fe20 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63  L *sqlite3IoTrac
2fe30 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  e)(const char*,.
2fe40 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  ..);.#else.# def
2fe50 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23  ine IOTRACE(A).#
2fe60 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2fe70 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29  dbeIOTraceSql(X)
2fe80 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2fe90 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72  hese routines ar
2fea0 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  e available for 
2feb0 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67  the mem2.c debug
2fec0 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ging memory allo
2fed0 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  cator.** only.  
2fee0 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f  They are used to
2fef0 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66   verify that dif
2ff00 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f  ferent "types" o
2ff10 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f  f memory.** allo
2ff20 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70  cations are prop
2ff30 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20  erly tracked by 
2ff40 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a  the system..**.*
2ff50 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
2ff60 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20  gSetType() sets 
2ff70 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e  the "type" of an
2ff80 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f   allocation to o
2ff90 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d  ne of.** the MEM
2ffa0 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65  TYPE_* macros de
2ffb0 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68  fined below.  Th
2ffc0 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61  e type must be a
2ffd0 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a   bitmask with.**
2ffe0 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65   a single bit se
2fff0 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  t..**.** sqlite3
30000 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
30010 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
30020 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74  f any of the bit
30030 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
30040 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
30050 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
30060 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
30070 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
30080 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69  tType()..** sqli
30090 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
300a0 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64  pe() is intended
300b0 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20   for use inside 
300c0 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
300d0 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  nts..**.** sqlit
300e0 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
300f0 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
30100 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62  if none of the b
30110 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
30120 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
30130 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
30140 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
30150 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
30160 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a  SetType()..**.**
30170 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73   Perhaps the mos
30180 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e  t important poin
30190 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65  t is the differe
301a0 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54  nce between MEMT
301b0 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20  YPE_HEAP.** and 
301c0 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
301d0 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61  E.  If an alloca
301e0 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f  tion is MEMTYPE_
301f0 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20  LOOKASIDE, that 
30200 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68  means.** it migh
30210 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  t have been allo
30220 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  cated by lookasi
30230 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61  de, except the a
30240 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a  llocation was.**
30250 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f   too large or lo
30260 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65  okaside was alre
30270 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73  ady full.  It is
30280 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65   important to ve
30290 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c  rify.** that all
302a0 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ocations that mi
302b0 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61  ght have been sa
302c0 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61  tisfied by looka
302d0 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20  side are not.** 
302e0 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e  passed back to n
302f0 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
30300 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41  e() routines.  A
30310 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74  sserts such as t
30320 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62  he.** example ab
30330 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f  ove are placed o
30340 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  n the non-lookas
30350 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
30360 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  nes to verify.**
30370 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74   this constraint
30380 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74  ..**.** All of t
30390 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72  his is no-op for
303a0 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75   a production bu
303b0 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f  ild.  It only co
303c0 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79  mes into.** play
303d0 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45   when the SQLITE
303e0 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c  _MEMDEBUG compil
303f0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
30400 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66   used..*/.#ifdef
30410 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
30420 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
30430 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76  emdebugSetType(v
30440 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
30450 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
30460 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  asType(void*,u8)
30470 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
30480 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f  emdebugNoType(vo
30490 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23  id*,u8);.#else.#
304a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
304b0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58  emdebugSetType(X
304c0 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  ,Y)  /* no-op */
304d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
304e0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
304f0 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e  (X,Y)  1.# defin
30500 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
30510 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31  gNoType(X,Y)   1
30520 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20  .#endif.#define 
30530 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20  MEMTYPE_HEAP    
30540 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65     0x01  /* Gene
30550 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74  ral heap allocat
30560 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
30570 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
30580 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70  E  0x02  /* Heap
30590 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
305a0 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20   been lookaside 
305b0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
305c0 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
305d0 30 34 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  04  /* Page cach
305e0 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
305f0 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e  ../*.** Threadin
30600 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23  g interface.*/.#
30610 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  if SQLITE_MAX_WO
30620 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69  RKER_THREADS>0.i
30630 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
30640 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72  Create(SQLiteThr
30650 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76  ead**,void*(*)(v
30660 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e  oid*),void*);.in
30670 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a  t sqlite3ThreadJ
30680 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64  oin(SQLiteThread
30690 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64  *, void**);.#end
306a0 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
306b0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42  SQLITE_ENABLE_DB
306c0 50 41 47 45 5f 56 54 41 42 29 20 7c 7c 20 64 65  PAGE_VTAB) || de
306d0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
306e0 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  T).int sqlite3Db
306f0 70 61 67 65 52 65 67 69 73 74 65 72 28 73 71 6c  pageRegister(sql
30700 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 23  ite3*);.#endif.#
30710 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
30720 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f  E_ENABLE_DBSTAT_
30730 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64  VTAB) || defined
30740 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e  (SQLITE_TEST).in
30750 74 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52  t sqlite3DbstatR
30760 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a  egister(sqlite3*
30770 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73  );.#endif..int s
30780 71 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f 72  qlite3ExprVector
30790 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72  Size(Expr *pExpr
307a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
307b0 70 72 49 73 56 65 63 74 6f 72 28 45 78 70 72 20  prIsVector(Expr 
307c0 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73  *pExpr);.Expr *s
307d0 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c  qlite3VectorFiel
307e0 64 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20  dSubexpr(Expr*, 
307f0 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
30800 74 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72  te3ExprForVector
30810 46 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70  Field(Parse*,Exp
30820 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  r*,int);.void sq
30830 6c 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72  lite3VectorError
30840 4d 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Msg(Parse*, Expr
30850 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  *);..#ifndef SQL
30860 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
30870 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e  OPTION_DIAGS.con
30880 73 74 20 63 68 61 72 20 2a 2a 73 71 6c 69 74 65  st char **sqlite
30890 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 28  3CompileOptions(
308a0 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e  int *pnOpt);.#en
308b0 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  dif..#endif /* S
308c0 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a        QLITEINT_H */.